.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ファイルに切り出したらできるのかも。今度やってみよう。