emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs-26 35e0305: Avoid turning on the global-minor-mode r


From: Noam Postavsky
Subject: [Emacs-diffs] emacs-26 35e0305: Avoid turning on the global-minor-mode recursively
Date: Tue, 10 Jul 2018 08:17:16 -0400 (EDT)

branch: emacs-26
commit 35e0305dc2a57cea6fcb515db9e0b0f938daf53a
Author: John Shahid <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Avoid turning on the global-minor-mode recursively
    
    * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Clear
    the buffer-list inside MODE-enable-in-buffers to avoid enabling the
    mode recursively.  (Bug#31793)
---
 lisp/emacs-lisp/easy-mmode.el | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 21ca693..443e03e 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -457,22 +457,26 @@ See `%s' for more information on %s."
 
        ;; The function that calls TURN-ON in each buffer.
        (defun ,MODE-enable-in-buffers ()
-        (dolist (buf ,MODE-buffers)
-          (when (buffer-live-p buf)
-            (with-current-buffer buf
-               (unless ,MODE-set-explicitly
-                (unless (eq ,MODE-major-mode major-mode)
-                  (if ,mode
-                      (progn
-                        (,mode -1)
-                        (funcall #',turn-on))
-                    (funcall #',turn-on))))
-              (setq ,MODE-major-mode major-mode)))))
+         (let ((buffers ,MODE-buffers))
+           ;; Clear MODE-buffers to avoid scanning the same list of
+           ;; buffers in recursive calls to MODE-enable-in-buffers.
+           ;; Otherwise it could lead to infinite recursion.
+           (setq ,MODE-buffers nil)
+           (dolist (buf buffers)
+             (when (buffer-live-p buf)
+               (with-current-buffer buf
+                 (unless ,MODE-set-explicitly
+                   (unless (eq ,MODE-major-mode major-mode)
+                     (if ,mode
+                         (progn
+                           (,mode -1)
+                           (funcall #',turn-on))
+                       (funcall #',turn-on))))
+                 (setq ,MODE-major-mode major-mode))))))
        (put ',MODE-enable-in-buffers 'definition-name ',global-mode)
 
        (defun ,MODE-check-buffers ()
         (,MODE-enable-in-buffers)
-        (setq ,MODE-buffers nil)
         (remove-hook 'post-command-hook ',MODE-check-buffers))
        (put ',MODE-check-buffers 'definition-name ',global-mode)
 



reply via email to

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