1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

(combine-run-hooks): New function.

This commit is contained in:
Stefan Monnier 2000-03-21 15:28:44 +00:00
parent 6c4bfdc0b7
commit c834b52cdc

View file

@ -1089,6 +1089,35 @@ in BODY."
. ,body)
(combine-after-change-execute)))
(defvar combine-run-hooks t
"List of hooks delayed. Or t if we're not delaying hooks.")
(defmacro combine-run-hooks (&rest body)
"Execute BODY, but delay any `run-hooks' until the end."
(let ((saved-combine-run-hooks (make-symbol "saved-combine-run-hooks"))
(saved-run-hooks (make-symbol "saved-run-hooks")))
`(let ((,saved-combine-run-hooks combine-run-hooks)
(,saved-run-hooks (symbol-function 'run-hooks)))
(unwind-protect
(progn
;; If we're not delaying hooks yet, setup the delaying mode
(unless (listp combine-run-hooks)
(setq combine-run-hooks nil)
(fset 'run-hooks
,(lambda (&rest hooks)
(setq combine-run-hooks
(append combine-run-hooks hooks)))))
,@body)
;; If we were not already delaying, then it's now time to set things
;; back to normal and to execute the delayed hooks.
(unless (listp ,saved-combine-run-hooks)
(setq ,saved-combine-run-hooks combine-run-hooks)
(fset 'run-hooks ,saved-run-hooks)
(setq combine-run-hooks t)
(apply 'run-hooks ,saved-combine-run-hooks))))))
(defmacro with-syntax-table (table &rest body)
"Evaluate BODY with syntax table of current buffer set to a copy of TABLE.
The syntax table of the current buffer is saved, BODY is evaluated, and the