-;;; recentf.el --- setup a menu of recently opened files
+;;; recentf.el --- setup a menu of recently opened files -*- lexical-binding: t -*-
;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
;;; Commentary:
;; This package maintains a menu for visiting files that were operated
-;; on recently. When enabled a new "Open Recent" sub menu is
+;; 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. You can customize the
-;; number of recent files displayed, the location of the menu and
-;; others options (see the source code for details).
+;; automatically saved across Emacs sessions.
-;; To enable this package, add the following to your .emacs:
-;; (recentf-mode 1)
+;; You can customize the number of recent files displayed, the
+;; location of the menu and others options. Type:
+;;
+;; M-x customize-group RET recentf RET
+
+;; To enable this package, add this line to your Init file:
+;;
+;; (recentf-mode 1)
;;; Code:
+
(require 'tree-widget)
(require 'timer)
:type 'file
:initialize 'custom-initialize-default
:set (lambda (symbol value)
- (let ((oldvalue (eval symbol)))
+ (let ((oldvalue (symbol-value symbol)))
(custom-set-default symbol value)
(and (not (equal value oldvalue))
recentf-mode
(function :tag "Other function")))))
(defcustom recentf-show-file-shortcuts-flag t
- "Whether to show \"[N]\" for the Nth item up to 10.
+ "Non-nil means to show \"[N]\" for the Nth item up to 10.
If non-nil, `recentf-open-files' will show labels for keys that can be
used as shortcuts to open the Nth file."
:group 'recentf
(setq list (cdr list)))
list)
-(defsubst recentf-trunc-list (l n)
- "Return from L the list of its first N elements."
- (let (nl)
- (while (and l (> n 0))
- (setq nl (cons (car l) nl)
- n (1- n)
- l (cdr l)))
- (nreverse nl)))
-
(defun recentf-dump-variable (variable &optional limit)
"Insert a \"(setq VARIABLE value)\" in the current buffer.
When the value of VARIABLE is a list, optional argument LIMIT
(if (atom value)
(insert (format "\n(setq %S '%S)\n" variable value))
(when (and (integerp limit) (> limit 0))
- (setq value (recentf-trunc-list value limit)))
+ (setq value (seq-take value limit)))
(insert (format "\n(setq %S\n '(" variable))
(dolist (e value)
(insert (format "\n %S" e)))
(defsubst recentf-elements (n)
"Return a list of the first N elements of the recent list."
- (recentf-trunc-list recentf-list n))
+ (seq-take recentf-list n))
(defsubst recentf-make-menu-element (menu-item menu-value)
"Create a new menu-element.
(defsubst recentf-menu-elements (n)
"Return a list of the first N default menu elements from the recent list.
See also `recentf-make-default-menu-element'."
- (mapcar 'recentf-make-default-menu-element
+ (mapcar #'recentf-make-default-menu-element
(recentf-elements n)))
(defun recentf-apply-menu-filter (filter l)
(let* ((recentf-menu-shortcuts 0)
(file-items
(condition-case err
- (mapcar 'recentf-make-menu-item
+ (mapcar #'recentf-make-menu-item
(recentf-apply-menu-filter
recentf-menu-filter
(recentf-menu-elements recentf-max-menu-items)))
(let ((item (recentf-menu-element-item elt))
(value (recentf-menu-element-value elt)))
(if (recentf-sub-menu-element-p elt)
- (cons item (mapcar 'recentf-make-menu-item value))
+ (cons item (mapcar #'recentf-make-menu-item value))
(let ((k (and (< recentf-menu-shortcuts 10)
(recentf-menu-value-shortcut value))))
(vector item
(defun recentf-relative-filter (l)
"Filter the list of menu-elements L to show relative filenames.
Filenames are relative to the `default-directory'."
- (mapcar #'(lambda (menu-element)
- (let* ((ful (recentf-menu-element-value menu-element))
- (rel (file-relative-name ful default-directory)))
- (if (string-match "^\\.\\." rel)
- menu-element
- (recentf-make-menu-element rel ful))))
+ (mapcar (lambda (menu-element)
+ (let* ((ful (recentf-menu-element-value menu-element))
+ (rel (file-relative-name ful default-directory)))
+ (if (string-match "^\\.\\." rel)
+ menu-element
+ (recentf-make-menu-element rel ful))))
l))
\f
;;; Rule based menu filters
This simplified version of `recentf-show-basenames' does not handle
duplicates. It is used by `recentf-arrange-by-dir' as its
`recentf-arrange-by-rule-subfilter'."
- (mapcar #'(lambda (e)
- (recentf-make-menu-element
- (file-name-nondirectory (recentf-menu-element-value e))
- (recentf-menu-element-value e)))
+ (mapcar (lambda (e)
+ (recentf-make-menu-element
+ (file-name-nondirectory (recentf-menu-element-value e))
+ (recentf-menu-element-value e)))
l))
(defun recentf-dir-rule (file)
(list
`("Show files"
,@(mapcar
- #'(lambda (f)
- `[,(cdr f)
- (setq recentf-filter-changer-current ',(car f))
- ;;:active t
- :style radio ;;radio Don't work with GTK :-(
- :selected (eq recentf-filter-changer-current
- ',(car f))
- ;;:help ,(cdr f)
- ])
+ (lambda (f)
+ `[,(cdr f)
+ (setq recentf-filter-changer-current ',(car f))
+ ;;:active t
+ :style radio ;;radio Don't work with GTK :-(
+ :selected (eq recentf-filter-changer-current
+ ',(car f))
+ ;;:help ,(cdr f)
+ ])
recentf-filter-changer-alist))))
(recentf-apply-menu-filter recentf-filter-changer-current l)))
\f
(defvar recentf-dialog-mode-map
(let ((km (copy-keymap recentf--shortcuts-keymap)))
(set-keymap-parent km widget-keymap)
- (define-key km "q" 'recentf-cancel-dialog)
- (define-key km "n" 'next-line)
- (define-key km "p" 'previous-line)
+ (define-key km "q" #'recentf-cancel-dialog)
+ (define-key km "n" #'next-line)
+ (define-key km "p" #'previous-line)
km)
"Keymap used in recentf dialogs.")
;; Cleanup buffer
(let ((inhibit-read-only t)
(ol (overlay-lists)))
- (mapc 'delete-overlay (car ol))
- (mapc 'delete-overlay (cdr ol))
+ (mapc #'delete-overlay (car ol))
+ (mapc #'delete-overlay (cdr ol))
(erase-buffer))
(recentf-dialog-mode)
,@forms
:node (item :tag ,(car menu-element)
:sample-face bold
:format "%{%t%}:\n")
- ,@(mapcar 'recentf-open-files-item
+ ,@(mapcar #'recentf-open-files-item
(cdr menu-element)))
;; Represent a single file with a link widget
`(link :tag ,(car menu-element)
(defun recentf-open-files-items (files)
"Return a list of widgets to display FILES in a dialog buffer."
(setq-local recentf--files-with-key
- (recentf-trunc-list files 10))
- (mapcar 'recentf-open-files-item
+ (seq-take files 10))
+ (mapcar #'recentf-open-files-item
(append
;; When requested group the files with shortcuts together
;; at the top of the list.
(setq files (nthcdr 10 files))
(recentf-apply-menu-filter
'recentf-show-digit-shortcut-filter
- (mapcar 'recentf-make-default-menu-element
+ (mapcar #'recentf-make-default-menu-element
recentf--files-with-key)))
;; Then the other files.
(recentf-apply-menu-filter
recentf-menu-filter
- (mapcar 'recentf-make-default-menu-element
+ (mapcar #'recentf-make-default-menu-element
files)))))
(defun recentf-open-files (&optional files buffer-name)
(format-message "Click on Cancel or type `q' to cancel.\n"))
;; Use a L&F that looks like the recentf menu.
(tree-widget-set-theme "folder")
- (apply 'widget-create
+ (apply #'widget-create
`(group
:indent 2
:format "\n%v\n"
(load-file file)
(and recentf-initialize-file-name-history
(not file-name-history)
- (setq file-name-history (mapcar 'abbreviate-file-name
+ (setq file-name-history (mapcar #'abbreviate-file-name
recentf-list))))))
(defun recentf-cleanup ()
;; continue standard unloading
nil)
+;; Obsolete.
+
+(define-obsolete-function-alias 'recentf-trunc-list #'seq-take "28.1")
+
(provide 'recentf)
(run-hooks 'recentf-load-hook)