emacs-devel
[Top][All Lists]
Advanced

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

Re: question about "Making change-major-mode-hook buffer-local while loc


From: Stefan Monnier
Subject: Re: question about "Making change-major-mode-hook buffer-local while locally let-bound!"
Date: Tue, 22 Jun 2010 02:28:56 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

> (let ((emacs-lisp-mode-hook    nil)
>       (change-major-mode-hook  nil))
>   (emacs-lisp-mode))
[...]
> What is the right way to prevent these hooks from running here?

E.g.:

 (make-local-variable 'emacs-lisp-mode-hook)
 (make-local-variable 'change-major-mode-hook)
 (let ((emacs-lisp-mode-hook    nil)
       (change-major-mode-hook  nil))
   (emacs-lisp-mode))

> Do I need to use remove-hook followed by add-hook: saving, emptying and
> repopulating the hook? What's the right approach?

Those hooks are not permanent-local, so they'll be emptied and
repopulated as needed by the call to emacs-lisp-mode.
So you could probably just do:

 (set (make-local-variable 'emacs-lisp-mode-hook) nil)
 (set (make-local-variable 'change-major-mode-hook) nil)
 (emacs-lisp-mode)

Or use `remove-hook' to eliminate only the particular values which are
undesired rather than removing them all.

> Why bother?  What is gained by having such a runtime message?

This messages is linked to a problematic circumstance where Emacs tries
to do its best, but where the code should ideally be changed to avoid
such a circumstance.  So it's important to detect and warn about those
cases, and sadly, I don't know how to do it at a better time.


        Stefan



reply via email to

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