2013-04-13

Emacs でファイルごとに .el ファイルを読み込ませる

.emacs には書くほどではないけれども、あるファイルを開いた時にだけ読み込んで欲しい elisp がある場合の対処法。

Emacs の Local Variables 形式を使う。

詳しくは Emacs の info で Local Variables を読んでもらうとして、簡単にやり方を書いておく。

Local Variables and eval

Local Variables にはファイルの先頭に置く方法と末尾に置く方法の二種がある。ここでは後者を使う。

ファイルの末尾に行き、そのファイルのコメントを使いながら次のコードを書く。

Local Variables:
eval: (load "/path/to/foo.el")
End:

例えば Emacs-Lisp のコードなら、こう書く。

;; Local Variables:
;; eval: (load "/path/to/foo.el")
;; End:

C++ なら、こう:

// Local Variables:
// eval: (load "/path/to/foo.el")
// End:

HTML なら、こう:

<!-- Local Variables: -->
<!-- eval: (load "/path/to/foo.el") -->
<!-- End: -->

少し工夫して

ぼくはブログの原稿を blog.xml というファイルに書いて、それを Blogger の投稿エディターにコピペしている。理由は、使い慣れたエディターで文章を書くのが一番楽だから。メジャー・モードには nxml-mode を使っているけれども、Blog 専用の関数をいくつか blog.el というファイルに入れている。

blog.xml を開いた時に、自動的に blog.el (同じディレクトリーにある) をロードするようにしたい。

ぼくは以下のコードを blog.xml の末尾に置いている。

<!-- Local Variables: -->
<!-- eval: (load (expand-file-name "blog.el" ".")) -->
<!-- End: -->

あとがき

このやり方だと、ファイルとそのファイル専用の elisp ファイルをセットで配布できるメリットがある。git でファイルを管理する場合も、ファイルと elisp が別々に別れないので便利。また、ファイルを開くたびにロードする手間を省けるので効率も上がる。

No comments:

Post a Comment