ファイルの保存時に、なにがしかの関数を実行する。
今回は、my-update-timestamp という関数を実行する。
init.el に以下の記述を加える。
init.el
;;; my-update-timestamp.el
;;; 修正時刻をファイルの末尾に追加・更新するスクリプト
;;;
(load "my-update-timestamp")
(add-hook 'write-file-hooks 'my-update-timestamp) ; <== <1>
<1> — ”write-file-hooks” が、ファイルの保存時に使える変数。
この変数に関数のリストをわたすとよい。
今回は、わたしたい関数はひとつなので、シンボルでわたす。
ただ、nil が返ってくるようにしないと、実際の保存は実行されない。
my-update-timestamp.el
(defun my-update-timestamp ()
(interactive)
(if (my-search-stamp)
(progn
(delete-char 24)
(my-insert-current-time)
(message "修正時刻を更新しました"))
(goto-char (point-max))
(insert (concat "\n修正時刻: " (current-time-string) "\n"))
(message "修正時刻がなかったので、作りました"))
nil) ; <== nil を返すようにした
これで、うまくいく。
参考
ファイルの書き出しを別の仕方に変えたり,書き出す前に別のことを行なうこ とができます.これにはフック変数write-file-hooksを使います.この 変数の値は関数のリストでなくてはなりません.あるファイルが書き出されよう とするときに,このリストの関数が順に引数なしで実行されます.そのうちの1 つがnon-nilの値を返したなら,Emacsはそれをファイルはふさわしい方 法で書き出されたと解釈して,残りの関数の実行をやめます.また,標準の書き 出しも行ないません.
http://flex.phys.tohoku.ac.jp/texi/emacs-jp/emacs-jp_69.html