From 1fc26e29ba1383a2daeb5321ed03d04bc1a7669b Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 13 Sep 2009 21:09:05 +0000 Subject: [PATCH] * recentf.el (recentf-cleanup): Use a hash table to find duplicates (Bug#4407). --- lisp/ChangeLog | 5 +++++ lisp/recentf.el | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) 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) -- 2.39.2