emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

add-hook versus custom-set-variables


From: Bill Wohler
Subject: add-hook versus custom-set-variables
Date: Wed, 28 Dec 2005 15:05:15 -0800

I set mh-folder-mode-hook to bw-mh-folder-mode-hook in my
custom-set-variables stanza.

When I start Emacs, I see that mh-folder-mode-hook is set to
mc-install-read-mode instead. I'd expect to see both
mc-install-read-mode and bw-mh-folder-mode-hook. This reminded me a lot
of the problems we had with the defvar of the hook in
define-derived-mode.

It appears that an add-hook call during the mailcrypt initialization is
binding mh-folder-mode-hook so that the custom-set-variables is losing.
I think Luc's explanation in
http://article.gmane.org/gmane.emacs.pretest.bugs/9993 is germane.

Since users will use the Customization interface to set hooks (at least
166 of them in my instance), I think it is important to figure out a
general resolution to this problem.

Two workarounds which aren't pretty are to insist that the user add a
defvar in .emacs for any hook he customizes or for system libraries to
delay the evaluation of add-hook until after the related
custom-set-variables and defcustom have been evaluated.

When I modified mailcrypt-init.el as follows:

    ;; MH-E hooks
    (eval-after-load 'mh-customize
      (progn
        (message "Adding mailcrypt hooks to MH-E...")
        (add-hook 'mh-folder-mode-hook 'mc-install-read-mode)
        (add-hook 'mh-letter-mode-hook 'mc-install-write-mode)))

I found that the eval-after-load form was evaluated during
initialization rather than after I loaded MH-E. From *Messages*:

    Loading 50mailcrypt (source)...
    Adding mailcrypt hooks to MH-E...

Any thoughts as to why this happened? No, mh-customize had not been
loaded yet.

For the Debian folks, I have the following code in my .emacs so that I
can use Debian Emacs Lisp packages while running CVS Emacs:

    (when (eq emacs-major-version 22)
      (add-to-list 'load-path "/usr/share/emacs/site-lisp")
      (load-library "debian-startup")
      (setq debian-emacs-flavor 'emacs-snapshot)
      (debian-startup 'emacs-snapshot))

-- 
Bill Wohler <address@hidden>  http://www.newt.com/wohler/  GnuPG ID:610BD9AD
Maintainer of comp.mail.mh FAQ and MH-E. Vote Libertarian!
If you're passed on the right, you're in the wrong lane.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]