Subject: bug#34686: 26.1; unload-feature doesn't remove functions locally from hooks

From: Robert Pluim <[email-masked]>
Date: Thu, 28 Feb 2019 20:38:11 +0100

(please donʼt drop the bug address from the CC)

Braun Gábor <[email-masked]> writes:

> Hi,
>
>> > Standard unloading activities include restoring old autoloads for
>> > functions defined by the library, undoing any additions that the
>> > library has made to hook variables or to ‘auto-mode-alist’[...]
>
> Obviously, this part of the docstring of unload-feature contradicts
> the info manual.
>  
>> In "(elisp) Unloading" it says:
>> 
>>      Before restoring the previous definitions, ‘unload-feature’ runs
>>      ‘remove-hook’ to remove functions in the library from certain
>>      hooks.  These hooks include variables whose names end in ‘-hook’
>>      (or the deprecated suffix ‘-hooks’), plus those listed in
>>      ‘unload-feature-special-hooks’, as well as ‘auto-mode-alist’.  This
>>      is to prevent Emacs from ceasing to function because important
>>      hooks refer to functions that are no longer defined.
>> 
>> and a quick look at the code confirms that it at least *tries* to do
>> that.
>
> And as far as I understand the code, it does remove functions from the 
> global value of the hooks, but not from the buffer-local values.
>
> IMHO, the stated reason in the info manual (keep Emacs functioning) 
> justifies removing functions from the hooks (both their global and local 
> values) which become undefined.

Yes, Iʼd tend to agree. Would you have a patch to offer?

Thanks

Robert