From: Chong Yidong Date: Sun, 13 Sep 2009 21:09:05 +0000 (+0000) Subject: * recentf.el (recentf-cleanup): Use a hash table to find X-Git-Tag: emacs-pretest-23.1.90~1335 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1fc26e29ba1383a2daeb5321ed03d04bc1a7669b;p=emacs.git * recentf.el (recentf-cleanup): Use a hash table to find duplicates (Bug#4407). --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 11bfa9bce85..0ad8e2f07cf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2009-09-13 Vincent Belaïche + + * recentf.el (recentf-cleanup): Use a hash table to find + duplicates (Bug#4407). + 2009-09-13 Per Starbäck (tiny change) * textmodes/ispell.el (ispell-command-loop): Convert keys such as diff --git a/lisp/recentf.el b/lisp/recentf.el index bc8904f9211..c0fa933840a 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -1307,13 +1307,20 @@ empty `file-name-history' with the recent list." That is, remove duplicates, non-kept, and excluded files." (interactive) (message "Cleaning up the recentf list...") - (let ((n 0) newlist) + (let ((n 0) + (ht (make-hash-table + :size recentf-max-saved-items + :test 'equal)) + newlist key) (dolist (f recentf-list) - (setq f (recentf-expand-file-name f)) + (setq f (recentf-expand-file-name f) + key (if recentf-case-fold-search (downcase f) f)) (if (and (recentf-include-p f) (recentf-keep-p f) - (not (recentf-string-member f newlist))) - (push f newlist) + (not (gethash key ht))) + (progn + (push f newlist) + (puthash key t ht)) (setq n (1+ n)) (message "File %s removed from the recentf list" f))) (message "Cleaning up the recentf list...done (%d removed)" n)