changeset 70415:72f273a616c1

(add-to-history): New function.
author Kim F. Storm <storm@cua.dk>
date Fri, 05 May 2006 23:35:57 +0000
parents b835c65a2dc0
children 522ce5c1839a
files lisp/subr.el
diffstat 1 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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.