From 7ba148ff7f57242e9d28fb882ce6ebc2f1c224a5 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 22 Jun 2022 16:54:40 +0200 Subject: [PATCH] New command recentf-open * lisp/recentf.el (recentf-open): New command. (recentf): New alias. (recentf, recentf-mode): Update documentation to focus more on the list of recently opened files and ways of accessing it, instead of focusing on the menu bar only. (recentf-list, recentf-enabled-p): Minor doc fixes. * doc/emacs/files.texi (File Conveniences): Update documentation. --- doc/emacs/files.texi | 13 +++++++----- etc/NEWS | 5 +++++ lisp/recentf.el | 49 ++++++++++++++++++++++++++++++++++++-------- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 062185fb4a..5236eb0b50 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -2222,13 +2222,16 @@ File Conveniences @findex recentf-mode @vindex recentf-mode +@findex recentf-open @findex recentf-save-list @findex recentf-edit-list - If you enable Recentf mode, with @kbd{M-x recentf-mode}, the -@samp{File} menu includes a submenu containing a list of recently -opened files. @kbd{M-x recentf-save-list} saves the current -@code{recentf-list} to a file, and @kbd{M-x recentf-edit-list} edits -it. + If you enable Recentf mode, with @kbd{M-x recentf-mode}, Emacs +maintains a list of recently opened files. To open a file from this +list, use the @kbd{M-x recentf-open} command. When this mode is +enabled, the @samp{File} menu will include a submenu containing a list +of recently opened files. @kbd{M-x recentf-save-list} saves the +current @code{recentf-list} to a file, and @kbd{M-x recentf-edit-list} +edits it. @c FIXME partial-completion-mode (complete.el) is obsolete. The @kbd{M-x ffap} command generalizes @code{find-file} with more diff --git a/etc/NEWS b/etc/NEWS index 6c04ae164c..85a538bcfa 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1861,6 +1861,11 @@ This means that e.g. "/home/foo/bar" is now displayed as "~/bar". Customize the user option 'recentf-filename-handlers' to nil to get back the old behavior. +--- +*** New command 'recentf-open'. +This command prompts for a recently opened file in the minibuffer, and +visits it. + --- ** The autoarg.el library is now marked obsolete. This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor diff --git a/lisp/recentf.el b/lisp/recentf.el index b31aafc9dc..e940259b00 100644 --- a/lisp/recentf.el +++ b/lisp/recentf.el @@ -1,4 +1,4 @@ -;;; recentf.el --- setup a menu of recently opened files -*- lexical-binding: t -*- +;;; recentf.el --- keep track of recently opened files -*- lexical-binding: t -*- ;; Copyright (C) 1999-2022 Free Software Foundation, Inc. @@ -23,10 +23,19 @@ ;;; Commentary: -;; This package maintains a menu for visiting files that were operated -;; on recently. When enabled a new "Open Recent" submenu is -;; displayed in the "File" menu. The recent files list is -;; automatically saved across Emacs sessions. +;; This package maintains a list of recently opened files and makes it +;; easy to visit them. The recent files list is automatically saved +;; across Emacs sessions. + +;; There are three ways to access recent files: +;; +;; (1) `M-x recentf-open' prompts for a recently opened file. +;; +;; (2) When this mode is enabled, a new "Open Recent" submenu is +;; displayed in the "File" menu. +;; +;; (3) `M-x recentf-open-files' lists recently visited files in a +;; buffer. ;; You can customize the number of recent files displayed, the ;; location of the menu and other options. Type: @@ -45,17 +54,17 @@ ;;; Internal data ;; (defvar recentf-list nil - "List of recently opened files.") + "List of recently opened files for `recentf-mode'.") (defun recentf-enabled-p () - "Return non-nil if recentf mode is currently enabled." + "Return non-nil if `recentf-mode' is currently enabled." (memq 'recentf-save-list kill-emacs-hook)) ;;; Customization ;; (defgroup recentf nil - "Maintain a menu of recently opened files." + "Maintain a list of recently opened files." :version "21.1" :group 'files) @@ -463,6 +472,24 @@ recentf-directory-compare (recentf-string-lessp (file-name-nondirectory f1) (file-name-nondirectory f2)) (recentf-string-lessp d1 d2)))) + + +;;; Open files +;; + +(defun recentf-open (file) + "Prompt for FILE in `recentf-list' and visit it. +Enable `recentf-mode' if it isn't already." + (interactive + (list + (progn (unless recentf-mode (recentf-mode 1)) + (completing-read (format-prompt "Open recent file" nil) + recentf-list nil t)))) + (when file + (funcall recentf-menu-action file))) + +(defalias 'recentf 'recentf-open) + ;;; Menu building ;; @@ -1343,6 +1370,12 @@ recentf-mode-map ;;;###autoload (define-minor-mode recentf-mode "Toggle \"Open Recent\" menu (Recentf mode). +This mode maintains a list of recently opened files and makes it +easy to visit them. The recent files list is automatically saved +across Emacs sessions. + +You can use `recentf-open' or `recentf-open-files' to visit +files. When Recentf mode is enabled, a \"Open Recent\" submenu is displayed in the \"File\" menu, containing a list of files that -- 2.30.2