aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Shahid2018-06-23 11:12:44 -0400
committerNoam Postavsky2018-07-10 08:13:39 -0400
commit35e0305dc2a57cea6fcb515db9e0b0f938daf53a (patch)
treee6e8253c530733a0a3743d94b9e8dcc2fb801fd4
parent51bf4e4650fc11fc4ab3037f5738151f86d7fb47 (diff)
downloademacs-35e0305dc2a57cea6fcb515db9e0b0f938daf53a.tar.gz
emacs-35e0305dc2a57cea6fcb515db9e0b0f938daf53a.zip
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)
-rw-r--r--lisp/emacs-lisp/easy-mmode.el28
1 files changed, 16 insertions, 12 deletions
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 21ca69324ed..443e03eb1a3 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."
457 457
458 ;; The function that calls TURN-ON in each buffer. 458 ;; The function that calls TURN-ON in each buffer.
459 (defun ,MODE-enable-in-buffers () 459 (defun ,MODE-enable-in-buffers ()
460 (dolist (buf ,MODE-buffers) 460 (let ((buffers ,MODE-buffers))
461 (when (buffer-live-p buf) 461 ;; Clear MODE-buffers to avoid scanning the same list of
462 (with-current-buffer buf 462 ;; buffers in recursive calls to MODE-enable-in-buffers.
463 (unless ,MODE-set-explicitly 463 ;; Otherwise it could lead to infinite recursion.
464 (unless (eq ,MODE-major-mode major-mode) 464 (setq ,MODE-buffers nil)
465 (if ,mode 465 (dolist (buf buffers)
466 (progn 466 (when (buffer-live-p buf)
467 (,mode -1) 467 (with-current-buffer buf
468 (funcall #',turn-on)) 468 (unless ,MODE-set-explicitly
469 (funcall #',turn-on)))) 469 (unless (eq ,MODE-major-mode major-mode)
470 (setq ,MODE-major-mode major-mode))))) 470 (if ,mode
471 (progn
472 (,mode -1)
473 (funcall #',turn-on))
474 (funcall #',turn-on))))
475 (setq ,MODE-major-mode major-mode))))))
471 (put ',MODE-enable-in-buffers 'definition-name ',global-mode) 476 (put ',MODE-enable-in-buffers 'definition-name ',global-mode)
472 477
473 (defun ,MODE-check-buffers () 478 (defun ,MODE-check-buffers ()
474 (,MODE-enable-in-buffers) 479 (,MODE-enable-in-buffers)
475 (setq ,MODE-buffers nil)
476 (remove-hook 'post-command-hook ',MODE-check-buffers)) 480 (remove-hook 'post-command-hook ',MODE-check-buffers))
477 (put ',MODE-check-buffers 'definition-name ',global-mode) 481 (put ',MODE-check-buffers 'definition-name ',global-mode)
478 482