1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-01 11:14:55 +00:00

(add-to-history): Add KEEP-ALL arg and align functionality

with read-from-minibuffer.
This commit is contained in:
Kim F. Storm 2006-05-16 11:19:39 +00:00
parent fb6341e7fd
commit d749491187

View File

@ -1123,28 +1123,36 @@ The return value is the new value of LIST-VAR."
(< 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)))