diff options
| -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 | ||