Category Archives: 未分類

2009-02-19

雨天

今日は午前中雨だったのでバス出勤にした。すっかりひ弱になってしまって……。

それにしても今週は寒い日が続きますね。

2009-02-18

compile.elとMakefile

M-x compileでmakeを走らせることが出来るけど、編集しているファイルがあるディレクトリにMakefileがあるとは限らないんだよね。たいてい、いくつか上のディレクトリにMakefileがある。compileコマンド実行時に、親ディレクトリ方向へMakefileを探して、見つかったディレクトリでmakeを実行して欲しい。どうすればいいんだろう。今まではcd .. && $(MAKE)するようなMakefileを置いてごまかしていたんだけど、さすがに馬鹿らしくなってきた。

compile.elを見ると、default-directoryを見ているんだな。compilation-modeへ移行するのは、そのあとか。うーむ……。

2009-02-18

Emacs/Makefileを親ディレクトリ方向へ探してcompile

というわけで、リファレンスなどを見ながら書いてみた。

;;; 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で束縛しておけばいいのかなと思った。