hugoとorg-modeの融合
Page content
Hugo 0.55.6 の場合の話。
Hugoの記事をemacs org-modeで記述したい場合、ox-hugo なるemacsのパッケージを使うケースがよく紹介されている。
しかし、ox-hugo を使ってMarkdownに変換しなくても、hugoが自動的にorgファイルを解釈してくれていることが分かった。 つまり、contents ディレクトリ以下に拡張子 .org でファイルを作成しておくと、markdownの場合と同様にページを生成してくれる。
https://gohugo.io/content-management/formats
easy-hugo を使う場合
easy-hugo を使う場合は、以下の設定を init.el に入れておく。
(setq easy-hugo-org-header t)
(setq easy-hugo-default-ext ".org")
これで n (New blog post)で新規ファイルを作成するときに、拡張子は最初から .org となっており、org-mode形式のヘッダが設定された状態となっている。
タイトルと日付は自動的に生成されるが、それ以外は固定のようだ。
#+TITLE: test
#+DATE: 2019-07-22T13:06:21+09:00
#+PUBLISHDATE: 2019-07-22T13:06:21+09:00
#+DRAFT: nil
#+TAGS: nil, nil
#+DESCRIPTION: Short description
フォルトのヘッダを変更
このデフォルトのヘッダの一部を修正したいので、以下を init.el に追加した。
(defun my/easy-hugo--org-headers (file)
"Return a draft org mode header string for a new article as FILE."
(let ((datetimezone
(concat
(format-time-string "%Y-%m-%dT%T")
(easy-hugo--orgtime-format (format-time-string "%z")))))
(concat
"#+TITLE: " file
"\n#+DATE: " datetimezone
"\n#+PUBLISHDATE: " datetimezone
"\n#+categories: uncategorized"
"\n#+DRAFT: nil"
"\n#+TAGS: nil"
"\n#+author: tounosumura302"
"\n\n")))
(advice-add 'easy-hugo--org-headers :override 'my/easy-hugo--org-headers)
easy-hugo の関数 easy-hugo--org-headers がヘッダを作る関数。 これを元に内容を修正した別関数 my/easy-hugo--org-headers を用意し、adviceで関数をオーバーライドしている。
archetypes/default.org のようなファイルを読んで設定するようにすると、より気が利いたものになりそうだが、 今の所はこれで事足りているのでよし。
なお、advice についてはこちらを参考にさせていただいた。 http://emacs.rubikitch.com/nadvice/