[mew-dist 29317] mew の major-mode の無作 法?
Hayashi Masahiro (林 雅博) <[email protected]> Mon, 31 Jan 2011 22:27:30 +0900 (JST)
| Newsgroups | gmane.mail.mew.general.japanese |
|---|---|
| Message-ID | <[email protected]> |
林と申します。 mew の summary で define-global-minor-mode で定義した minor-mode が うまく動かないので調べてみると、mew では major-mode を設定する際に kill-all-local-variables を呼んでいないためのようです。 kill-all-local-variables の help には > Every function to select a new major mode starts by > calling this function. と書いてあるのですが、とりあえず summary バッファを作成したときは必ず 呼んだ方がいいのかもしれません。 また、これを調べている途中で気付いたのですが run-hooks の help によると > Major modes should not use this function directly to run their mode > hook; they should use `run-mode-hooks' instead. run-mode-hooks が定義してあるときはそちらを呼び出すようにした方がいい かもしれません。なお、この run-mode-hooks は GNU Emacs 22 で導入された ようです。 上記二点について考慮したパッチを添付しますので、よければご検討ください。 -- Hayashi Masahiro
mew.patch
(text/x-patch, 3.9 KB)
diff --git a/mew-addrbook.el b/mew-addrbook.el
index c654094..65024db 100644
--- a/mew-addrbook.el
+++ b/mew-addrbook.el
@@ -422,7 +422,7 @@ it will add an alias."
(setq mode-name mname)
(setq mode-line-buffer-identification (mew-mode-line-id))
(use-local-map mew-addrbook-mode-map)
- (run-hooks 'mew-addrbook-mode-hook)
+ (mew-run-mode-hooks 'mew-addrbook-mode-hook)
(setq buffer-undo-list nil))
(defun mew-addrbook-nconc (ent)
diff --git a/mew-draft.el b/mew-draft.el
index c5e8657..6cee36e 100644
--- a/mew-draft.el
+++ b/mew-draft.el
@@ -79,7 +79,7 @@
(mew-tinfo-set-privacy-type nil)
(mew-tinfo-set-use-flowed (mew-use-format-flowed (mew-tinfo-get-case)))
(mew-draft-mode-name) ;; must be after (mew-tinfo-set-encrypted-p encrypted)
- (run-hooks 'text-mode-hook 'mew-draft-mode-hook)
+ (mew-run-mode-hooks 'text-mode-hook 'mew-draft-mode-hook)
;; auto-fill-function is set by mew-draft-mode-hook
(when auto-fill-function
(make-local-variable 'auto-fill-function)
diff --git a/mew-edit.el b/mew-edit.el
index 88926a3..2730429 100644
--- a/mew-edit.el
+++ b/mew-edit.el
@@ -43,7 +43,7 @@ Execute mew-dinfo-set before calling this."
(mew-header-setup-decoration)
(mew-draft-mode-name 'header)
(force-mode-line-update)
- (run-hooks 'mew-header-mode-hook)
+ (mew-run-mode-hooks 'mew-header-mode-hook)
;; auto-fill-function is set by mew-header-mode-hook
(when auto-fill-function
(make-local-variable 'auto-fill-function)
diff --git a/mew-env.el b/mew-env.el
index 78d2af7..d639bb8 100644
--- a/mew-env.el
+++ b/mew-env.el
@@ -276,6 +276,12 @@ requires PTY.")
(defalias 'mew-create-image 'create-animated-image)
(defalias 'mew-create-image 'create-image))
+(if (fboundp 'run-mode-hooks)
+ (defun mew-run-mode-hooks (&rest funcs)
+ (apply 'run-mode-hooks funcs))
+ (defun mew-run-mode-hooks (&rest funcs)
+ (apply 'run-hooks funcs)))
+
(provide 'mew-env)
;;; Copyright Notice:
diff --git a/mew-message.el b/mew-message.el
index 0b0a229..ed00464 100644
--- a/mew-message.el
+++ b/mew-message.el
@@ -35,7 +35,7 @@
(setq page-delimiter mew-page-delimiter)
(mew-message-setup-decoration)
(mew-message-toolbar-update)
- (run-hooks 'mew-message-mode-hook))
+ (mew-run-mode-hooks 'mew-message-mode-hook))
(defun mew-message-mode-line (fld message)
(let* ((msg (or message
diff --git a/mew-summary.el b/mew-summary.el
index 221fda7..7d8b4d6 100644
--- a/mew-summary.el
+++ b/mew-summary.el
@@ -360,7 +360,7 @@ and return (beg . end)."
(mew-summary-setup-mode-line)
(mew-summary-setup-decoration)
(mew-highlight-cursor-line)
- (run-hooks 'mew-summary-mode-hook))
+ (mew-run-mode-hooks 'mew-summary-mode-hook))
(defun mew-summary-kill ()
"Kill this Summary mode."
diff --git a/mew-summary4.el b/mew-summary4.el
index b8361b3..3925f1d 100644
--- a/mew-summary4.el
+++ b/mew-summary4.el
@@ -30,6 +30,7 @@
nil) ;; existing folder
(t
(funcall (or func 'switch-to-buffer) (get-buffer-create case:folder))
+ (kill-all-local-variables)
(mew-set-buffer-cs mew-cs-m17n)
(mew-buffers-setup case:folder)
(let* ((case (mew-case:folder-case case:folder))
diff --git a/mew-virtual.el b/mew-virtual.el
index afdc406..ac5b942 100644
--- a/mew-virtual.el
+++ b/mew-virtual.el
@@ -47,7 +47,7 @@
(mew-summary-setup-mode-line)
(mew-summary-setup-decoration)
(mew-highlight-cursor-line)
- (run-hooks 'mew-virtual-mode-hook))
+ (mew-run-mode-hooks 'mew-virtual-mode-hook))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
diff --git a/mew.el b/mew.el
index 19cae92..888dcde 100644
--- a/mew.el
+++ b/mew.el
@@ -390,6 +390,7 @@ the lower window is not zero, switch to the buffer."
(if (get-buffer msgbuf)
(delete-windows-on msgbuf)
(with-current-buffer (get-buffer-create msgbuf)
+ (kill-all-local-variables)
;; "truncate?" is asked in Message mode.
;; so set the same toolbar as Summary mode
(mew-summary-toolbar-update)