[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: w3m-display-hook
の破綻
From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp> さん曰く
Subject: [emacs-w3m:03833] Re: w3m-display-hook の破綻
Message-ID: <20020828213827N.1000@pine.kuee.kyoto-u.ac.jp>
Date: Wed, 28 Aug 2002 21:38:27 +0900
白井> なんか Emacs 21 で w3m-display-hook が変だなぁと思って調べたので
白井> (defcustom w3m-display-hook nil
白井> (add-hook 'w3m-display-hook 'w3m-history-highlight-current-url)
白井> (add-hook 'w3m-display-hook 'w3m-move-point-for-localcgi)
白井> (add-hook 'w3m-display-hook 'w3m-select-buffer-update)
白井> にしちゃって良いですか?それとも、他に良い方法はあるでしょうか?
土> これなんですけど,
土> (1) M-x customize-variable RET w3m-display-hook RET で,どれかの処理を
土> 取り除くように設定しても有効にならない
土> (2) 実際のデフォルト値が分かり難い
土> ので,もっと泥臭い方法に修正しました.
## あぁぁ、これじゃダメなんですってば。
(setq hoge 1)
(defvar hoge 2 "hoge だよ")
hoge => 1
と同じことが add-hook と defcustom にも当てはまる(らしい)ので、
(1) (add-hook 'hoge-hook 'forward-char)
(2) hoge-hook => (forward-char)
(3) (defcustom hoge-hook
(nconc '(backward-char delete-char))
"*Hook だよ"
:group 'w3m
:type 'hook)
(4) hoge-hook => (forward-char)
となるのです。そのため、~/.emacs で独自に add-hook していると
defcustom で設定されるべき初期値が無効になります。
例えば、ぼくの w3m-display-hook は ~/.emacs で add-hook している
ので、
w3m-display-hook
=> (w3m-ftp-delegate-remove (lambda (url) (when (fboundp (quote lsdb-hide-buffer)) (lsdb-hide-buffer))) w3m-frame-view)
となっています。
(中身は気にしないでね ^^;)
だけど、hook の設定で必ず customize-variable を使う人には土屋
さんの変更後の方法がわかりやすくて良いのですが。。。
# けど、いちいち customize-variable 使うのはイヤだ :-<
## ついでに w3m-mode-hook もだめになってしまった。
......
で、提案なのですが、ぼくの考えた限りでは上記の二通りの人を満足さ
せるのは無理だと思うので、現状 w3m-*-hook の初期値をソース内で設
定しているものは、w3m-*-functions にして、すべての w3m-*-hook の
初期値は nil にするのはどうでしょうか? 必要だから初期値を設定し
ているわけですし。
例えば、
(defcustom w3m-mode-hook nil
"*Hook run before `w3m-mode' called." <= after の様な気がする。
:group 'w3m
:type 'hook)
(defcustom w3m-mode-funcitions
(when (featurep 'w3m-e21)
'(w3m-setup-header-line
w3m-setup-widget-faces
w3m-update-tab-line))
"*Functions run before `w3m-mode' called."
:group 'w3m
:type '(repeat function))
(defun w3m-mode (..)
...
(w3m-call-functions 'w3m-mode-funcitions)
(run-hooks 'w3m-mode-hook)
...)
(defun w3m-call-functions (funcs &rest args)
(dolist (func funcs)
(funcall func args)))
みたいに。(冗長?)
--
白井秀行@動作はまったく確認していませんけど。