auto-save-buffers のマイナーモード版とか

defcustom 使うようにした。

https://gist.github.com/3047249

クロージャを使ったのは write-region-function の隠蔽のためだったけど Emacs Lisp っぽくないような気がしたのでやめた。

あと、関数を定義するのではなくて変数に関数オブジェクトを格納するようにした方が少しだけコードがきれいになったのでそうした。

  • メッセージを表示させない部分は http://homepage3.nifty.com/oatu/emacs/misc.html#asb を advice に変更しただけ
    • オリジナルとの差分を分かりやすいようにしたかった
    • 今となっては advice をやめて (eval-when-compile (require 'cl)) を削除したいかも
  • マイナーモード
    • auto-save-mode、blink-cursor-mode、recentf-mode を参考に
  • カスタマイズ対応

バグ

なんかときどき auto-save されないときがあるような。。。 →.el ファイルは OK。auto-save されない .elc ファイルが生成されるときがある。

  • OK
    • .el ファイル
    • Emacs 起動時に (byte-recompile-directory dir 0) でコンパイルした場合
  • NG
    • -batch -Q -f batch-byte-compile でコンパイルした場合
    • M-x dired-do-byte-compile した場合

どの場合もマイナーモード有効時のすべての変数の状態は同じなのに NG の場合は auto-save されない。生成されるバイトコードが違う。たとえば OK の場合は

(custom-declare-variable 'auto-save-buffers-regexp '""
                         '(#$ . 593) :type 'regexp :group 'auto-save-buffers)

だけど NG の場合は

(custom-declare-variable 'auto-save-buffers-regexp '""
                         '(#$ . 614) :type 'regexp :group 'auto-save-buffers)

というふうに。

とりあえず advice をやめたらどの場合も OK になったのでそうした。diff の意味がなくなりつつある。。。