記事の Org file にリンクを貼る

せっかく ox-hugo で記事を書いているので、Hugo記事のソースとなる orgfile を明示したい。

毎度手動でそのリンクを生成するのは面倒なので、マクロで実現してみる。

まず、マクロから呼び出す関数を書く。

(defun org-hugo-get-link-to-orgfile (uri alt)
      "Return a formatted link to the original Org file in GitHub."
      (let ((line (save-excursion
                    (save-restriction
                      (unless (org-at-heading-p)
                        (org-previous-visible-heading 1))
                      (line-number-at-pos)))))
        (concat "[[" uri (file-name-nondirectory (buffer-file-name))
                "#L" (format "%d" line) "][" alt "]]")))

で、これを、編集中の orgfile の #+macro で使う。こんな感じ。

#+macro: srclink (eval (org-hugo-get-link-to-orgfile "https://github.com/takaxp/blog/blame/master/entries/" "see Orgfile"))

第一引数を、ソースを配置するサイトのURI。ファイル名の直前までを指定する。スラッシュを忘れずに。

第二引数に、HTML上で表示されるリンク名を指定する。

そして、記事の執筆時に、以下を埋め込めば、対応するソース(行単位)に転送してくれるリンクがエクスポート時に勝手に埋め込まれる。

{{{srclink}}}

しばらくこれで運用してみる。

see Orgfile

Updated (2018-09-04@00:44)

このアプローチだと不十分とわかった。同じファイルの別箇所を編集したときに、headingの行がズレるが、このマクロが含まれているすべての subtree を更新しなければそのズレを反映させられない。クマッタ…

Updated (2018-10-09@01:05)

基本的に新しい記事は当該文書の末尾に追加される。したがって、通常の運用であれば、 srclink の値は変更する必要がない。新規記事の追加以外で行番号の更新がある場合は、全記事を再出力すればよい。

しかし、 org-hugo-auto-set-lastmod が有効な場合は、全記事の最終更新日が更新されることになる。これを防ぐために、このオプションは nil にしてから、 C-c C-e H A を実行すればよい。

それでも非効率な方法なので、継続改善が必要。

amazon_banner_large
amazon_banner_small