Commit c834b52c authored by Stefan Monnier's avatar Stefan Monnier
Browse files

(combine-run-hooks): New function.

parent 6c4bfdc0
......@@ -1089,6 +1089,35 @@ in BODY."
. ,body)
(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)))
;; 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)))))
;; 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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment