changeset 2383:b7941d286c3f

(add-hook) Added optional arg to cause hook to be appended rather than prepended to the hook list. This obviates the 23 different hook-bashing packages in LCD. (get-word) Added. Lots of help and default-generator functions in LCD use it, and it's remarkably difficult to get right, especially given the new syntax primitives.
author Eric S. Raymond <esr@snark.thyrsus.com>
date Sat, 27 Mar 1993 01:58:44 +0000
parents 030b76db285a
children 5ab51b7300e4
files lisp/subr.el
diffstat 1 files changed, 10 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Sat Mar 27 01:58:38 1993 +0000
+++ b/lisp/subr.el	Sat Mar 27 01:58:44 1993 +0000
@@ -407,11 +407,12 @@
   "Variable by which C primitives find the function `run-hooks'.
 Don't change it.")
 
-(defun add-hook (hook function)
-  "Add to the value of HOOK the function FUNCTION unless already present.
-HOOK should be a symbol, and FUNCTION may be any valid function.
-HOOK's value should be a list of functions, not a single function.
-If HOOK is void, it is first set to nil."
+(defun add-hook (hook function &optional append)
+  "Add to the value of HOOK the function FUNCTION unless already present (it
+becomes the first hook on the list unless optional APPEND is non-nil, in
+which case it becomes the last).  HOOK should be a symbol, and FUNCTION may be
+any valid function.  HOOK's value should be a list of functions, not a single
+function.  If HOOK is void, it is first set to nil."
   (or (boundp hook) (set hook nil))
   (or (if (consp function)
 	  ;; Clever way to tell whether a given lambda-expression
@@ -419,7 +420,10 @@
 	  (let ((tail (assoc (cdr function) (symbol-value hook))))
 	    (equal function tail))
 	(memq function (symbol-value hook)))
-      (set hook (cons function (symbol-value hook)))))
+      (set hook 
+	   (if append
+	       (nconc (symbol-value hook) (list function))
+	     (cons function (symbol-value hook))))))
 
 (defun momentary-string-display (string pos &optional exit-char message) 
   "Momentarily display STRING in the buffer at POS.