久々に Emacs のお話。多分、Emacsだけの仕様だとおもうんだけど、ファイルを開くときに「Local Variables:」と書かれた行から「End:」と書かれた行までの間に、そのファイルを編集するのに適切なメジャーモード (mode) や 文字コードセット (coding)の設定ができる。ちなみにそのときには、Perlのスクリプトを UTF-8 で書いており、そのファイルを開くときの文字コードセットを utf-8 にするため、以下のように書いてみた。
Local Variables: coding: utf-8-unix End:
これでうまくいくかなぁなんて思っていたんだけど、結果としてはダメ。なぜか coding の部分だけは mode の設定のときと Parse のしかたが違う。以下に lisp/international/mule.el の中にある coding: を Parse する部分のソースを抜粋してみた。
;; If no coding: tag in the head, check the tail.
(when (and tail-found (not coding-system))
(goto-char tail-start)
(search-forward "\n\^L" nil t)
(if (re-search-forward
"^\\(.*\\)[ \t]*Local Variables:[ \t]*\\(.*\\)$" tail-end t)
.... 以下 略 ....
引用が中途半端なのはお許しいただきたい。この部分を解釈すると、カーソルを後ろのほう (tail-start) に移動させて、^L (0x0c)だけの行を前方検索してそこにカーソル移動させて、Local Variablesの部分を検索するようになっている。そう、原因は "^L" が足りなかっただけだった。なんか仕様がバラバラっていう感じでアレですね。(笑)