help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: does customizing a hook "add-to" the hook?


From: Michael Heerdegen
Subject: Re: does customizing a hook "add-to" the hook?
Date: Tue, 16 Jul 2013 00:49:16 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

gottlieb@nyu.edu writes:

> > All relevant hooks I know are empty when declared in the sources.  So if
> > you load your `custom-file' early enough when starting up Emacs (i.e.,
> > before modifying hooks or loading packages), you don't need to worry
> > about your or third party code adding stuff to the hook, that works
> > normally.
>
> Thank you for the response.
> That was exactly my concern.  Namely that I (in this order)
>
> 1.  set a hook via customize
> 2.  upgrade emacs
> 3.  run the new emacs (with my same startup files)
>
> and then some new default would be overridden since my customization
> overwrites the hook instead of adding to it.
>
> Is it guaranteed or suggested that hook are by default empty?

No, it's not a convention AFAICT.  And there are examples in the sources
where this is not the case, although they are a minority.

There are probably also cases where a user indeed wants to replace an
element of a hook variable with another one or "delete" elements, so it
makes some sense that hooks are not always declared empty.

You have to be a bit careful.  There is no absolute guarantee
that your customization will work in future Emacsen.  If you want a more
finegrained control, use Lisp.  But also what you do in Lisp can be
wrong in future Emacsen.

I agree that there is a bit a disparity between the manual
((emacs) Hooks):

|    You can set a hook variable with ‘setq’ like any other Lisp
| variable, but the recommended way to add a function to a hook (either
| normal or abnormal) is to use ‘add-hook’, as shown by the following
| examples.  *Note (elisp)Hooks::, for details.

and how Customize works (setting the hook variable instead of adding).


Regards,

Michael.




reply via email to

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