[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: w3m-display-hook
の破綻
>>>>> In [emacs-w3m : No.03850] 白井秀行さん wrote:
白井さん> うーーん、add-hook がそういう仕様だということはわかるのです
白井さん> が、運用上は、ほとんどの場合はなにも考えないで ~/.emacs で
白井さん> add-hookしてもいいものだと思うのです。
うーーん。^^;;
話が堂々めぐりになりそうですが、それを保証できるのはユーザオプショ
ンである hook にシステムが使う有意の値を持たない場合だけですよね。
しかし現実にはシステムがそういう使い方をしている例は多いし、それ
らの場合に .emacs で add-hook してはいけない例も見られます。
;; Gnus は .gnus を load するときに message.elc が load 済みです
;; が、そのときはまだ load されない gnus-sum.elc には non-nil な
;; デフォルト値を持つユーザオプションの hook がいくつかあります。
白井さん> また、eval-after-load や defadvice は『それしか手段が無いと
白井さん> きの逃げ道』だと思うので、積極的にそれを推奨するのはさけたほ
白井さん> うが良いと思います。
eval-after-load の利用を相手を選ばずに勧めるには、かなり注意しな
いといけないことを思い出しました。
(setq xxx 0)
(eval-after-load "w3m-xmas" '(setq xxx (1+ xxx)))
(progn (load "w3m-xmas") xxx)
=>1
(progn (load "w3m-xmas.elc") xxx)
=>1
(progn (load "/usr/local/lib/xemacs/packages/lisp/w3m/w3m-xmas.elc") xxx)
=>1
えーと、すなわち `load' に渡る名前は `eval-after-load' を使った
ときと string-equal な "w3m-xmas" である必要があります。
それから、詳細は長くなるので自作のパッチの所在だけ書きますが、
ftp://ftp.jpl.org/xemacs/packages/efs-1.29-pkg-after-load.patch.gz
XEmacs の efs にはそれを load しただけで `eval-after-load' の設
定が無視されてしまうという致命的なバグがあります。ange-ftp は問
題無いようですが。
白井さん> (add-hook 'w3m-init-hook
白井さん> (lambda ()
白井さん> (add-hook 'w3m-hoge-hook 'foo)))
白井さん> だったらまだ良いと感じるのですが。。。
昔はいろんな xxx.el ファイルの最後に書かれていた xxx-load-hook
が、`eval-after-load' があるからという理由でどんどん消されました
よねえ。ぼくもそういう xxx-load-hook の利は認めます。一つ例を出
すと、
(add-hook 'foo-hook (lambda (arg) (...)))
と書かれた .el ファイルを byte-compile すると lambda 式も
compile されますが、普通の `eval-after-load' に単に Lisp フォー
ムを与えただけではそういう効果は得られません。
;; で山岡氏はどうしたら良いと言いたいのか....はて? ^^;;
--
Katsumi Yamaoka <yamaoka@jpl.org>