# HG changeset patch # User Kim F. Storm # Date 1146872157 0 # Node ID 72f273a616c118df5144a6884e0263ead53949c5 # Parent b835c65a2dc04dd1a70c0ba32e3d5bbf149f300e (add-to-history): New function. diff -r b835c65a2dc0 -r 72f273a616c1 lisp/subr.el --- a/lisp/subr.el Fri May 05 23:19:52 2006 +0000 +++ b/lisp/subr.el Fri May 05 23:35:57 2006 +0000 @@ -1122,6 +1122,32 @@ (if (and oa ob) (< oa ob) oa))))))) + +(defun add-to-history (history-var newelt &optional maxelt keep-dups) + "Add NEWELT to the history list stored in the variable HISTORY-VAR. +Return the new history list. +If MAXELT is non-nil, it specifies the maximum length of the history. +Otherwise, the maximum history length is the value of the `history-length' +property on symbol HISTORY-VAR, if set, or the value of the `history-length' +variable. +Remove duplicates of NEWELT unless `history-delete-duplicates' is nil +or KEEP-DUPS is non-nil." + (unless maxelt + (setq maxelt (or (get history-var 'history-length) + history-length))) + (let ((history (symbol-value history-var)) + tail) + (if (and history-delete-duplicates (not keep-dups)) + (setq history (delete newelt history))) + (setq history (cons newelt history)) + (when (integerp maxelt) + (if (= 0 maxelt) + (setq history nil) + (setq tail (nthcdr (1- maxelt) history)) + (when (consp tail) + (setcdr tail nil)))) + (set history-var history))) + ;;;; Mode hooks.