summaryrefslogtreecommitdiff
path: root/lisp/recentf.el
diff options
context:
space:
mode:
authorDavid Ponce <david@dponce.com>2005-03-23 07:20:48 +0000
committerDavid Ponce <david@dponce.com>2005-03-23 07:20:48 +0000
commiteafc2b271a619921a212ee0358d3e269abb23169 (patch)
tree10c868dba378c7ade162d95ac866904f962029ef /lisp/recentf.el
parent90563cb3fb91c5237891c34f78e33fd6f51a9245 (diff)
downloademacs-eafc2b271a619921a212ee0358d3e269abb23169.tar.gz
(recentf-keep): New option.
(recentf-menu-action): Default to `find-file'. (recentf-keep-non-readable-files-flag) (recentf-keep-non-readable-files-p) (recentf-file-readable-p, recentf-find-file) (recentf-cleanup-remote): Remove. (recentf-include-p): More robust. (recentf-keep-p): New function. (recentf-remove-if-non-kept): Rename from `recentf-remove-if-non-readable'. Use `recentf-keep-p'. All callers updated. (recentf-menu-items-for-commands): Fix help string. (recentf-track-closed-file): Update. Doc fix. (recentf-cleanup): Update. Count removed files. Doc fix.
Diffstat (limited to 'lisp/recentf.el')
-rw-r--r--lisp/recentf.el121
1 files changed, 59 insertions, 62 deletions
diff --git a/lisp/recentf.el b/lisp/recentf.el
index a6f3cf0bff7..40a9204267e 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -1,6 +1,6 @@
;;; recentf.el --- setup a menu of recently opened files
-;; Copyright (C) 1999, 2000, 2001, 2002, 2003
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005
;; Free Software Foundation, Inc.
;; Author: David Ponce <david@dponce.com>
@@ -84,6 +84,22 @@ must return non-nil to exclude it."
:group 'recentf
:type '(repeat (choice regexp function)))
+(defcustom recentf-keep
+ '(file-readable-p)
+ "*List of regexps and predicates for filenames kept in the recent list.
+Regexps and predicates are tried in the specified order.
+When nil all filenames are kept in the recent list.
+When a filename matches any of the regexps or satisfies any of the
+predicates it is kept in the recent list.
+The default is to keep readable files.
+A predicate is a function that is passed a filename to check and that
+must return non-nil to keep it. For example, you can add the
+`file-remote-p' predicate in front of this list to keep remote file
+names in the recent list without checking their readability through a
+remote access."
+ :group 'recentf
+ :type '(repeat (choice regexp function)))
+
(defun recentf-menu-customization-changed (variable value)
"Function called when the recentf menu customization has changed.
Set VARIABLE with VALUE, and force a rebuild of the recentf menu."
@@ -114,9 +130,9 @@ If nil add it at end of menu (see also `easy-menu-add-item')."
(const :tag "Last" nil))
:set 'recentf-menu-customization-changed)
-(defcustom recentf-menu-action 'recentf-find-file
+(defcustom recentf-menu-action 'find-file
"*Function to invoke with a filename item of the recentf menu.
-The default is to call `recentf-find-file' to edit the selected file."
+The default is to call `find-file' to edit the selected file."
:group 'recentf
:type 'function
:set 'recentf-menu-customization-changed)
@@ -194,17 +210,6 @@ elements (see `recentf-make-menu-element' for menu element form)."
'recentf-menu-append-commands-flag
"22.1")
-(defcustom recentf-keep-non-readable-files-flag nil
- "*non-nil means to keep non readable files in the recent list."
- :group 'recentf
- :type 'boolean)
-
-(defvaralias 'recentf-keep-non-readable-files-p
- 'recentf-keep-non-readable-files-flag)
-(make-obsolete-variable 'recentf-keep-non-readable-files-p
- 'recentf-keep-non-readable-files-flag
- "22.1")
-
(defcustom recentf-auto-cleanup 'mode
"*Define when to automatically cleanup the recent list.
The following values can be set:
@@ -255,11 +260,6 @@ It is passed a filename to give a chance to transform it.
If it returns nil, the filename is left unchanged."
:group 'recentf
:type 'function)
-
-(defcustom recentf-cleanup-remote t
- "*non-nil means to auto cleanup remote files."
- :group 'recentf
- :type 'boolean)
;;; Utilities
;;
@@ -356,56 +356,56 @@ process the canonical name."
(funcall recentf-filename-handler filename))
filename)))
-(defsubst recentf-file-readable-p (filename)
- "Return t if file FILENAME exists and you can read it.
-Like the function `file-readable-p' but return nil on error."
- (condition-case nil
- (file-readable-p filename)
- (error nil)))
-
(defun recentf-include-p (filename)
"Return non-nil if FILENAME should be included in the recent list.
That is, if it doesn't match any of the `recentf-exclude' checks."
(let ((case-fold-search recentf-case-fold-search)
(checks recentf-exclude)
- (keepit t)
- check)
+ (keepit t))
(while (and checks keepit)
- (setq check (car checks)
- checks (cdr checks)
- keepit (not (if (stringp check)
- ;; A regexp
- (string-match check filename)
- ;; A predicate
- (funcall check filename)))))
+ (setq keepit (condition-case nil
+ (not (if (stringp (car checks))
+ ;; A regexp
+ (string-match (car checks) filename)
+ ;; A predicate
+ (funcall (car checks) filename)))
+ (error nil))
+ checks (cdr checks)))
+ keepit))
+
+(defun recentf-keep-p (filename)
+ "Return non-nil if FILENAME should be kept in the recent list.
+That is, if it matches any of the `recentf-keep' checks."
+ (let* ((case-fold-search recentf-case-fold-search)
+ (checks recentf-keep)
+ (keepit (null checks)))
+ (while (and checks (not keepit))
+ (setq keepit (condition-case nil
+ (if (stringp (car checks))
+ ;; A regexp
+ (string-match (car checks) filename)
+ ;; A predicate
+ (funcall (car checks) filename))
+ (error nil))
+ checks (cdr checks)))
keepit))
(defsubst recentf-add-file (filename)
"Add or move FILENAME at the beginning of the recent list.
-Does nothing if the name satisfies any of the `recentf-exclude' regexps or
-predicates."
+Does nothing if the name satisfies any of the `recentf-exclude'
+regexps or predicates."
(setq filename (recentf-expand-file-name filename))
(when (recentf-include-p filename)
(recentf-push filename)))
-(defsubst recentf-remove-if-non-readable (filename)
- "Remove FILENAME from the recent list, if file is not readable.
+(defsubst recentf-remove-if-non-kept (filename)
+ "Remove FILENAME from the recent list, if file is not kept.
Return non-nil if FILENAME has been removed."
- (unless (recentf-file-readable-p filename)
+ (unless (recentf-keep-p filename)
(let ((m (recentf-string-member
(recentf-expand-file-name filename) recentf-list)))
(and m (setq recentf-list (delq (car m) recentf-list))))))
-(defun recentf-find-file (filename)
- "Edit file FILENAME using `find-file'.
-If the file does not exist or is non readable, and
-`recentf-keep-non-readable-files-flag' is nil, it is not edited and
-its name is removed from the recent list."
- (if (and (not recentf-keep-non-readable-files-flag)
- (recentf-remove-if-non-readable filename))
- (message "File `%s' not found" filename)
- (find-file filename)))
-
(defsubst recentf-directory-compare (f1 f2)
"Compare absolute filenames F1 and F2.
First compare directories, then filenames sans directory.
@@ -422,7 +422,7 @@ Return non-nil if F1 is less than F2."
(defvar recentf-menu-items-for-commands
(list ["Cleanup list"
recentf-cleanup
- :help "Remove all non-readable and excluded files from the recent list"
+ :help "Remove all excluded and non-kept files from the recent list"
:active t]
["Edit list..."
recentf-edit-list
@@ -938,11 +938,9 @@ IGNORE arguments."
(defun recentf-track-closed-file ()
"Update the recent list when a buffer is killed.
-That is, remove a non readable file from the recent list, if
-`recentf-keep-non-readable-files-flag' is nil."
+That is, remove a non kept file from the recent list."
(and buffer-file-name
- (not recentf-keep-non-readable-files-flag)
- (recentf-remove-if-non-readable buffer-file-name)))
+ (recentf-remove-if-non-kept buffer-file-name)))
(defun recentf-update-menu ()
"Update the recentf menu from the current recent list."
@@ -1169,19 +1167,18 @@ empty `file-name-history' with the recent list."
recentf-list))))))
(defun recentf-cleanup ()
- "Remove all excluded or non-readable files from the recent list."
+ "Remove all non-kept and excluded files from the recent list."
(interactive)
(message "Cleaning up the recentf list...")
- (let (newlist)
+ (let ((n 0) newlist)
(dolist (f recentf-list)
(if (and (recentf-include-p f)
- (or (and (file-remote-p f)
- (not recentf-cleanup-remote))
- (recentf-file-readable-p f)))
+ (recentf-keep-p f))
(push f newlist)
+ (setq n (1+ n))
(message "File %s removed from the recentf list" f)))
- (setq recentf-list (nreverse newlist))
- (message "Cleaning up the recentf list...done")))
+ (message "Cleaning up the recentf list...done (%d removed)" n)
+ (setq recentf-list (nreverse newlist))))
;;;###autoload
(define-minor-mode recentf-mode