emacs-diffs
[Top][All Lists]
Advanced

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

master 5c266a7 2/3: unload-feature: Handle local hooks (bug#5293)


From: Št?pán N?mec
Subject: master 5c266a7 2/3: unload-feature: Handle local hooks (bug#5293)
Date: Wed, 21 Oct 2020 12:51:06 -0400 (EDT)

branch: master
commit 5c266a71c160ed823e9ef69d2ff44fb0bb81ff77
Author: Štěpán Němec <stepnem@gmail.com>
Commit: Štěpán Němec <stepnem@gmail.com>

    unload-feature: Handle local hooks (bug#5293)
    
    Buffer-local hooks were introduced in
    
    1994-09-30T20:47:13+00:00!rms@gnu.org
    0e4d378b32 (add-hook): Initialize default value and local value.
    
    but 'unload-feature' has not been updated to handle them.
    
    * lisp/loadhist.el (unload-feature): Handle local hooks (bug#5293).
---
 etc/NEWS         | 3 +++
 lisp/loadhist.el | 9 +++++++++
 2 files changed, 12 insertions(+)

diff --git a/etc/NEWS b/etc/NEWS
index f3e3d9a..2aed575 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1748,6 +1748,9 @@ to lexical binding, where dynamic (special) variables 
bound in one
 file can affect code in another.  For details, see the manual section
 '(Elisp) Converting to Lexical Binding'.
 
+---
+** 'unload-feature' now also tries to undo additions to buffer-local hooks.
+
 
 * Changes in Emacs 28.1 on Non-Free Operating Systems
 
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index 60da00c..8157667 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -300,6 +300,15 @@ something strange, such as redefining an Emacs function."
                            (memq x unload-feature-special-hooks)))
               (dolist (func removables)
                 (remove-hook x func)))))
+          (save-current-buffer
+            (dolist (buffer (buffer-list))
+              (pcase-dolist (`(,sym . ,val) (buffer-local-variables buffer))
+                (when (or (and (consp val)
+                               (string-match "-hooks?\\'" (symbol-name sym)))
+                          (memq sym unload-feature-special-hooks))
+                  (set-buffer buffer)
+                  (dolist (func removables)
+                    (remove-hook sym func t))))))
           ;; Remove any feature-symbols from auto-mode-alist as well.
           (dolist (func removables)
             (setq auto-mode-alist



reply via email to

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