diff options
| author | John Shahid | 2018-06-23 11:12:44 -0400 |
|---|---|---|
| committer | Noam Postavsky | 2018-07-10 08:13:39 -0400 |
| commit | 35e0305dc2a57cea6fcb515db9e0b0f938daf53a (patch) | |
| tree | e6e8253c530733a0a3743d94b9e8dcc2fb801fd4 | |
| parent | 51bf4e4650fc11fc4ab3037f5738151f86d7fb47 (diff) | |
| download | emacs-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.el | 28 |
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 | ||