Org-Mode

古い暗号化エントリーの Decryption failed を回避する

org ファイルの各エントリーは、gpg を使って暗号化できますが、かれこれ10年ほど前に暗号化したエントリーを復号できないケースに当たりました。数年前にも同じようなケースに遭遇しましたが、今回はその時とは違う方法で解決できたので、記録を残します。

view-modeをorgバッファで違和感なく使う設定

init.elorg-mode で書いている関係から、一般的な設定ファイルと同じように、特定のorgファイルが簡単に書き換わってほしくない状態にあります。そういうファイルは view-mode で扱うのがよいですね。

複数のブリットを一括操作する

org-mode のブリッツは非常に便利です。ちょっとしたリストを作成したり、手順を記したり、様々な用途に使えます。また、ブリッツにチェックボックスを加えれば、タスクの実施済みと未実施を簡単に区別できます。

org-table.el のエコー表示を安定化

私は普段から自動保存機能(auto-save-buffer.el)を利用しているので、 org table のセルで C-c ? 押下でエコーエリアに表示される情報がすぐ消えてしまいます。

org-table-field-info (C-c ?)

line @2, col $1, ref @2$1 or A2 or $LR1

のような情報をエコーエリアに出してくれる機能で、 tblfm で指定する数式に使用します。(私が施している設定が主な要因で)これが自動保存時に消えるため、保存してからエコーエリアに表示するように変更します。

Hugo and org mode

Heading1

Heading 2

コンテンツ

Heading 3

  • a
  • b

Source blocks

  • elisp

    (message "Hello! World")
  • Centered

    Centered text

  • cpp

    #include <iostream>
    using namespace std;
    
    int main(){
      cout << "Hello, World!" << endl;
      return 1;
    }

Heading 4

$H(z)$

1 3
2 4
てーぶる

装飾

太字 , 下線 , イタリック

リンクの内容をeldocで表示

eldoc の機能を用いてカーソル下のリンクをエコーエリアに出す設定です。意外と簡単にできました。

(with-eval-after-load "org"
  (add-hook 'org-mode-hook #'my-load-echo-org-link)

  (defun my-echo-org-link ()
    (when (org-in-regexp org-link-bracket-re 1)
      (let ((link "Link:")
            (msg (org-link-unescape (match-string-no-properties 1))))
        (put-text-property 0 (length link) 'face 'minibuffer-prompt link)
        (eldoc-message (format "%s %s" link msg)))))

  ;; これはダメな例
  ;; (defun my-load-echo-org-link ()
  ;;   (setq-local eldoc-documentation-function #'my-echo-org-link))
  ;; こちらが正しい実装
  (defun my-load-echo-org-link ()
    (add-function :before-until (local 'eldoc-documentation-function)
                  #'my-echo-org-link)))

なお、 org-eldoc と併用する場合、 eldoc-documentation-function が専有されてしまうので、次のように advice して回避します。

最終変更日の手動設定

ox-hugo を使った Hugo への markdown 出力では、最終更新日( lastmod )を設定できる。

さらに次のように設定すれば、ファイル保存時に自動的に最終更新日を設定できる。

(setq org-hugo-auto-set-lastmod t)

しばらくはこの設定でうまく運用できていたが、細かい修正等で、わざわざ更新日を更新する必要がないことも多いことがわかった。

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

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

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

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