aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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