# HG changeset patch # User Eric S. Raymond # Date 733197524 0 # Node ID b7941d286c3f42e4c3a24e5454b01719917f4f4c # Parent 030b76db285a38565b3afd501fe004af669f1330 (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. diff -r 030b76db285a -r b7941d286c3f lisp/subr.el --- 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.