ksの方は一応予定日なので、準備の方はしておいた。今後は使える状態を維持しつつ、少しずつ変えていく。
ksの方は一応予定日なので、準備の方はしておいた。今後は使える状態を維持しつつ、少しずつ変えていく。
rayfill氏よりM-x recompileで前回compileしたときのディレクトリでmakeしてくれるよー、とツッコミをいただきました。ありがとうございます。
手元で確認したところ、Meadow2ではダメでしたが、Meadow3ではちゃんとcompileしたときのディレクトリでmakeしてくれました。compile-commandは元のディレクトリからじゃないと意味がないんだから、普通復元するだろJKって感じですよね。こりゃ、他のマシンもMeadow3へ移行すべきかな。compile.elだけなんとかするって手もあるけど、他にも色々あるしね。
というわけで、リファレンスなどを見ながら書いてみた。
;;; dirから親ディレクトリ方向へ向かってfilenameを探し、最初に見つけたディレクトリ名を返す。見つからなかったらnilを返す。 (defun search-file-for-updir(dir filename) (cond ((file-exists-p (expand-file-name filename dir)) dir) ((equal (expand-file-name "/") dir) nil) (t (search-file-for-updir (file-name-directory (directory-file-name dir)) filename)))) ;;; Makefileがあるディレクトリ上でcompileする。 (defun compile-on-makefile-dir() (interactive) (let ((dir (search-file-for-updir default-directory "Makefile"))) (if dir (let ((default-directory dir)) (command-execute 'compile)) (message "Makefile is not found."))))
なんかものすごーく久しぶりにEmacs Lispを書いた。
search-file-for-updirの未発見終了判定は、(file-name-directory (directory-file-name dir))がdirと同じ物を返したら終了とするのでもいいかどうか迷った。
default-directoryをcdで変えたら、戻せなくなって困るなぁと思ったのだけど、elispは動的スコープだから適当にletで束縛しておけばいいのかなと思った。