[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master fb619c1: (delayed-after-hook-functions): Tighten th
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] master fb619c1: (delayed-after-hook-functions): Tighten the code a bit |
Date: |
Wed, 27 Dec 2017 17:49:47 -0500 (EST) |
branch: master
commit fb619c1c22b986841964b09b7effe42785f3fed8
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
(delayed-after-hook-functions): Tighten the code a bit
* lisp/subr.el (delayed-mode-hooks, delayed-after-hook-functions):
Use defvar-local.
(run-mode-hooks): Reset delayed-after-hook-functions before running
those functions, in case an error is signaled.
* lisp/emacs-lisp/derived.el (define-derived-mode): Don't duplicate code.
---
lisp/emacs-lisp/derived.el | 10 ++++------
lisp/subr.el | 12 +++++-------
2 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index c0ef199..3bb8eb4 100644
--- a/lisp/emacs-lisp/derived.el
+++ b/lisp/emacs-lisp/derived.el
@@ -281,12 +281,10 @@ No problems result if this variable is not bound.
; Splice in the body (if any).
,@body
)
- ;; Run the hooks, if any.
- (run-mode-hooks ',hook)
- ,@(when after-hook
- `((if delay-mode-hooks
- (push (lambda () ,after-hook) delayed-after-hook-functions)
- ,after-hook)))))))
+ ,@(when after-hook
+ `((push (lambda () ,after-hook) delayed-after-hook-functions)))
+ ;; Run the hooks (and delayed-after-hook-functions), if any.
+ (run-mode-hooks ',hook)))))
;; PUBLIC: find the ultimate class of a derived mode.
diff --git a/lisp/subr.el b/lisp/subr.el
index 67209b4..76d7a1a 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1839,15 +1839,13 @@ if it is empty or a duplicate."
(defvar delay-mode-hooks nil
"If non-nil, `run-mode-hooks' should delay running the hooks.")
-(defvar delayed-mode-hooks nil
+(defvar-local delayed-mode-hooks nil
"List of delayed mode hooks waiting to be run.")
-(make-variable-buffer-local 'delayed-mode-hooks)
(put 'delay-mode-hooks 'permanent-local t)
-(defvar delayed-after-hook-functions nil
+(defvar-local delayed-after-hook-functions nil
"List of delayed :after-hook forms waiting to be run.
These forms come from `define-derived-mode'.")
-(make-variable-buffer-local 'delayed-after-hook-functions)
(defvar change-major-mode-after-body-hook nil
"Normal hook run in major mode functions, before the mode hooks.")
@@ -1889,9 +1887,9 @@ running their FOO-mode-hook."
(with-demoted-errors "File local-variables error: %s"
(hack-local-variables 'no-mode)))
(run-hooks 'after-change-major-mode-hook)
- (dolist (fun (nreverse delayed-after-hook-functions))
- (funcall fun))
- (setq delayed-after-hook-functions nil)))
+ (dolist (fun (prog1 (nreverse delayed-after-hook-functions)
+ (setq delayed-after-hook-functions nil)))
+ (funcall fun))))
(defmacro delay-mode-hooks (&rest body)
"Execute BODY, but delay any `run-mode-hooks'.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master fb619c1: (delayed-after-hook-functions): Tighten the code a bit,
Stefan Monnier <=