]> git.eshelyaron.com Git - emacs.git/commitdiff
(remove-hook): New function, analogous to add-hook. This
authorRichard M. Stallman <rms@gnu.org>
Wed, 10 Nov 1993 20:30:32 +0000 (20:30 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 10 Nov 1993 20:30:32 +0000 (20:30 +0000)
is now the recommended way to remove a hook that you have added.

lisp/subr.el

index aa158175998d29875d4623338d72a34fde8f10fe..02ada23bb672a4e91aa93dffa1920d53b8a942b0 100644 (file)
@@ -493,6 +493,21 @@ function, it is changed to a list of functions."
               (nconc (symbol-value hook) (list function))
             (cons function (symbol-value hook))))))
 
+(defun remove-hook (hook function)
+  "Remove from the value of HOOK the function FUNCTION.
+HOOK should be a symbol, and FUNCTION may be any valid function.  If
+FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the
+list of hooks to run in HOOK, then nothing is done.  See add-hook."
+  (if (or (not (boundp hook))          ;unbound symbol, or
+         (null (symbol-value hook))    ;value is nil, or
+         (null function))              ;function is nil, then
+      nil                              ;Do nothing.
+    (let ((hook-value (symbol-value hook)))
+      (if (consp hook-value)
+         (setq hook-value (delete function hook-value))
+       (if (eq hook-value function)
+           (setq hook-value nil)))
+      (set hook hook-value))))
 \f
 ;;;; Specifying things to do after certain files are loaded.