changeset 28234:763c6639628b

(combine-run-hooks): New function.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 21 Mar 2000 15:28:44 +0000
parents dbbbc64baaa9
children 963f1d516e92
files lisp/subr.el
diffstat 1 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Tue Mar 21 00:50:39 2000 +0000
+++ b/lisp/subr.el	Tue Mar 21 15:28:44 2000 +0000
@@ -1089,6 +1089,35 @@
 	 . ,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