changeset 105002:e78ee4d53b02

* recentf.el (recentf-cleanup): Use a hash table to find duplicates (Bug#4407).
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 13 Sep 2009 21:09:05 +0000
parents f665043359a7
children 5b946f854966
files lisp/ChangeLog lisp/recentf.el
diffstat 2 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sun Sep 13 20:48:09 2009 +0000
+++ b/lisp/ChangeLog	Sun Sep 13 21:09:05 2009 +0000
@@ -1,3 +1,8 @@
+2009-09-13  Vincent Belaïche  <vincent.belaiche@gmail.com>
+
+	* recentf.el (recentf-cleanup): Use a hash table to find
+	duplicates (Bug#4407).
+
 2009-09-13  Per Starbäck  <per@starback.se>  (tiny change)
 
 	* textmodes/ispell.el (ispell-command-loop): Convert keys such as
--- a/lisp/recentf.el	Sun Sep 13 20:48:09 2009 +0000
+++ b/lisp/recentf.el	Sun Sep 13 21:09:05 2009 +0000
@@ -1307,13 +1307,20 @@
 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)