summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/lucid.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp/lucid.el')
-rw-r--r--lisp/emacs-lisp/lucid.el10
1 files changed, 9 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/lucid.el b/lisp/emacs-lisp/lucid.el
index 144aaf35b22..eaa405afd33 100644
--- a/lisp/emacs-lisp/lucid.el
+++ b/lisp/emacs-lisp/lucid.el
@@ -53,8 +53,16 @@
(setcdr tail new-parent))))
(defun remove-hook (hook-var function)
+ "Remove a function from a hook, if it is present.
+First argument HOOK-VAR (a symbol) is the name of a hook, second
+ argument FUNCTION is the function to remove (compared with `eq')."
(if (boundp 'hook-var)
- (set hook-var (delq function (symbol-value hook-var)))))
+ (let ((old (symbol-value hook-var)))
+ ;; If the hook value is a single function, turn it into a list.
+ (if (or (not (listp old)) (eq (car old) 'lambda))
+ (set hook-var (list old)))
+ ;; Now delete FUNCTION.
+ (set hook-var (delq function (symbol-value hook-var))))))
(defun remprop (symbol prop)
(let ((plist (symbol-plist symbol)))