enparam.l
ファイルの頭に書いてある
# -*- spam: hoge -*-
みたいなのをバッファローカルな変数に入れてくれるものらしい、というので使ってみた。
サンプルをコピペして開くと「不正なデータ型です: #
んで files.l を見てみたり *auto-mode-parameter-alist* を触ってみたりしたら、どうやら *auto-mode-parameter-alist* に ("hoge" . fuga) がいくつかあって、ファイルの頭に -*- hoge: foobar -*- と書いてあると (funcall fuga "foobar") されるようだ。
んで、その後 (get fuga 'find-file-auto-mode) とかしてるのだが、シンボルじゃなくて関数だから怒られるっぽい。
んな訳で gensym して関数突っ込んでみた
;;-*- Mode: Lisp; Package: EDITOR -*- (provide "enparam") (in-package "editor") ;順番が違う、と 2ch にあった (export '(enparam)) (defun enparam (param &key (default "") (val)) (unless val (setq val param)) (make-variable-buffer-local val) (set-default val default) (delete (symbol-name param) *auto-mode-parameter-alist* :key #'car :test #'string=) ;(push (cons (symbol-name param) #'(lambda (string) (set val string))) (push (cons (symbol-name param) (setf (symbol-function (gensym)) #'(lambda (string) (set val string)))) *auto-mode-parameter-alist*))
で動いたっぽい。
のだが、単に -*- hoge: fuga -*- としても変数が初期値になってしまう。たぶんモードを設定しないで enparam で変数に入れても (kill-all-local-variable) で消えてる。んーむ。大人しく mode: も入れておくか。