Emacsのauto-insertが急に動かなくなった問題を解決

S 20240131 224628

Emacsには「auto-insert」と呼ばれる仕組みがあり、特定のファイルを新規に作成した際、自動的にテンプレートを挿入することができます。

例えば*.htmlやREADME.mdなど、決まり切った内容を毎回埋める必要があるファイルの場合、その準備が一瞬ですむので大変便利です。

しかし昨日、なぜかこの機能が動作しなくなっている事に気がつきました。MacPortsでインストールした「GNU Emacs 29.1」で発生し、一つのMacではなく複数のMacで同じように急に動かなくなっていたのです。

hookの設定が変わった?

エラーメッセージも特に表示されないため、解決の糸口が見つからなかったのですが、根気よく調べいていたところ次のような情報を発見しました。

add-hookしているfind-file-not-found-hooksfind-file-hookに変更すれば良いという情報です。記事が書かれた日付が2013年11月10日ということもあり、今回の問題が修正できるとも思えませんでしたが、ダメ元試しに変更してみたところ、再び動作するようになりました。

修正後の設定です:

(require 'autoinsert)
(setq auto-insert-directory "~/uconf/emacs/templates")
(setq auto-insert-alist
      (nconc '(("\\.html$" . "template.html")
               ("\\.js$" . "template.js")
               ("README\\.md$" . "README.md")
               ) auto-insert-alist))
(add-hook 'find-file-hooks 'auto-insert)

2024年の今、何故この問題が手元の環境で発生したのか不明ですが、とりあえず解決することはできました。