Shammer's Philosophy

My private adversaria

init.el 自動コンパイル

auto-async-byte-compile の設定をしたから、もう init.el がコンパイルされずに設定が反映されない、という事態は起きないだろう、と思っていたが、init.el を書き換えても設定が反映されないようだ、という状況に遭遇。いろいろ調べた結果、elc ファイルが el ファイルより古い、という状態となっていたので、elc ファイルを削除したら設定が反映された。
なんかよくわからないが、auto-async-byte-compile が動いていない可能性がある、と思ったが、その通りだったと言える。

どうにかそういうことないようにしたい、と思って調べたら、EmacsWiki にも話題があった。

 EmacsWiki: Auto Recompile

このサイトの真ん中あたりの実装を init.el へ追加。

(when (and user-init-file
	   (equal (file-name-extension user-init-file) "elc"))
  (let* ((source (file-name-sans-extension user-init-file))
	 (alt (concat source ".el")))
    (setq source (cond ((file-exists-p alt) alt)
		       ((file-exists-p source) source)
		       (t nil)))
    (when source
      (when (file-newer-than-file-p source user-init-file)
	(byte-compile-file source)
	(load-file source)
	(eval-buffer nil nil)
        (delete-other-windows)))))

これでしばらく様子をみるか。