emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/subr.el


From: Kim F. Storm
Subject: [Emacs-diffs] Changes to emacs/lisp/subr.el
Date: Tue, 16 May 2006 11:19:39 +0000

Index: emacs/lisp/subr.el
diff -u emacs/lisp/subr.el:1.509 emacs/lisp/subr.el:1.510
--- emacs/lisp/subr.el:1.509    Wed May 10 01:58:37 2006
+++ emacs/lisp/subr.el  Tue May 16 11:19:39 2006
@@ -1123,28 +1123,36 @@
                                (< oa ob)
                              oa)))))))
 
-(defun add-to-history (history-var newelt &optional maxelt)
+(defun add-to-history (history-var newelt &optional maxelt keep-all)
   "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."
+Remove duplicates of NEWELT if `history-delete-duplicates' is non-nil.
+If optional fourth arg KEEP-ALL is non-nil, add NEWELT to history even
+if it is empty or a duplicate."
   (unless maxelt
     (setq maxelt (or (get history-var 'history-length)
                     history-length)))
   (let ((history (symbol-value history-var))
        tail)
-    (if history-delete-duplicates
-       (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))))
+    (when (and (listp history)
+              (or keep-all
+                  (not (stringp newelt))
+                  (> (length newelt) 0))
+              (or keep-all
+                  (not (equal (car history) newelt))))
+      (if history-delete-duplicates
+         (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)))
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]