1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-14 09:39:42 +00:00

Make `kill-all-local-variables' also remove lambda from hooks

* src/buffer.c (reset_buffer_local_variables): Also remove
non-symbol elements from hook variables (bug#46407).
This commit is contained in:
jakanakaevangeli 2021-07-20 16:31:24 +02:00 committed by Lars Ingebrigtsen
parent c175ad52fa
commit b4fabb316d
2 changed files with 14 additions and 6 deletions

View File

@ -2829,6 +2829,14 @@ This is to keep the same behavior as Eshell.
* Incompatible Lisp Changes in Emacs 28.1
---
** 'kill-all-local-variables' has changed how it handles non-symbol hooks.
The function is documented to eliminated all buffer-local bindings
except variables with a 'permanent-local' property, or hooks that
have elements with a 'permanent-local-hook' property. In addition, it
would also keep lambda expressions in hooks sometimes. The latter has
now been changed: The function will now also remove these.
---
** Some floating-point numbers are now handled differently by the Lisp reader.
In previous versions of Emacs, numbers with a trailing dot and an exponent

View File

@ -1084,12 +1084,12 @@ reset_buffer_local_variables (struct buffer *b, bool permanent_too)
for (newlist = Qnil; CONSP (list); list = XCDR (list))
{
Lisp_Object elt = XCAR (list);
/* Preserve element ELT if it's t,
if it is a function with a `permanent-local-hook' property,
or if it's not a symbol. */
if (! SYMBOLP (elt)
|| EQ (elt, Qt)
|| !NILP (Fget (elt, Qpermanent_local_hook)))
/* Preserve element ELT if it's t, or if it is a
function with a `permanent-local-hook'
property. */
if (EQ (elt, Qt)
|| (SYMBOLP (elt)
&& !NILP (Fget (elt, Qpermanent_local_hook))))
newlist = Fcons (elt, newlist);
}
newlist = Fnreverse (newlist);