From b8de8143d74777f25c9ec6f867c040332de810c4 Mon Sep 17 00:00:00 2001 From: John Shahid Date: Sat, 23 Jun 2018 11:12:44 -0400 Subject: [PATCH] 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 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index b83b53a8e5..6bf657848c 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -474,7 +474,12 @@ define-globalized-minor-mode ;; The function that calls TURN-ON in each buffer. (defun ,MODE-enable-in-buffers () - (dolist (buf ,MODE-buffers) + (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 @@ -484,12 +489,11 @@ define-globalized-minor-mode (,mode -1) (funcall #',turn-on)) (funcall #',turn-on)))) - (setq ,MODE-major-mode major-mode))))) + (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) -- 2.18.0