aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Kangas2021-04-03 00:50:55 +0200
committerStefan Kangas2021-04-03 00:53:47 +0200
commit5c7766ed1072c5748776e56d6f27a6a9504648d3 (patch)
tree0d5cb8d4a9351e1c7ec1c0ebb620eb5a3021297e
parent74a86c1acf951da7451c3c8a1cd6ec277f782d41 (diff)
downloademacs-5c7766ed1072c5748776e56d6f27a6a9504648d3.tar.gz
emacs-5c7766ed1072c5748776e56d6f27a6a9504648d3.zip
Use lexical-binding in recentf.el
* lisp/recentf.el: Use lexical-binding. Doc fix. (recentf-save-file): Strength reduce 'eval' to 'symbol-value'. (recentf-trunc-list): Make into obsolete function alias for 'seq-take'. Update callers. (recentf-show-file-shortcuts-flag): Doc fix. (recentf-menu-elements, recentf-make-menu-items) (recentf-make-menu-item, recentf-dialog-mode-map) (recentf-dialog, recentf-open-files-item) (recentf-open-files-items, recentf-open-files) (recentf-load-list): Quote function symbols as such. (recentf-relative-filter, recentf-file-name-nondir): Remove redundant #' before lambda.
-rw-r--r--lisp/recentf.el108
1 files changed, 54 insertions, 54 deletions
diff --git a/lisp/recentf.el b/lisp/recentf.el
index c819397a33d..9ae059a70dd 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -1,4 +1,4 @@
1;;; recentf.el --- setup a menu of recently opened files 1;;; recentf.el --- setup a menu of recently opened files -*- lexical-binding: t -*-
2 2
3;; Copyright (C) 1999-2021 Free Software Foundation, Inc. 3;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
4 4
@@ -24,16 +24,21 @@
24;;; Commentary: 24;;; Commentary:
25 25
26;; This package maintains a menu for visiting files that were operated 26;; This package maintains a menu for visiting files that were operated
27;; on recently. When enabled a new "Open Recent" sub menu is 27;; on recently. When enabled a new "Open Recent" submenu is
28;; displayed in the "File" menu. The recent files list is 28;; displayed in the "File" menu. The recent files list is
29;; automatically saved across Emacs sessions. You can customize the 29;; automatically saved across Emacs sessions.
30;; number of recent files displayed, the location of the menu and
31;; others options (see the source code for details).
32 30
33;; To enable this package, add the following to your .emacs: 31;; You can customize the number of recent files displayed, the
34;; (recentf-mode 1) 32;; location of the menu and others options. Type:
33;;
34;; M-x customize-group RET recentf RET
35
36;; To enable this package, add this line to your Init file:
37;;
38;; (recentf-mode 1)
35 39
36;;; Code: 40;;; Code:
41
37(require 'tree-widget) 42(require 'tree-widget)
38(require 'timer) 43(require 'timer)
39 44
@@ -73,7 +78,7 @@ See the command `recentf-save-list'."
73 :type 'file 78 :type 'file
74 :initialize 'custom-initialize-default 79 :initialize 'custom-initialize-default
75 :set (lambda (symbol value) 80 :set (lambda (symbol value)
76 (let ((oldvalue (eval symbol))) 81 (let ((oldvalue (symbol-value symbol)))
77 (custom-set-default symbol value) 82 (custom-set-default symbol value)
78 (and (not (equal value oldvalue)) 83 (and (not (equal value oldvalue))
79 recentf-mode 84 recentf-mode
@@ -292,7 +297,7 @@ They are successively passed a file name to transform it."
292 (function :tag "Other function"))))) 297 (function :tag "Other function")))))
293 298
294(defcustom recentf-show-file-shortcuts-flag t 299(defcustom recentf-show-file-shortcuts-flag t
295 "Whether to show \"[N]\" for the Nth item up to 10. 300 "Non-nil means to show \"[N]\" for the Nth item up to 10.
296If non-nil, `recentf-open-files' will show labels for keys that can be 301If non-nil, `recentf-open-files' will show labels for keys that can be
297used as shortcuts to open the Nth file." 302used as shortcuts to open the Nth file."
298 :group 'recentf 303 :group 'recentf
@@ -327,15 +332,6 @@ Ignore case if `recentf-case-fold-search' is non-nil."
327 (setq list (cdr list))) 332 (setq list (cdr list)))
328 list) 333 list)
329 334
330(defsubst recentf-trunc-list (l n)
331 "Return from L the list of its first N elements."
332 (let (nl)
333 (while (and l (> n 0))
334 (setq nl (cons (car l) nl)
335 n (1- n)
336 l (cdr l)))
337 (nreverse nl)))
338
339(defun recentf-dump-variable (variable &optional limit) 335(defun recentf-dump-variable (variable &optional limit)
340 "Insert a \"(setq VARIABLE value)\" in the current buffer. 336 "Insert a \"(setq VARIABLE value)\" in the current buffer.
341When the value of VARIABLE is a list, optional argument LIMIT 337When the value of VARIABLE is a list, optional argument LIMIT
@@ -345,7 +341,7 @@ the full list."
345 (if (atom value) 341 (if (atom value)
346 (insert (format "\n(setq %S '%S)\n" variable value)) 342 (insert (format "\n(setq %S '%S)\n" variable value))
347 (when (and (integerp limit) (> limit 0)) 343 (when (and (integerp limit) (> limit 0))
348 (setq value (recentf-trunc-list value limit))) 344 (setq value (seq-take value limit)))
349 (insert (format "\n(setq %S\n '(" variable)) 345 (insert (format "\n(setq %S\n '(" variable))
350 (dolist (e value) 346 (dolist (e value)
351 (insert (format "\n %S" e))) 347 (insert (format "\n %S" e)))
@@ -516,7 +512,7 @@ filter function this variable is reset to nil.")
516 512
517(defsubst recentf-elements (n) 513(defsubst recentf-elements (n)
518 "Return a list of the first N elements of the recent list." 514 "Return a list of the first N elements of the recent list."
519 (recentf-trunc-list recentf-list n)) 515 (seq-take recentf-list n))
520 516
521(defsubst recentf-make-menu-element (menu-item menu-value) 517(defsubst recentf-make-menu-element (menu-item menu-value)
522 "Create a new menu-element. 518 "Create a new menu-element.
@@ -556,7 +552,7 @@ This a menu element (FILE . FILE)."
556(defsubst recentf-menu-elements (n) 552(defsubst recentf-menu-elements (n)
557 "Return a list of the first N default menu elements from the recent list. 553 "Return a list of the first N default menu elements from the recent list.
558See also `recentf-make-default-menu-element'." 554See also `recentf-make-default-menu-element'."
559 (mapcar 'recentf-make-default-menu-element 555 (mapcar #'recentf-make-default-menu-element
560 (recentf-elements n))) 556 (recentf-elements n)))
561 557
562(defun recentf-apply-menu-filter (filter l) 558(defun recentf-apply-menu-filter (filter l)
@@ -597,7 +593,7 @@ This is a menu filter function which ignores the MENU argument."
597 (let* ((recentf-menu-shortcuts 0) 593 (let* ((recentf-menu-shortcuts 0)
598 (file-items 594 (file-items
599 (condition-case err 595 (condition-case err
600 (mapcar 'recentf-make-menu-item 596 (mapcar #'recentf-make-menu-item
601 (recentf-apply-menu-filter 597 (recentf-apply-menu-filter
602 recentf-menu-filter 598 recentf-menu-filter
603 (recentf-menu-elements recentf-max-menu-items))) 599 (recentf-menu-elements recentf-max-menu-items)))
@@ -639,7 +635,7 @@ Return nil if file NAME is not one of the ten more recent."
639 (let ((item (recentf-menu-element-item elt)) 635 (let ((item (recentf-menu-element-item elt))
640 (value (recentf-menu-element-value elt))) 636 (value (recentf-menu-element-value elt)))
641 (if (recentf-sub-menu-element-p elt) 637 (if (recentf-sub-menu-element-p elt)
642 (cons item (mapcar 'recentf-make-menu-item value)) 638 (cons item (mapcar #'recentf-make-menu-item value))
643 (let ((k (and (< recentf-menu-shortcuts 10) 639 (let ((k (and (< recentf-menu-shortcuts 10)
644 (recentf-menu-value-shortcut value)))) 640 (recentf-menu-value-shortcut value))))
645 (vector item 641 (vector item
@@ -764,12 +760,12 @@ This filter combines the `recentf-sort-basenames-descending' and
764(defun recentf-relative-filter (l) 760(defun recentf-relative-filter (l)
765 "Filter the list of menu-elements L to show relative filenames. 761 "Filter the list of menu-elements L to show relative filenames.
766Filenames are relative to the `default-directory'." 762Filenames are relative to the `default-directory'."
767 (mapcar #'(lambda (menu-element) 763 (mapcar (lambda (menu-element)
768 (let* ((ful (recentf-menu-element-value menu-element)) 764 (let* ((ful (recentf-menu-element-value menu-element))
769 (rel (file-relative-name ful default-directory))) 765 (rel (file-relative-name ful default-directory)))
770 (if (string-match "^\\.\\." rel) 766 (if (string-match "^\\.\\." rel)
771 menu-element 767 menu-element
772 (recentf-make-menu-element rel ful)))) 768 (recentf-make-menu-element rel ful))))
773 l)) 769 l))
774 770
775;;; Rule based menu filters 771;;; Rule based menu filters
@@ -941,10 +937,10 @@ Rules obey `recentf-arrange-rules' format."
941This simplified version of `recentf-show-basenames' does not handle 937This simplified version of `recentf-show-basenames' does not handle
942duplicates. It is used by `recentf-arrange-by-dir' as its 938duplicates. It is used by `recentf-arrange-by-dir' as its
943`recentf-arrange-by-rule-subfilter'." 939`recentf-arrange-by-rule-subfilter'."
944 (mapcar #'(lambda (e) 940 (mapcar (lambda (e)
945 (recentf-make-menu-element 941 (recentf-make-menu-element
946 (file-name-nondirectory (recentf-menu-element-value e)) 942 (file-name-nondirectory (recentf-menu-element-value e))
947 (recentf-menu-element-value e))) 943 (recentf-menu-element-value e)))
948 l)) 944 l))
949 945
950(defun recentf-dir-rule (file) 946(defun recentf-dir-rule (file)
@@ -997,15 +993,15 @@ Filtering of L is delegated to the selected filter in the menu."
997 (list 993 (list
998 `("Show files" 994 `("Show files"
999 ,@(mapcar 995 ,@(mapcar
1000 #'(lambda (f) 996 (lambda (f)
1001 `[,(cdr f) 997 `[,(cdr f)
1002 (setq recentf-filter-changer-current ',(car f)) 998 (setq recentf-filter-changer-current ',(car f))
1003 ;;:active t 999 ;;:active t
1004 :style radio ;;radio Don't work with GTK :-( 1000 :style radio ;;radio Don't work with GTK :-(
1005 :selected (eq recentf-filter-changer-current 1001 :selected (eq recentf-filter-changer-current
1006 ',(car f)) 1002 ',(car f))
1007 ;;:help ,(cdr f) 1003 ;;:help ,(cdr f)
1008 ]) 1004 ])
1009 recentf-filter-changer-alist)))) 1005 recentf-filter-changer-alist))))
1010 (recentf-apply-menu-filter recentf-filter-changer-current l))) 1006 (recentf-apply-menu-filter recentf-filter-changer-current l)))
1011 1007
@@ -1062,9 +1058,9 @@ Go to the beginning of buffer if not found."
1062(defvar recentf-dialog-mode-map 1058(defvar recentf-dialog-mode-map
1063 (let ((km (copy-keymap recentf--shortcuts-keymap))) 1059 (let ((km (copy-keymap recentf--shortcuts-keymap)))
1064 (set-keymap-parent km widget-keymap) 1060 (set-keymap-parent km widget-keymap)
1065 (define-key km "q" 'recentf-cancel-dialog) 1061 (define-key km "q" #'recentf-cancel-dialog)
1066 (define-key km "n" 'next-line) 1062 (define-key km "n" #'next-line)
1067 (define-key km "p" 'previous-line) 1063 (define-key km "p" #'previous-line)
1068 km) 1064 km)
1069 "Keymap used in recentf dialogs.") 1065 "Keymap used in recentf dialogs.")
1070 1066
@@ -1083,8 +1079,8 @@ Go to the beginning of buffer if not found."
1083 ;; Cleanup buffer 1079 ;; Cleanup buffer
1084 (let ((inhibit-read-only t) 1080 (let ((inhibit-read-only t)
1085 (ol (overlay-lists))) 1081 (ol (overlay-lists)))
1086 (mapc 'delete-overlay (car ol)) 1082 (mapc #'delete-overlay (car ol))
1087 (mapc 'delete-overlay (cdr ol)) 1083 (mapc #'delete-overlay (cdr ol))
1088 (erase-buffer)) 1084 (erase-buffer))
1089 (recentf-dialog-mode) 1085 (recentf-dialog-mode)
1090 ,@forms 1086 ,@forms
@@ -1178,7 +1174,7 @@ IGNORE other arguments."
1178 :node (item :tag ,(car menu-element) 1174 :node (item :tag ,(car menu-element)
1179 :sample-face bold 1175 :sample-face bold
1180 :format "%{%t%}:\n") 1176 :format "%{%t%}:\n")
1181 ,@(mapcar 'recentf-open-files-item 1177 ,@(mapcar #'recentf-open-files-item
1182 (cdr menu-element))) 1178 (cdr menu-element)))
1183 ;; Represent a single file with a link widget 1179 ;; Represent a single file with a link widget
1184 `(link :tag ,(car menu-element) 1180 `(link :tag ,(car menu-element)
@@ -1193,8 +1189,8 @@ IGNORE other arguments."
1193(defun recentf-open-files-items (files) 1189(defun recentf-open-files-items (files)
1194 "Return a list of widgets to display FILES in a dialog buffer." 1190 "Return a list of widgets to display FILES in a dialog buffer."
1195 (setq-local recentf--files-with-key 1191 (setq-local recentf--files-with-key
1196 (recentf-trunc-list files 10)) 1192 (seq-take files 10))
1197 (mapcar 'recentf-open-files-item 1193 (mapcar #'recentf-open-files-item
1198 (append 1194 (append
1199 ;; When requested group the files with shortcuts together 1195 ;; When requested group the files with shortcuts together
1200 ;; at the top of the list. 1196 ;; at the top of the list.
@@ -1202,12 +1198,12 @@ IGNORE other arguments."
1202 (setq files (nthcdr 10 files)) 1198 (setq files (nthcdr 10 files))
1203 (recentf-apply-menu-filter 1199 (recentf-apply-menu-filter
1204 'recentf-show-digit-shortcut-filter 1200 'recentf-show-digit-shortcut-filter
1205 (mapcar 'recentf-make-default-menu-element 1201 (mapcar #'recentf-make-default-menu-element
1206 recentf--files-with-key))) 1202 recentf--files-with-key)))
1207 ;; Then the other files. 1203 ;; Then the other files.
1208 (recentf-apply-menu-filter 1204 (recentf-apply-menu-filter
1209 recentf-menu-filter 1205 recentf-menu-filter
1210 (mapcar 'recentf-make-default-menu-element 1206 (mapcar #'recentf-make-default-menu-element
1211 files))))) 1207 files)))))
1212 1208
1213(defun recentf-open-files (&optional files buffer-name) 1209(defun recentf-open-files (&optional files buffer-name)
@@ -1228,7 +1224,7 @@ use for the dialog. It defaults to \"*`recentf-menu-title'*\"."
1228 (format-message "Click on Cancel or type `q' to cancel.\n")) 1224 (format-message "Click on Cancel or type `q' to cancel.\n"))
1229 ;; Use a L&F that looks like the recentf menu. 1225 ;; Use a L&F that looks like the recentf menu.
1230 (tree-widget-set-theme "folder") 1226 (tree-widget-set-theme "folder")
1231 (apply 'widget-create 1227 (apply #'widget-create
1232 `(group 1228 `(group
1233 :indent 2 1229 :indent 2
1234 :format "\n%v\n" 1230 :format "\n%v\n"
@@ -1310,7 +1306,7 @@ empty `file-name-history' with the recent list."
1310 (load-file file) 1306 (load-file file)
1311 (and recentf-initialize-file-name-history 1307 (and recentf-initialize-file-name-history
1312 (not file-name-history) 1308 (not file-name-history)
1313 (setq file-name-history (mapcar 'abbreviate-file-name 1309 (setq file-name-history (mapcar #'abbreviate-file-name
1314 recentf-list)))))) 1310 recentf-list))))))
1315 1311
1316(defun recentf-cleanup () 1312(defun recentf-cleanup ()
@@ -1377,6 +1373,10 @@ buffers you switch to a lot, you can say something like the following:
1377 ;; continue standard unloading 1373 ;; continue standard unloading
1378 nil) 1374 nil)
1379 1375
1376;; Obsolete.
1377
1378(define-obsolete-function-alias 'recentf-trunc-list #'seq-take "28.1")
1379
1380(provide 'recentf) 1380(provide 'recentf)
1381 1381
1382(run-hooks 'recentf-load-hook) 1382(run-hooks 'recentf-load-hook)