2019年7月9日火曜日

Emacs の ox-hugo で HUGO

ローカルでメモの保存用に使ってみてるサイトジェネレータを、 Pelican から Hugo にしてみた。

150 post を越えて、速度がかなり問題だと思うようになったから。 Pelicanが遅いわけではないので、別ディレクトリに分ければよいのだが、 どうせ分けるなら、別のジェネレータでも試してみるか、ということ。

選んだのは Hugo

速度に関する評価が高いみたいで、 しかも emacs との連携が ox-hugo を使うと便利みたいだから。 (感謝)


hugo の 設定

Hugo 自体の設定は、いっぱい情報があるから省略。というか、細かい設定なんかは、私の理解の外。 html にして表示できれば満足だから。ただ、テーマは、

を試して、Mainroad にしてみた。

emacsでの使い方

ox-hugo をインストしただけで、これ自体の 設定は得にしてない。 こいつを使えば、org-modeで編集したものを、 org-modeの特徴を活かしつつ、 hugo の為に export をしてくれるという。 org-mode(oxとか)が使えていることが前提だが。

基本的な使い方は、公式ドキュメントや先人方の情報のおかげで、なんとかなる。あとは、 hugo用のorgファイルと、org-capture の設定を自分用に用意する。

結局以下のようにして、一応動いているようだ。

解説をちゃんと読めばよいのだが、私には十分かも、と思っている。

hugo用のorgファイル(0730up)

#-*- mode: org -*-
#+CATEGORY: blogger_hugo
#+STARTUP: contents align shrink
#+OPTIONS: AUTHOR:nil
#+HUGO_BASE_DIR: ~/Documents/mup/blogg-hugo
#+HUGO_AUTO_SET_LASTMOD: t
#+HUGO_SECTION: posts

* build [2019-07-11] 追加 
#+BEGIN_SRC shell
cd ~/Documents/mup/blog_hugo
hugo
#+END_SRC

* Posts
** DONE posting test 1              :@hugo:setup:
CLOSED: [2019-07-05 金 10:40]
:PROPERTIES:
:EXPORT_FILE_NAME: 20190705_1st-post
:EXPORT_HUGO_FRONT_MATTER_FORMAT: toml
:EXPORT_HUGO_SECTION: posts
:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :archives 2019/07
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :series [debian hugo setup]
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :toc 2 :num t
:END:


ここは、アブストラクトとして、記事リストに表示される部分。

<!--more-->

これ以降が、本文という位置付けだが、アブストラクト部分も本体に表示されるので、
そのような構成にする必要がある。

exportすると、posts ディレクトリに出力される。
  • HUGO_BASE_DIR で、hugoのディレクトリを指定。
  • HUGO_SECTION の default は ox-hugo の設定や、 orgファイルの先頭部分でも指定できる。 hugo_base_dirに無ければ、作成してくれる。
  • post する時のファイル名は、タイムスタンプと名前でorg-captureで作成。
  • org-mode のタグは、 @ 付きが category、他がtag。
  • :toc 2 は、2レベルの目次
  • :num t で番号付きにできるようだが、私の環境では、記事での設定は、NG. ox-hugo の設定で指定すればOK。

    (setq org-hugo-export-with-section-numbers t)

  • TODO なら ドラフト。DONE にすると公開。

  • list や weblink は普通に使える。

  • 画像ファイルの指定は注意が必要。

    • 同一ディレクトリに画像ファイルがあれば、 ‘static/ox-hugo’ にexport時にコピーしてくれる。

      [[./rimg3576.jpg]]
      file:rimg3576.jpg
      
    • サブディレクトリに画像ファイルを置く場合は、自分でコピーする必要があるようだ。例えば、src=“./imgs/rimg3576.jpg” にするなら、以下。

      [[file:./imgs/rimg3576.jpg]]
      file:./imgs/rimg3576.jpg
      

追記: ひとつのファイルにまとめようとすると、結構多きくなるのに今更気付いた。 で、org-refile のターゲットに新しいファイルを追加することにする。

org-captureの設定(0730up)

公式ドキュメントの方法を使うべきなんだろうが、理解できないので、こんな風になった。

(defun my/generate-post-name ()
  (setq my-org-note--name (read-string "Name: "))
  (setq my-org-note--dtime (format-time-string "%Y%m%d-%H%M"))
  (format "%s_%s.md" my-org-note--dtime my-org-note--name))
;;
...
(setq org-capture-templates  '(
...
...
    ("ph" "hugo new post" entry
      (file+olp "blog_hugo.org" "Posts")
      "** TODO %? \t:@debian:\n:PROPERTIES:\n\
:EXPORT_FILE_NAME: %(my/generate-post-name)\n\
:EXPORT_HUGO_FRONT_MATTER_FORMAT: toml\n\
:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :archives %<%Y\/%m>\n\
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :series hugo\n\
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :toc 2 :num t
:END:\n\n\n\nl<!--more-->\n")
...
 ;; (0730) archives の年月を自動、 del `+`
...
))
...
  • Posts配下に作成
  • 名前だけは入力するようにした。
  • tag や archives なんかはデフォを指定しているだけ。
  • series はhugo側で別途設定が必要みたい。
  • toc をデフォで有にしおく。
  • テーマによって使えなかったり使えたりがある。

一応動いているようだ。
markdown や reStructuredText を直接書いたり、 exportしてからのコピペが不要になるので、かなり楽になると思う。

あとは、使える/使えないを経験しながらでよういだろう。
とりあえず、これで良しとしよう。

0 件のコメント:

コメントを投稿

Emacs の lsp の設定、なう(202310)

前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。 用途は、メモ と ...