Emacs で開いたファイルのメジャーモードを自動指定するのによく
(add-to-list 'auto-mode-alist '("\\.yaml$" . yaml-mode))
などと正規表現を書くが, Rakefile みたいにファイル名に完全一致させるにはどうするのか.
ググると幾つか例が見付かる.
"Rakefile$" ;; ふむふむ "Rakefile" ;; えっ, 末尾は!? "[Rr]akefile$" ;; 凝ってみた "[Rr]akefile" ;; えっ, 末尾は!?
ファイル名末尾に正しくマッチさせようとする例は見られるがファイル名先頭に気を遣っているものに遭遇しない. このままだと _Rakefile 等にもマッチしてしまうのではないか (したし).
では先頭に正しくマッチさせるにはどうするか. 末尾が "$" だから "^" でいけるのだろうか. しかし試してみたらダメだった. ファイル名ではなく絶対パス名が与えられているのだろうか. だとすれば "/[Rr]akefile$" でいけるはず. いけた. (Carbon Emacs 22.3.1)
そもそも auto-mode-alist に記述した正規表現にはどのような文字列が与えられることになっているのだろうか.
マニュアル
には file name としか書かれておらず, Emacs が何を以って file name としているのか分からないが, ソース (lisp/files.el) を見るに buffer-file-name を参照しているようなので, やはり絶対パス名とパターンマッチしているという理解で良さそうだ. このプロジェクト (パス) の場合だけ .tpl を HTML として扱う
等の設定もできそう (普通は hook でやるのかな).
しかしこの手の探求は 90% の解を目指す
Unix 哲学からすると自己満足の類と斬り捨てられてしまいそうな気もするし, 実際 [Rr]akefile$ と書いておけば通常の利用で問題になることはまずないが, スラッシュ一つで残りの 10% が埋まるのなら無駄でもないように思える (過程と結果の話を混同して正当化している例).



