2009年9月5日土曜日

Emacsでlispファイルを開くときのこと

EmacsでLispファイルを開くときに妙な確認がでる。それを調べてみる。

まず、出るものはこれ。

The local variables list in paip-study.lisp
contains values that may not be safe (*).

Do you want to apply it? You can type
y -- to apply the local variables list.
n -- to ignore the local variables list.
! -- to apply the local variables list, and
permanently mark these
values (*) as safe (in the future, they will
be set automatically.)

* Syntax : Common-Lisp

これは該当Lispファイルの一行目に、

-*- Mode: Lisp; Syntax: Common-Lisp -*-

を書いているからだろう。この行のことを「mode line」と言うのかと思っていたら、正確には「mode specification」なんですね。「mode line」はmini bufferの上にあるやつのこと。Redshankもこれをmode lineと読んでいるから、結構用語が混乱しているのかも。

mode specification を info で調べて整理しよう。形式は、

-*- mode: MODENAME; VAR: VALUE; ... -*-

であり、VAR VALUEの組は、File Variablesと呼ぶものだ。これはこのファイルが読み込まれる際に自動的に解釈されてそのbufferのローカル変数となる。

さて、info の Emacs に 57.3.4.2 Safety of File Variables としてまさに疑問に答える節があった。これによると、

  • Emacsは、variable/value pairs について、safe なもの risky なもの、というようにグループ分けしている。
  • それによって、上記の確認画面が出たり出なかったりと制御している。
  • その制御は、enable-local-variables enable-local-eval と safe-local-eval-forms によってカスタマイズできる。

というわけで、内容を確認した上で、"y"を入力すればいいだけですね。

こつこつ。

0 件のコメント: