.emacsファイルは起動時に全部実行されるみたい

再びTBありがとうございます。

M-: でEvalが使える

バッファローカル変数 - ’(rubikitch wanna be (a . lisper))

「M-: buffer-file-name」とタイプしてみるとソースコードのファイル名がフルパスで出てくるはず。

Evalで呼ぶと、見事に出てきました。てっきり関数だと思っていて、「M-x buffer-file-name[no match]」の表示にうなっていました・・・

おさらい

さて、バッファローカル変数について。buffer-file-nameの名称からなんとなく察しはついていたのですが・・・よくわからなかったのが.emacsファイル内で記述した場合に反映されるタイミング。

まず、やってたこと。
Emacs Lispをかじってみる - うっかりプログラミング日誌

(setq-default compile-command 
              (concat "csc "
                      (buffer-name (current-buffer))))

以上の内容は.emacsファイルに記述していました。
C#のソースファイル上で「M-x compile」実行した結果として「csc *scrach*」が表示された。
(後ほどbuffer-name (current-buffer)→buffer-file-nameに修正)

勘違い

C#のソースファイル上でcompileコマンドを実行したのに、なぜcurrent-bufferが「*scrach*」なんだろう?」
出力結果から推察するに、Emacs起動時に.emacsファイルが読み込まれ、その内容が全て実行される。bそのため、起動時のcurrent-bufferである「*scrach*」が入っていた。

compileが呼ばれる時に変数が評価されるのかな?なんて思ってたのが、今回の間違いの原因ですね・・・*1


今回の教訓:.emacsファイルは起動時に全て実行される!

Emacs初心者な自分に色々教えてくださったid:rubikitch さん、
ありがとうございました<(_ _)>

*1:elファイルに切り出したらできるのかも。今度やってみよう。