Mercurial > emacs
annotate lisp/recentf.el @ 72550:666bd542be19
(get_window_cursor_type): Replace BOX cursor on images
with a hollow box cursor if image is larger than 32x32 (or the default
frame font if that is bigger). Replace any other cursor on images
with hollow box cursor, as redisplay doesn't support bar and hbar
cursors on images.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sun, 27 Aug 2006 22:23:07 +0000 |
parents | 6828bafcac8e |
children | d14b0d59315b 81f2d90dee68 65ca8fb66a0d |
rev | line source |
---|---|
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
35971
diff
changeset
|
1 ;;; recentf.el --- setup a menu of recently opened files |
30416 | 2 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64664
diff
changeset
|
3 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, |
68651
3bd95f4f2941
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
67589
diff
changeset
|
4 ;; 2005, 2006 Free Software Foundation, Inc. |
30416 | 5 |
6 ;; Author: David Ponce <david@dponce.com> | |
7 ;; Created: July 19 1999 | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
8 ;; Keywords: files |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
9 |
30416 | 10 ;; This file is part of GNU Emacs. |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
14 ;; by the Free Software Foundation; either version 2, or (at your |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
15 ;; option) any later version. |
30416 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
64091 | 24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
25 ;; Boston, MA 02110-1301, USA. | |
30416 | 26 |
27 ;;; Commentary: | |
28 | |
29 ;; This package maintains a menu for visiting files that were operated | |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
30 ;; on recently. When enabled a new "Open Recent" sub menu is |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
31 ;; displayed in the "Files" menu. The recent files list is |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
32 ;; automatically saved across Emacs sessions. You can customize the |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
33 ;; number of recent files displayed, the location of the menu and |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
34 ;; others options (see the source code for details). |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
35 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
36 ;;; History: |
30416 | 37 ;; |
38 | |
39 ;;; Code: | |
40 (require 'easymenu) | |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
41 (require 'tree-widget) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
42 (require 'timer) |
30416 | 43 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
44 ;;; Internal data |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
45 ;; |
30416 | 46 (defvar recentf-list nil |
47 "List of recently opened files.") | |
48 | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
49 (defsubst recentf-enabled-p () |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
50 "Return non-nil if recentf mode is currently enabled." |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
51 (memq 'recentf-save-list kill-emacs-hook)) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
52 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
53 ;;; Customization |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
54 ;; |
30416 | 55 (defgroup recentf nil |
56 "Maintain a menu of recently opened files." | |
57 :version "21.1" | |
58 :group 'files) | |
59 | |
60 (defgroup recentf-filters nil | |
61 "Group to customize recentf menu filters. | |
62 You should define the options of your own filters in this group." | |
63 :group 'recentf) | |
64 | |
65 (defcustom recentf-max-saved-items 20 | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
66 "*Maximum number of items of the recent list that will be saved. |
64664
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
67 A nil value means to save the whole list. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
68 See the command `recentf-save-list'." |
30416 | 69 :group 'recentf |
70 :type 'integer) | |
71 | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
72 (defcustom recentf-save-file "~/.recentf" |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
73 "*File to save the recent list into." |
30416 | 74 :group 'recentf |
75 :type 'file) | |
76 | |
65525
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
77 (defcustom recentf-save-file-modes 384 ;; 0600 |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
78 "Mode bits of recentf save file, as an integer, or nil. |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
79 If non-nil, after writing `recentf-save-file', set its mode bits to |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
80 this value. By default give R/W access only to the user who owns that |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
81 file. See also the function `set-file-modes'." |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
82 :group 'recentf |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
83 :type '(choice (const :tag "Don't change" nil) |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
84 integer)) |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
85 |
30416 | 86 (defcustom recentf-exclude nil |
62916 | 87 "*List of regexps and predicates for filenames excluded from the recent list. |
52509
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
88 When a filename matches any of the regexps or satisfies any of the |
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
89 predicates it is excluded from the recent list. |
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
90 A predicate is a function that is passed a filename to check and that |
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
91 must return non-nil to exclude it." |
30416 | 92 :group 'recentf |
52509
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
93 :type '(repeat (choice regexp function))) |
30416 | 94 |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
95 (defcustom recentf-keep |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
96 '(file-readable-p) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
97 "*List of regexps and predicates for filenames kept in the recent list. |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
98 Regexps and predicates are tried in the specified order. |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
99 When nil all filenames are kept in the recent list. |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
100 When a filename matches any of the regexps or satisfies any of the |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
101 predicates it is kept in the recent list. |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
102 The default is to keep readable files. |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
103 A predicate is a function that is passed a filename to check and that |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
104 must return non-nil to keep it. For example, you can add the |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
105 `file-remote-p' predicate in front of this list to keep remote file |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
106 names in the recent list without checking their readability through a |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
107 remote access." |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
108 :group 'recentf |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
109 :type '(repeat (choice regexp function))) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
110 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
111 (defun recentf-menu-customization-changed (variable value) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
112 "Function called when the recentf menu customization has changed. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
113 Set VARIABLE with VALUE, and force a rebuild of the recentf menu." |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
114 (if (and (featurep 'recentf) (recentf-enabled-p)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
115 (progn |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
116 ;; Unavailable until recentf has been loaded. |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
117 (recentf-hide-menu) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
118 (set-default variable value) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
119 (recentf-show-menu)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
120 (set-default variable value))) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
121 |
30416 | 122 (defcustom recentf-menu-title "Open Recent" |
123 "*Name of the recentf menu." | |
124 :group 'recentf | |
125 :type 'string | |
126 :set 'recentf-menu-customization-changed) | |
127 | |
57993
8e7d8d382255
(recentf-menu-path): Use menu item name.
David Ponce <david@dponce.com>
parents:
57451
diff
changeset
|
128 (defcustom recentf-menu-path '("File") |
30416 | 129 "*Path where to add the recentf menu. |
52468
de4ce9c67474
Ensure that recentf correctly update the menu bar:
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
130 If nil add it at top level (see also `easy-menu-add-item')." |
30416 | 131 :group 'recentf |
132 :type '(choice (const :tag "Top Level" nil) | |
133 (sexp :tag "Menu Path")) | |
134 :set 'recentf-menu-customization-changed) | |
135 | |
44915
ea21866100eb
(recentf-menu-before): Use string to specify path in the menu.
Pavel Janík <Pavel@Janik.cz>
parents:
42205
diff
changeset
|
136 (defcustom recentf-menu-before "Open File..." |
30416 | 137 "*Name of the menu before which the recentf menu will be added. |
52468
de4ce9c67474
Ensure that recentf correctly update the menu bar:
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
138 If nil add it at end of menu (see also `easy-menu-add-item')." |
30416 | 139 :group 'recentf |
140 :type '(choice (string :tag "Name") | |
141 (const :tag "Last" nil)) | |
142 :set 'recentf-menu-customization-changed) | |
143 | |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
144 (defcustom recentf-menu-action 'find-file |
30416 | 145 "*Function to invoke with a filename item of the recentf menu. |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
146 The default is to call `find-file' to edit the selected file." |
30416 | 147 :group 'recentf |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
148 :type 'function) |
30416 | 149 |
150 (defcustom recentf-max-menu-items 10 | |
151 "*Maximum number of items in the recentf menu." | |
152 :group 'recentf | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
153 :type 'integer) |
30416 | 154 |
155 (defcustom recentf-menu-filter nil | |
156 "*Function used to filter files displayed in the recentf menu. | |
64664
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
157 A nil value means no filter. The following functions are predefined: |
30416 | 158 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
159 - `recentf-sort-ascending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
160 Sort menu items in ascending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
161 - `recentf-sort-descending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
162 Sort menu items in descending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
163 - `recentf-sort-basenames-ascending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
164 Sort menu items by filenames sans directory in ascending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
165 - `recentf-sort-basenames-descending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
166 Sort menu items by filenames sans directory in descending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
167 - `recentf-sort-directories-ascending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
168 Sort menu items by directories in ascending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
169 - `recentf-sort-directories-descending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
170 Sort menu items by directories in descending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
171 - `recentf-show-basenames' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
172 Show filenames sans directory in menu items. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
173 - `recentf-show-basenames-ascending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
174 Show filenames sans directory in ascending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
175 - `recentf-show-basenames-descending' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
176 Show filenames sans directory in descending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
177 - `recentf-relative-filter' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
178 Show filenames relative to `default-directory'. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
179 - `recentf-arrange-by-rule' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
180 Show sub-menus following user defined rules. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
181 - `recentf-arrange-by-mode' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
182 Show a sub-menu for each major mode. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
183 - `recentf-arrange-by-dir' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
184 Show a sub-menu for each directory. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
185 - `recentf-filter-changer' |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
186 Manage a menu of filters. |
30416 | 187 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
188 The filter function is called with one argument, the list of menu |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
189 elements used to build the menu and must return a new list of menu |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
190 elements (see `recentf-make-menu-element' for menu element form)." |
30416 | 191 :group 'recentf |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
44967
diff
changeset
|
192 :type '(radio (const nil) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
193 (function-item recentf-sort-ascending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
194 (function-item recentf-sort-descending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
195 (function-item recentf-sort-basenames-ascending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
196 (function-item recentf-sort-basenames-descending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
197 (function-item recentf-sort-directories-ascending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
198 (function-item recentf-sort-directories-descending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
199 (function-item recentf-show-basenames) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
200 (function-item recentf-show-basenames-ascending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
201 (function-item recentf-show-basenames-descending) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
202 (function-item recentf-relative-filter) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
203 (function-item recentf-arrange-by-rule) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
204 (function-item recentf-arrange-by-mode) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
205 (function-item recentf-arrange-by-dir) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
206 (function-item recentf-filter-changer) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
207 function)) |
30416 | 208 |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
209 (defcustom recentf-menu-open-all-flag nil |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
210 "*Non-nil means to show an \"All...\" item in the menu. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
211 This item will replace the \"More...\" item." |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
212 :group 'recentf |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
213 :type 'boolean) |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
214 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
215 (defcustom recentf-menu-append-commands-flag t |
64664
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
216 "*Non-nil means to append command items to the menu." |
30416 | 217 :group 'recentf |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
218 :type 'boolean) |
30416 | 219 |
64664
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
220 (define-obsolete-variable-alias 'recentf-menu-append-commands-p |
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
221 'recentf-menu-append-commands-flag |
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
222 "22.1") |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
223 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
224 (defcustom recentf-auto-cleanup 'mode |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
225 "*Define when to automatically cleanup the recent list. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
226 The following values can be set: |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
227 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
228 - `mode' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
229 Cleanup when turning the mode on (default). |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
230 - `never' |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
231 Never cleanup the list automatically. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
232 - A number |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
233 Cleanup each time Emacs has been idle that number of seconds. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
234 - A time string |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
235 Cleanup at specified time string, for example at \"11:00pm\". |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
236 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
237 Setting this variable directly does not take effect; |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
238 use \\[customize]. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
239 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
240 See also the command `recentf-cleanup', that can be used to manually |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
241 cleanup the list." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
242 :group 'recentf |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
243 :type '(radio (const :tag "When mode enabled" |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
244 :value mode) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
245 (const :tag "Never" |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
246 :value never) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
247 (number :tag "When idle that seconds" |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
248 :value 300) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
249 (string :tag "At time" |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
250 :value "11:00pm")) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
251 :set (lambda (variable value) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
252 (set-default variable value) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
253 (when (featurep 'recentf) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
254 ;; Unavailable until recentf has been loaded. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
255 (recentf-auto-cleanup)))) |
30416 | 256 |
52638
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
257 (defcustom recentf-initialize-file-name-history t |
64664
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
258 "*Non-nil means to initialize `file-name-history' with the recent list. |
52638
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
259 If `file-name-history' is not empty, do nothing." |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
260 :group 'recentf |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
261 :type 'boolean) |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
262 |
30416 | 263 (defcustom recentf-load-hook nil |
264 "*Normal hook run at end of loading the `recentf' package." | |
265 :group 'recentf | |
266 :type 'hook) | |
267 | |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
268 (defcustom recentf-filename-handlers nil |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
269 "Functions to post process recent file names. |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
270 They are successively passed a file name to transform it." |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
271 :group 'recentf |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
272 :type '(choice |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
273 (const :tag "None" nil) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
274 (repeat :tag "Functions" |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
275 (choice |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
276 (const file-truename) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
277 (const abbreviate-file-name) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
278 (function :tag "Other function"))))) |
65365
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
279 |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
280 (defcustom recentf-show-file-shortcuts-flag t |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
281 "Whether to show ``[N]'' for the Nth item up to 10. |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
282 If non-nil, `recentf-open-files' will show labels for keys that can be |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
283 used as shortcuts to open the Nth file." |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
284 :group 'recentf |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
285 :type 'boolean) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
286 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
287 ;;; Utilities |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
288 ;; |
30416 | 289 (defconst recentf-case-fold-search |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
44967
diff
changeset
|
290 (memq system-type '(vax-vms windows-nt cygwin)) |
30416 | 291 "Non-nil if recentf searches and matches should ignore case.") |
292 | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
293 (defsubst recentf-string-equal (s1 s2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
294 "Return non-nil if strings S1 and S2 have identical contents. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
295 Ignore case if `recentf-case-fold-search' is non-nil." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
296 (if recentf-case-fold-search |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
297 (string-equal (downcase s1) (downcase s2)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
298 (string-equal s1 s2))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
299 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
300 (defsubst recentf-string-lessp (s1 s2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
301 "Return non-nil if string S1 is less than S2 in lexicographic order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
302 Ignore case if `recentf-case-fold-search' is non-nil." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
303 (if recentf-case-fold-search |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
304 (string-lessp (downcase s1) (downcase s2)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
305 (string-lessp s1 s2))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
306 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
307 (defun recentf-string-member (elt list) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
308 "Return non-nil if ELT is an element of LIST. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
309 The value is actually the tail of LIST whose car is ELT. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
310 ELT must be a string and LIST a list of strings. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
311 Ignore case if `recentf-case-fold-search' is non-nil." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
312 (while (and list (not (recentf-string-equal elt (car list)))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
313 (setq list (cdr list))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
314 list) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
315 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
316 (defsubst recentf-trunc-list (l n) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
317 "Return from L the list of its first N elements." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
318 (let (nl) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
319 (while (and l (> n 0)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
320 (setq nl (cons (car l) nl) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
321 n (1- n) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
322 l (cdr l))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
323 (nreverse nl))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
324 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
325 (defun recentf-dump-variable (variable &optional limit) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
326 "Insert a \"(setq VARIABLE value)\" in the current buffer. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
327 When the value of VARIABLE is a list, optional argument LIMIT |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
328 specifies a maximum number of elements to insert. By default insert |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
329 the full list." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
330 (let ((value (symbol-value variable))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
331 (if (atom value) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
332 (insert (format "\n(setq %S '%S)\n" variable value)) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
333 (when (and (integerp limit) (> limit 0)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
334 (setq value (recentf-trunc-list value limit))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
335 (insert (format "\n(setq %S\n '(" variable)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
336 (dolist (e value) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
337 (insert (format "\n %S" e))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
338 (insert "\n ))\n")))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
339 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
340 (defvar recentf-auto-cleanup-timer nil |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
341 "Timer used to automatically cleanup the recent list. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
342 See also the option `recentf-auto-cleanup'.") |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
343 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
344 (defun recentf-auto-cleanup () |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
345 "Automatic cleanup of the recent list." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
346 (when (timerp recentf-auto-cleanup-timer) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
347 (cancel-timer recentf-auto-cleanup-timer)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
348 (when recentf-mode |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
349 (setq recentf-auto-cleanup-timer |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
350 (cond |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
351 ((eq 'mode recentf-auto-cleanup) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
352 (recentf-cleanup) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
353 nil) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
354 ((numberp recentf-auto-cleanup) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
355 (run-with-idle-timer |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
356 recentf-auto-cleanup t 'recentf-cleanup)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
357 ((stringp recentf-auto-cleanup) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
358 (run-at-time |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
359 recentf-auto-cleanup nil 'recentf-cleanup)))))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
360 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
361 ;;; File functions |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
362 ;; |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
363 (defsubst recentf-push (filename) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
364 "Push FILENAME into the recent list, if it isn't there yet. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
365 If it is there yet, move it at the beginning of the list. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
366 If `recentf-case-fold-search' is non-nil, ignore case when comparing |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
367 filenames." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
368 (let ((m (recentf-string-member filename recentf-list))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
369 (and m (setq recentf-list (delq (car m) recentf-list))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
370 (push filename recentf-list))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
371 |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
372 (defun recentf-apply-filename-handlers (name) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
373 "Apply `recentf-filename-handlers' to file NAME. |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
374 Return the transformed file name, or NAME if any handler failed, or |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
375 returned nil." |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
376 (or (condition-case nil |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
377 (let ((handlers recentf-filename-handlers) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
378 (filename name)) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
379 (while (and filename handlers) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
380 (setq filename (funcall (car handlers) filename) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
381 handlers (cdr handlers))) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
382 filename) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
383 (error nil)) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
384 name)) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
385 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
386 (defsubst recentf-expand-file-name (name) |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
387 "Convert file NAME to absolute, and canonicalize it. |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
388 NAME is first passed to the function `expand-file-name', then to |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
389 `recentf-filename-handlers' to post process it." |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
390 (recentf-apply-filename-handlers (expand-file-name name))) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
391 |
30416 | 392 (defun recentf-include-p (filename) |
52509
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
393 "Return non-nil if FILENAME should be included in the recent list. |
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
394 That is, if it doesn't match any of the `recentf-exclude' checks." |
30416 | 395 (let ((case-fold-search recentf-case-fold-search) |
52509
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
396 (checks recentf-exclude) |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
397 (keepit t)) |
52509
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
398 (while (and checks keepit) |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
399 (setq keepit (condition-case nil |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
400 (not (if (stringp (car checks)) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
401 ;; A regexp |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
402 (string-match (car checks) filename) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
403 ;; A predicate |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
404 (funcall (car checks) filename))) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
405 (error nil)) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
406 checks (cdr checks))) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
407 keepit)) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
408 |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
409 (defun recentf-keep-p (filename) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
410 "Return non-nil if FILENAME should be kept in the recent list. |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
411 That is, if it matches any of the `recentf-keep' checks." |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
412 (let* ((case-fold-search recentf-case-fold-search) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
413 (checks recentf-keep) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
414 (keepit (null checks))) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
415 (while (and checks (not keepit)) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
416 (setq keepit (condition-case nil |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
417 (if (stringp (car checks)) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
418 ;; A regexp |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
419 (string-match (car checks) filename) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
420 ;; A predicate |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
421 (funcall (car checks) filename)) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
422 (error nil)) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
423 checks (cdr checks))) |
52509
5308684cd360
David Ponce <david@dponce.com>
Glenn Morris <rgm@gnu.org>
parents:
52468
diff
changeset
|
424 keepit)) |
30416 | 425 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
426 (defsubst recentf-add-file (filename) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
427 "Add or move FILENAME at the beginning of the recent list. |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
428 Does nothing if the name satisfies any of the `recentf-exclude' |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
429 regexps or predicates." |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
430 (setq filename (recentf-expand-file-name filename)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
431 (when (recentf-include-p filename) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
432 (recentf-push filename))) |
30416 | 433 |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
434 (defsubst recentf-remove-if-non-kept (filename) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
435 "Remove FILENAME from the recent list, if file is not kept. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
436 Return non-nil if FILENAME has been removed." |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
437 (unless (recentf-keep-p filename) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
438 (let ((m (recentf-string-member |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
439 (recentf-expand-file-name filename) recentf-list))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
440 (and m (setq recentf-list (delq (car m) recentf-list)))))) |
30416 | 441 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
442 (defsubst recentf-directory-compare (f1 f2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
443 "Compare absolute filenames F1 and F2. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
444 First compare directories, then filenames sans directory. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
445 Return non-nil if F1 is less than F2." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
446 (let ((d1 (file-name-directory f1)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
447 (d2 (file-name-directory f2))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
448 (if (recentf-string-equal d1 d2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
449 (recentf-string-lessp (file-name-nondirectory f1) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
450 (file-name-nondirectory f2)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
451 (recentf-string-lessp d1 d2)))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
452 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
453 ;;; Menu building |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
454 ;; |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
455 (defsubst recentf-digit-shortcut-command-name (n) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
456 "Return a command name to open the Nth most recent file. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
457 See also the command `recentf-open-most-recent-file'." |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
458 (intern (format "recentf-open-most-recent-file-%d" n))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
459 |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
460 (defvar recentf--shortcuts-keymap |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
461 (let ((km (make-sparse-keymap))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
462 (dolist (k '(0 9 8 7 6 5 4 3 2 1)) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
463 (let ((cmd (recentf-digit-shortcut-command-name k))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
464 ;; Define a shortcut command. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
465 (defalias cmd |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
466 `(lambda () |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
467 (interactive) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
468 (recentf-open-most-recent-file ,k))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
469 ;; Bind it to a digit key. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
470 (define-key km (vector (+ k ?0)) cmd))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
471 km) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
472 "Digit shortcuts keymap.") |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
473 |
30416 | 474 (defvar recentf-menu-items-for-commands |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
475 (list |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
476 ["Cleanup list" |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
477 recentf-cleanup |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
478 :help "Remove duplicates, and obsoletes files from the recent list" |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
479 :active t] |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
480 ["Edit list..." |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
481 recentf-edit-list |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
482 :help "Manually remove files from the recent list" |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
483 :active t] |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
484 ["Save list now" |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
485 recentf-save-list |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
486 :help "Save the list of recently opened files now" |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
487 :active t] |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
488 ["Options..." |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
489 (customize-group "recentf") |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
490 :help "Customize recently opened files menu and options" |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
491 :active t] |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
492 ) |
30416 | 493 "List of menu items for recentf commands.") |
494 | |
495 (defvar recentf-menu-filter-commands nil | |
496 "This variable can be used by menu filters to setup their own command menu. | |
497 If non-nil it must contain a list of valid menu-items to be appended | |
498 to the recent file list part of the menu. Before calling a menu | |
499 filter function this variable is reset to nil.") | |
500 | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
501 (defsubst recentf-elements (n) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
502 "Return a list of the first N elements of the recent list." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
503 (recentf-trunc-list recentf-list n)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
504 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
505 (defsubst recentf-make-menu-element (menu-item menu-value) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
506 "Create a new menu-element. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
507 A menu element is a pair (MENU-ITEM . MENU-VALUE), where MENU-ITEM is |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
508 the menu item string displayed. MENU-VALUE is the file to be open |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
509 when the corresponding MENU-ITEM is selected. Or it is a |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
510 pair (SUB-MENU-TITLE . MENU-ELEMENTS) where SUB-MENU-TITLE is a |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
511 sub-menu title and MENU-ELEMENTS is the list of menu elements in the |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
512 sub-menu." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
513 (cons menu-item menu-value)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
514 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
515 (defsubst recentf-menu-element-item (e) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
516 "Return the item part of the menu-element E." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
517 (car e)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
518 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
519 (defsubst recentf-menu-element-value (e) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
520 "Return the value part of the menu-element E." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
521 (cdr e)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
522 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
523 (defsubst recentf-set-menu-element-item (e item) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
524 "Change the item part of menu-element E to ITEM." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
525 (setcar e item)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
526 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
527 (defsubst recentf-set-menu-element-value (e value) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
528 "Change the value part of menu-element E to VALUE." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
529 (setcdr e value)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
530 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
531 (defsubst recentf-sub-menu-element-p (e) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
532 "Return non-nil if menu-element E defines a sub-menu." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
533 (consp (recentf-menu-element-value e))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
534 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
535 (defsubst recentf-make-default-menu-element (file) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
536 "Make a new default menu element with FILE. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
537 This a menu element (FILE . FILE)." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
538 (recentf-make-menu-element file file)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
539 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
540 (defsubst recentf-menu-elements (n) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
541 "Return a list of the first N default menu elements from the recent list. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
542 See also `recentf-make-default-menu-element'." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
543 (mapcar 'recentf-make-default-menu-element |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
544 (recentf-elements n))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
545 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
546 (defun recentf-apply-menu-filter (filter l) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
547 "Apply function FILTER to the list of menu-elements L. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
548 It takes care of sub-menu elements in L and recursively apply FILTER |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
549 to them. It is guaranteed that FILTER receives only a list of single |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
550 menu-elements (no sub-menu)." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
551 (if (and l (functionp filter)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
552 (let ((case-fold-search recentf-case-fold-search) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
553 elts others) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
554 ;; split L into two sub-listes, one of sub-menus elements and |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
555 ;; another of single menu elements. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
556 (dolist (elt l) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
557 (if (recentf-sub-menu-element-p elt) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
558 (push elt elts) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
559 (push elt others))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
560 ;; Apply FILTER to single elements. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
561 (when others |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
562 (setq others (funcall filter (nreverse others)))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
563 ;; Apply FILTER to sub-menu elements. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
564 (setq l nil) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
565 (dolist (elt elts) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
566 (recentf-set-menu-element-value |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
567 elt (recentf-apply-menu-filter |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
568 filter (recentf-menu-element-value elt))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
569 (push elt l)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
570 ;; Return the new filtered menu element list. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
571 (nconc l others)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
572 l)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
573 |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
574 ;; Count the number of assigned menu shortcuts. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
575 (defvar recentf-menu-shortcuts) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
576 |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
577 (defun recentf-make-menu-items (&optional menu) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
578 "Make menu items from the recent list. |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
579 This is a menu filter function which ignores the MENU argument." |
30416 | 580 (setq recentf-menu-filter-commands nil) |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
581 (let* ((recentf-menu-shortcuts 0) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
582 (file-items |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
583 (condition-case err |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
584 (mapcar 'recentf-make-menu-item |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
585 (recentf-apply-menu-filter |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
586 recentf-menu-filter |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
587 (recentf-menu-elements recentf-max-menu-items))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
588 (error |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
589 (message "recentf update menu failed: %s" |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
590 (error-message-string err)))))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
591 (append |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
592 (or file-items |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
593 '(["No files" t |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
594 :help "No recent file to open" |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
595 :active nil])) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
596 (if recentf-menu-open-all-flag |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
597 '(["All..." recentf-open-files |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
598 :help "Open recent files through a dialog" |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
599 :active t]) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
600 (and (< recentf-max-menu-items (length recentf-list)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
601 '(["More..." recentf-open-more-files |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
602 :help "Open files not in the menu through a dialog" |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
603 :active t]))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
604 (and recentf-menu-filter-commands '("---")) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
605 recentf-menu-filter-commands |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
606 (and recentf-menu-items-for-commands '("---")) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
607 recentf-menu-items-for-commands))) |
30416 | 608 |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
609 (defun recentf-menu-value-shortcut (name) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
610 "Return a shortcut digit for file NAME. |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
611 Return nil if file NAME is not one of the ten more recent." |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
612 (let ((i 0) k) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
613 (while (and (not k) (< i 10)) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
614 (if (string-equal name (nth i recentf-list)) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
615 (progn |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
616 (setq recentf-menu-shortcuts (1+ recentf-menu-shortcuts)) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
617 (setq k (% (1+ i) 10))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
618 (setq i (1+ i)))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
619 k)) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
620 |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
621 (defun recentf-make-menu-item (elt) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
622 "Make a menu item from menu element ELT." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
623 (let ((item (recentf-menu-element-item elt)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
624 (value (recentf-menu-element-value elt))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
625 (if (recentf-sub-menu-element-p elt) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
626 (cons item (mapcar 'recentf-make-menu-item value)) |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
627 (let ((k (and (< recentf-menu-shortcuts 10) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
628 (recentf-menu-value-shortcut value)))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
629 (vector item |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
630 ;; If the file name is one of the ten more recent, use |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
631 ;; a digit shortcut command to open it, else use an |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
632 ;; anonymous command. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
633 (if k |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
634 (recentf-digit-shortcut-command-name k) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
635 `(lambda () |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
636 (interactive) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
637 (,recentf-menu-action ,value))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
638 :help (concat "Open " value) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
639 :active t))))) |
30416 | 640 |
52468
de4ce9c67474
Ensure that recentf correctly update the menu bar:
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
641 (defsubst recentf-menu-bar () |
de4ce9c67474
Ensure that recentf correctly update the menu bar:
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
642 "Return the keymap of the global menu bar." |
de4ce9c67474
Ensure that recentf correctly update the menu bar:
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
643 (lookup-key global-map [menu-bar])) |
de4ce9c67474
Ensure that recentf correctly update the menu bar:
Eli Zaretskii <eliz@gnu.org>
parents:
52401
diff
changeset
|
644 |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
645 (defun recentf-show-menu () |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
646 "Show the menu of recently opened files." |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
647 (easy-menu-add-item |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
648 (recentf-menu-bar) recentf-menu-path |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
649 (list recentf-menu-title :filter 'recentf-make-menu-items) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
650 recentf-menu-before)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
651 |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
652 (defun recentf-hide-menu () |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
653 "Hide the menu of recently opened files." |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
654 (easy-menu-remove-item (recentf-menu-bar) recentf-menu-path |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
655 recentf-menu-title)) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
656 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
657 ;;; Predefined menu filters |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
658 ;; |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
659 (defsubst recentf-sort-ascending (l) |
30416 | 660 "Sort the list of menu elements L in ascending order. |
661 The MENU-ITEM part of each menu element is compared." | |
662 (sort (copy-sequence l) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
663 #'(lambda (e1 e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
664 (recentf-string-lessp |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
665 (recentf-menu-element-item e1) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
666 (recentf-menu-element-item e2))))) |
30416 | 667 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
668 (defsubst recentf-sort-descending (l) |
30416 | 669 "Sort the list of menu elements L in descending order. |
670 The MENU-ITEM part of each menu element is compared." | |
671 (sort (copy-sequence l) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
672 #'(lambda (e1 e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
673 (recentf-string-lessp |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
674 (recentf-menu-element-item e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
675 (recentf-menu-element-item e1))))) |
30416 | 676 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
677 (defsubst recentf-sort-basenames-ascending (l) |
30416 | 678 "Sort the list of menu elements L in ascending order. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
679 Only filenames sans directory are compared." |
30416 | 680 (sort (copy-sequence l) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
681 #'(lambda (e1 e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
682 (recentf-string-lessp |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
683 (file-name-nondirectory (recentf-menu-element-value e1)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
684 (file-name-nondirectory (recentf-menu-element-value e2)))))) |
30416 | 685 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
686 (defsubst recentf-sort-basenames-descending (l) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
687 "Sort the list of menu elements L in descending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
688 Only filenames sans directory are compared." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
689 (sort (copy-sequence l) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
690 #'(lambda (e1 e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
691 (recentf-string-lessp |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
692 (file-name-nondirectory (recentf-menu-element-value e2)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
693 (file-name-nondirectory (recentf-menu-element-value e1)))))) |
30416 | 694 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
695 (defsubst recentf-sort-directories-ascending (l) |
30416 | 696 "Sort the list of menu elements L in ascending order. |
697 Compares directories then filenames to order the list." | |
698 (sort (copy-sequence l) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
699 #'(lambda (e1 e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
700 (recentf-directory-compare |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
701 (recentf-menu-element-value e1) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
702 (recentf-menu-element-value e2))))) |
30416 | 703 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
704 (defsubst recentf-sort-directories-descending (l) |
30416 | 705 "Sort the list of menu elements L in descending order. |
706 Compares directories then filenames to order the list." | |
707 (sort (copy-sequence l) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
708 #'(lambda (e1 e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
709 (recentf-directory-compare |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
710 (recentf-menu-element-value e2) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
711 (recentf-menu-element-value e1))))) |
30416 | 712 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
713 (defun recentf-show-basenames (l &optional no-dir) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
714 "Filter the list of menu elements L to show filenames sans directory. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
715 When a filename is duplicated, it is appended a sequence number if |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
716 optional argument NO-DIR is non-nil, or its directory otherwise." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
717 (let (filtered-names filtered-list full name counters sufx) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
718 (dolist (elt l (nreverse filtered-list)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
719 (setq full (recentf-menu-element-value elt) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
720 name (file-name-nondirectory full)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
721 (if (not (member name filtered-names)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
722 (push name filtered-names) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
723 (if no-dir |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
724 (if (setq sufx (assoc name counters)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
725 (setcdr sufx (1+ (cdr sufx))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
726 (setq sufx 1) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
727 (push (cons name sufx) counters)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
728 (setq sufx (file-name-directory full))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
729 (setq name (format "%s(%s)" name sufx))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
730 (push (recentf-make-menu-element name full) filtered-list)))) |
30416 | 731 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
732 (defsubst recentf-show-basenames-ascending (l) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
733 "Filter the list of menu elements L to show filenames sans directory. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
734 Filenames are sorted in ascending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
735 This filter combines the `recentf-sort-basenames-ascending' and |
32292 | 736 `recentf-show-basenames' filters." |
30416 | 737 (recentf-show-basenames (recentf-sort-basenames-ascending l))) |
738 | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
739 (defsubst recentf-show-basenames-descending (l) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
740 "Filter the list of menu elements L to show filenames sans directory. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
741 Filenames are sorted in descending order. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
742 This filter combines the `recentf-sort-basenames-descending' and |
32292 | 743 `recentf-show-basenames' filters." |
30416 | 744 (recentf-show-basenames (recentf-sort-basenames-descending l))) |
745 | |
746 (defun recentf-relative-filter (l) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
747 "Filter the list of menu-elements L to show relative filenames. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
748 Filenames are relative to the `default-directory'." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
749 (mapcar #'(lambda (menu-element) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
750 (let* ((ful (recentf-menu-element-value menu-element)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
751 (rel (file-relative-name ful default-directory))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
752 (if (string-match "^\\.\\." rel) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
753 menu-element |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
754 (recentf-make-menu-element rel ful)))) |
30416 | 755 l)) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
756 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
757 ;;; Rule based menu filters |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
758 ;; |
30416 | 759 (defcustom recentf-arrange-rules |
760 '( | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
761 ("Elisp files (%d)" ".\\.el\\'") |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
762 ("Java files (%d)" ".\\.java\\'") |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
763 ("C/C++ files (%d)" "c\\(pp\\)?\\'") |
30416 | 764 ) |
765 "*List of rules used by `recentf-arrange-by-rule' to build sub-menus. | |
32292 | 766 A rule is a pair (SUB-MENU-TITLE . MATCHER). SUB-MENU-TITLE is the |
30416 | 767 displayed title of the sub-menu where a '%d' `format' pattern is |
32292 | 768 replaced by the number of items in the sub-menu. MATCHER is a regexp |
769 or a list of regexps. Items matching one of the regular expressions in | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
770 MATCHER are added to the corresponding sub-menu. |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
771 SUB-MENU-TITLE can be a function. It is passed every items that |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
772 matched the corresponding MATCHER, and it must return a |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
773 pair (SUB-MENU-TITLE . ITEM). SUB-MENU-TITLE is a computed sub-menu |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
774 title that can be another function. ITEM is the received item which |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
775 may have been modified to match another rule." |
30416 | 776 :group 'recentf-filters |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
777 :type '(repeat (cons (choice string function) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
778 (repeat regexp)))) |
30416 | 779 |
780 (defcustom recentf-arrange-by-rule-others "Other files (%d)" | |
32292 | 781 "*Title of the `recentf-arrange-by-rule' sub-menu. |
782 This is for the menu where items that don't match any | |
783 `recentf-arrange-rules' are displayed. If nil these items are | |
784 displayed in the main recent files menu. A '%d' `format' pattern in | |
785 the title is replaced by the number of items in the sub-menu." | |
30416 | 786 :group 'recentf-filters |
787 :type '(choice (const :tag "Main menu" nil) | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
788 (string :tag "Title"))) |
30416 | 789 |
790 (defcustom recentf-arrange-by-rules-min-items 0 | |
791 "*Minimum number of items in a `recentf-arrange-by-rule' sub-menu. | |
792 If the number of items in a sub-menu is less than this value the | |
793 corresponding sub-menu items are displayed in the main recent files | |
794 menu or in the `recentf-arrange-by-rule-others' sub-menu if | |
795 defined." | |
796 :group 'recentf-filters | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
797 :type 'number) |
30416 | 798 |
799 (defcustom recentf-arrange-by-rule-subfilter nil | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
800 "*Function called by a rule based filter to filter sub-menu elements. |
64664
3161d6027fd7
(recentf-menu-append-commands-p): Declare with `define-obsolete-variable-alias'.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
801 A nil value means no filter. See also `recentf-menu-filter'. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
802 You can't use another rule based filter here." |
30416 | 803 :group 'recentf-filters |
35971 | 804 :type '(choice (const nil) function) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
805 :set (lambda (variable value) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
806 (when (memq value '(recentf-arrange-by-rule |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
807 recentf-arrange-by-mode |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
808 recentf-arrange-by-dir)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
809 (error "Recursive use of a rule based filter")) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
810 (set-default variable value))) |
30416 | 811 |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
812 (defun recentf-match-rule (file) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
813 "Return the rule that match FILE." |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
814 (let ((rules recentf-arrange-rules) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
815 match found) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
816 (while (and (not found) rules) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
817 (setq match (cdar rules)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
818 (when (stringp match) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
819 (setq match (list match))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
820 (while (and match (not (string-match (car match) file))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
821 (setq match (cdr match))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
822 (if match |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
823 (setq found (cons (caar rules) file)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
824 (setq rules (cdr rules)))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
825 found)) |
30416 | 826 |
827 (defun recentf-arrange-by-rule (l) | |
32292 | 828 "Filter the list of menu-elements L. |
829 Arrange them in sub-menus following rules in `recentf-arrange-rules'." | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
830 (when recentf-arrange-rules |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
831 (let (menus others menu file min count) |
67119
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
832 ;; Put menu items into sub-menus as defined by rules. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
833 (dolist (elt l) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
834 (setq file (recentf-menu-element-value elt) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
835 menu (recentf-match-rule file)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
836 (while (functionp (car menu)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
837 (setq menu (funcall (car menu) (cdr menu)))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
838 (if (not (stringp (car menu))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
839 (push elt others) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
840 (setq menu (or (assoc (car menu) menus) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
841 (car (push (list (car menu)) menus)))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
842 (recentf-set-menu-element-value |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
843 menu (cons elt (recentf-menu-element-value menu))))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
844 ;; Finalize each sub-menu: |
67119
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
845 ;; - truncate it depending on the value of |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
846 ;; `recentf-arrange-by-rules-min-items', |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
847 ;; - replace %d by the number of menu items, |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
848 ;; - apply `recentf-arrange-by-rule-subfilter' to menu items. |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
849 (setq min (if (natnump recentf-arrange-by-rules-min-items) |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
850 recentf-arrange-by-rules-min-items 0) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
851 l nil) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
852 (dolist (elt menus) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
853 (setq menu (recentf-menu-element-value elt) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
854 count (length menu)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
855 (if (< count min) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
856 (setq others (nconc menu others)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
857 (recentf-set-menu-element-item |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
858 elt (format (recentf-menu-element-item elt) count)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
859 (recentf-set-menu-element-value |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
860 elt (recentf-apply-menu-filter |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
861 recentf-arrange-by-rule-subfilter (nreverse menu))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
862 (push elt l))) |
67119
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
863 ;; Add the menu items remaining in the `others' bin. |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
864 (when (setq others (nreverse others)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
865 (setq l (nconc |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
866 l |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
867 ;; Put items in an sub menu. |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
868 (if (stringp recentf-arrange-by-rule-others) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
869 (list |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
870 (recentf-make-menu-element |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
871 (format recentf-arrange-by-rule-others |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
872 (length others)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
873 (recentf-apply-menu-filter |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
874 recentf-arrange-by-rule-subfilter others))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
875 ;; Append items to the main menu. |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
876 (recentf-apply-menu-filter |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
877 recentf-arrange-by-rule-subfilter others))))))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
878 l) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
879 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
880 ;;; Predefined rule based menu filters |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
881 ;; |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
882 (defun recentf-indirect-mode-rule (file) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
883 "Apply a second level `auto-mode-alist' regexp to FILE." |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
884 (recentf-match-rule (substring file 0 (match-beginning 0)))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
885 |
30416 | 886 (defun recentf-build-mode-rules () |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
887 "Convert `auto-mode-alist' to menu filter rules. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
888 Rules obey `recentf-arrange-rules' format." |
30416 | 889 (let ((case-fold-search recentf-case-fold-search) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
890 regexp rule-name rule rules) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
891 (dolist (mode auto-mode-alist) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
892 (setq regexp (car mode) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
893 mode (cdr mode)) |
67119
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
894 (when mode |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
895 (cond |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
896 ;; Build a special "strip suffix" rule from entries of the |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
897 ;; form (REGEXP FUNCTION NON-NIL). Notice that FUNCTION is |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
898 ;; ignored by the menu filter. So in some corner cases a |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
899 ;; wrong mode could be guessed. |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
900 ((and (consp mode) (cadr mode)) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
901 (setq rule-name 'recentf-indirect-mode-rule)) |
67119
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
902 ((and mode (symbolp mode)) |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
903 (setq rule-name (symbol-name mode)) |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
904 (if (string-match "\\(.*\\)-mode$" rule-name) |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
905 (setq rule-name (match-string 1 rule-name))) |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
906 (setq rule-name (concat rule-name " (%d)")))) |
c4aae786a4e4
(recentf-arrange-by-rule): Handle a special `auto-mode-alist'-like
David Ponce <david@dponce.com>
parents:
66083
diff
changeset
|
907 (setq rule (assoc rule-name rules)) |
30416 | 908 (if rule |
909 (setcdr rule (cons regexp (cdr rule))) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
910 (push (list rule-name regexp) rules)))) |
30416 | 911 ;; It is important to preserve auto-mode-alist order |
912 ;; to ensure the right file <-> mode association | |
913 (nreverse rules))) | |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
44967
diff
changeset
|
914 |
30416 | 915 (defun recentf-arrange-by-mode (l) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
916 "Split the list of menu-elements L into sub-menus by major mode." |
30416 | 917 (let ((recentf-arrange-rules (recentf-build-mode-rules)) |
918 (recentf-arrange-by-rule-others "others (%d)")) | |
919 (recentf-arrange-by-rule l))) | |
920 | |
921 (defun recentf-file-name-nondir (l) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
922 "Filter the list of menu-elements L to show filenames sans directory. |
32292 | 923 This simplified version of `recentf-show-basenames' does not handle |
924 duplicates. It is used by `recentf-arrange-by-dir' as its | |
30416 | 925 `recentf-arrange-by-rule-subfilter'." |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
926 (mapcar #'(lambda (e) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
927 (recentf-make-menu-element |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
928 (file-name-nondirectory (recentf-menu-element-value e)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
929 (recentf-menu-element-value e))) |
30416 | 930 l)) |
931 | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
932 (defun recentf-dir-rule (file) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
933 "Return as a sub-menu, the directory FILE belongs to." |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
934 (cons (file-name-directory file) file)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
935 |
30416 | 936 (defun recentf-arrange-by-dir (l) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
937 "Split the list of menu-elements L into sub-menus by directory." |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
938 (let ((recentf-arrange-rules '((recentf-dir-rule . ".*"))) |
30416 | 939 (recentf-arrange-by-rule-subfilter 'recentf-file-name-nondir) |
940 recentf-arrange-by-rule-others) | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
941 (recentf-arrange-by-rule l))) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
942 |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
943 ;;; Menu of menu filters |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
944 ;; |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
945 (defvar recentf-filter-changer-current nil |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
946 "Current filter used by `recentf-filter-changer'.") |
30416 | 947 |
948 (defcustom recentf-filter-changer-alist | |
949 '( | |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
950 (recentf-arrange-by-mode . "Grouped by Mode") |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
951 (recentf-arrange-by-dir . "Grouped by Directory") |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
952 (recentf-arrange-by-rule . "Grouped by Custom Rules") |
30416 | 953 ) |
954 "*List of filters managed by `recentf-filter-changer'. | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
955 Each filter is defined by a pair (FUNCTION . LABEL), where FUNCTION is |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
956 the filter function, and LABEL is the menu item displayed to select |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
957 that filter." |
30416 | 958 :group 'recentf-filters |
959 :type '(repeat (cons function string)) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
960 :set (lambda (variable value) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
961 (setq recentf-filter-changer-current nil) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
962 (set-default variable value))) |
30416 | 963 |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
964 (defun recentf-filter-changer-select (filter) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
965 "Select FILTER as the current menu filter. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
966 See `recentf-filter-changer'." |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
967 (setq recentf-filter-changer-current filter)) |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
44967
diff
changeset
|
968 |
30416 | 969 (defun recentf-filter-changer (l) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
970 "Manage a sub-menu of menu filters. |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
971 `recentf-filter-changer-alist' defines the filters in the menu. |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
972 Filtering of L is delegated to the selected filter in the menu." |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
973 (unless recentf-filter-changer-current |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
974 (setq recentf-filter-changer-current |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
975 (caar recentf-filter-changer-alist))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
976 (if (not recentf-filter-changer-current) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
977 l |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
978 (setq recentf-menu-filter-commands |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
979 (list |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
980 `("Show files" |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
981 ,@(mapcar |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
982 #'(lambda (f) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
983 `[,(cdr f) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
984 (setq recentf-filter-changer-current ',(car f)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
985 ;;:active t |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
986 :style radio ;;radio Don't work with GTK :-( |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
987 :selected (eq recentf-filter-changer-current |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
988 ',(car f)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
989 ;;:help ,(cdr f) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
990 ]) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
991 recentf-filter-changer-alist)))) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
992 (recentf-apply-menu-filter recentf-filter-changer-current l))) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
993 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
994 ;;; Hooks |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
995 ;; |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
996 (defun recentf-track-opened-file () |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
997 "Insert the name of the file just opened or written into the recent list." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
998 (and buffer-file-name |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
999 (recentf-add-file buffer-file-name)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1000 ;; Must return nil because it is run from `write-file-functions'. |
30416 | 1001 nil) |
1002 | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1003 (defun recentf-track-closed-file () |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1004 "Update the recent list when a buffer is killed. |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
1005 That is, remove a non kept file from the recent list." |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1006 (and buffer-file-name |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
1007 (recentf-remove-if-non-kept buffer-file-name))) |
30416 | 1008 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1009 (defconst recentf-used-hooks |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1010 '( |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1011 (find-file-hook recentf-track-opened-file) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1012 (write-file-functions recentf-track-opened-file) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1013 (kill-buffer-hook recentf-track-closed-file) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1014 (kill-emacs-hook recentf-save-list) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1015 ) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1016 "Hooks used by recentf.") |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1017 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1018 ;;; Commands |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1019 ;; |
30416 | 1020 |
66083
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1021 ;;; Common dialog stuff |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1022 ;; |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1023 (defun recentf-cancel-dialog (&rest ignore) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1024 "Cancel the current dialog. |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1025 IGNORE arguments." |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1026 (interactive) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1027 (kill-buffer (current-buffer)) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1028 (message "Dialog canceled")) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1029 |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1030 (defun recentf-dialog-goto-first (widget-type) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1031 "Move the cursor to the first WIDGET-TYPE in current dialog. |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1032 Go to the beginning of buffer if not found." |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1033 (goto-char (point-min)) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1034 (condition-case nil |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1035 (let (done) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1036 (widget-move 1) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1037 (while (not done) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1038 (if (eq widget-type (widget-type (widget-at (point)))) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1039 (setq done t) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1040 (widget-move 1)))) |
67589
afb90762aa99
(recentf-dialog-goto-first): Fix missing error condition.
David Ponce <david@dponce.com>
parents:
67417
diff
changeset
|
1041 (error |
afb90762aa99
(recentf-dialog-goto-first): Fix missing error condition.
David Ponce <david@dponce.com>
parents:
67417
diff
changeset
|
1042 (goto-char (point-min))))) |
66083
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1043 |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1044 (defvar recentf-dialog-mode-map |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1045 (let ((km (copy-keymap recentf--shortcuts-keymap))) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1046 (set-keymap-parent km widget-keymap) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1047 (define-key km "q" 'recentf-cancel-dialog) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1048 (define-key km [follow-link] "\C-m") |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1049 km) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1050 "Keymap used in recentf dialogs.") |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1051 |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1052 (define-derived-mode recentf-dialog-mode nil "recentf-dialog" |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1053 "Major mode of recentf dialogs. |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1054 |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1055 \\{recentf-dialog-mode-map}" |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1056 :syntax-table nil |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1057 :abbrev-table nil |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1058 (setq truncate-lines t)) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1059 |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1060 (defmacro recentf-dialog (name &rest forms) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1061 "Show a dialog buffer with NAME, setup with FORMS." |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1062 (declare (indent 1) (debug t)) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1063 `(with-current-buffer (get-buffer-create ,name) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1064 ;; Cleanup buffer |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1065 (let ((inhibit-read-only t) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1066 (ol (overlay-lists))) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1067 (mapc 'delete-overlay (car ol)) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1068 (mapc 'delete-overlay (cdr ol)) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1069 (erase-buffer)) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1070 (recentf-dialog-mode) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1071 ,@forms |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1072 (widget-setup) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1073 (switch-to-buffer (current-buffer)))) |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1074 |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1075 ;;; Edit list dialog |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1076 ;; |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1077 (defvar recentf-edit-list nil) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1078 |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1079 (defun recentf-edit-list-select (widget &rest ignore) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1080 "Toggle a file selection based on the checkbox WIDGET state. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1081 IGNORE other arguments." |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1082 (let ((value (widget-get widget :tag)) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1083 (check (widget-value widget))) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1084 (if check |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1085 (add-to-list 'recentf-edit-list value) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1086 (setq recentf-edit-list (delq value recentf-edit-list))) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1087 (message "%s %sselected" value (if check "" "un")))) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1088 |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1089 (defun recentf-edit-list-validate (&rest ignore) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1090 "Process the recent list when the edit list dialog is committed. |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1091 IGNORE arguments." |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1092 (if recentf-edit-list |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1093 (let ((i 0)) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1094 (dolist (e recentf-edit-list) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1095 (setq recentf-list (delq e recentf-list) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1096 i (1+ i))) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1097 (kill-buffer (current-buffer)) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
1098 (message "%S file(s) removed from the list" i)) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1099 (message "No file selected"))) |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
44967
diff
changeset
|
1100 |
30416 | 1101 (defun recentf-edit-list () |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1102 "Show a dialog to delete selected files from the recent list." |
30416 | 1103 (interactive) |
67589
afb90762aa99
(recentf-dialog-goto-first): Fix missing error condition.
David Ponce <david@dponce.com>
parents:
67417
diff
changeset
|
1104 (unless recentf-list |
afb90762aa99
(recentf-dialog-goto-first): Fix missing error condition.
David Ponce <david@dponce.com>
parents:
67417
diff
changeset
|
1105 (error "The list of recent files is empty")) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1106 (recentf-dialog (format "*%s - Edit list*" recentf-menu-title) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1107 (set (make-local-variable 'recentf-edit-list) nil) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1108 (widget-insert |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1109 "Click on OK to delete selected files from the recent list. |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1110 Click on Cancel or type `q' to cancel.\n") |
30416 | 1111 ;; Insert the list of files as checkboxes |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1112 (dolist (item recentf-list) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1113 (widget-create 'checkbox |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1114 :value nil ; unselected checkbox |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1115 :format "\n %[%v%] %t" |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1116 :tag item |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1117 :notify 'recentf-edit-list-select)) |
30416 | 1118 (widget-insert "\n\n") |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1119 (widget-create |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1120 'push-button |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1121 :notify 'recentf-edit-list-validate |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1122 :help-echo "Delete selected files from the recent list" |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1123 "Ok") |
30416 | 1124 (widget-insert " ") |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1125 (widget-create |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1126 'push-button |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1127 :notify 'recentf-cancel-dialog |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1128 "Cancel") |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1129 (recentf-dialog-goto-first 'checkbox))) |
66083
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1130 |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1131 ;;; Open file dialog |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1132 ;; |
30416 | 1133 (defun recentf-open-files-action (widget &rest ignore) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1134 "Open the file stored in WIDGET's value when notified. |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1135 IGNORE other arguments." |
30416 | 1136 (kill-buffer (current-buffer)) |
1137 (funcall recentf-menu-action (widget-value widget))) | |
1138 | |
65365
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1139 ;; List of files associated to a digit shortcut key. |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1140 (defvar recentf--files-with-key nil) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1141 |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1142 (defun recentf-show-digit-shortcut-filter (l) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1143 "Filter the list of menu-elements L to show digit shortcuts." |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1144 (let ((i 0)) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1145 (dolist (e l) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1146 (setq i (1+ i)) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1147 (recentf-set-menu-element-item |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1148 e (format "[%d] %s" (% i 10) (recentf-menu-element-item e)))) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1149 l)) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1150 |
30416 | 1151 (defun recentf-open-files-item (menu-element) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1152 "Return a widget to display MENU-ELEMENT in a dialog buffer." |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1153 (if (consp (cdr menu-element)) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1154 ;; Represent a sub-menu with a tree widget |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1155 `(tree-widget |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1156 :open t |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1157 :match ignore |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1158 :node (item :tag ,(car menu-element) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1159 :sample-face bold |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1160 :format "%{%t%}:\n") |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1161 ,@(mapcar 'recentf-open-files-item |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1162 (cdr menu-element))) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1163 ;; Represent a single file with a link widget |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1164 `(link :tag ,(car menu-element) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1165 :button-prefix "" |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1166 :button-suffix "" |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1167 :button-face default |
69778
6828bafcac8e
(recentf-open-files-item): Include newline in button
David Ponce <david@dponce.com>
parents:
68651
diff
changeset
|
1168 :format "%[%t\n%]" |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1169 :help-echo ,(concat "Open " (cdr menu-element)) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1170 :action recentf-open-files-action |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1171 ,(cdr menu-element)))) |
30416 | 1172 |
65365
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1173 (defun recentf-open-files-items (files) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1174 "Return a list of widgets to display FILES in a dialog buffer." |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1175 (set (make-local-variable 'recentf--files-with-key) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1176 (recentf-trunc-list files 10)) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1177 (mapcar 'recentf-open-files-item |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1178 (append |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1179 ;; When requested group the files with shortcuts together |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1180 ;; at the top of the list. |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1181 (when recentf-show-file-shortcuts-flag |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1182 (setq files (nthcdr 10 files)) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1183 (recentf-apply-menu-filter |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1184 'recentf-show-digit-shortcut-filter |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1185 (mapcar 'recentf-make-default-menu-element |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1186 recentf--files-with-key))) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1187 ;; Then the other files. |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1188 (recentf-apply-menu-filter |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1189 recentf-menu-filter |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1190 (mapcar 'recentf-make-default-menu-element |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1191 files))))) |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1192 |
30416 | 1193 (defun recentf-open-files (&optional files buffer-name) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1194 "Show a dialog to open a recent file. |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1195 If optional argument FILES is non-nil, it is a list of recently-opened |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1196 files to choose from. It defaults to the whole recent list. |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1197 If optional argument BUFFER-NAME is non-nil, it is a buffer name to |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1198 use for the dialog. It defaults to \"*`recentf-menu-title'*\"." |
30416 | 1199 (interactive) |
67589
afb90762aa99
(recentf-dialog-goto-first): Fix missing error condition.
David Ponce <david@dponce.com>
parents:
67417
diff
changeset
|
1200 (unless (or files recentf-list) |
afb90762aa99
(recentf-dialog-goto-first): Fix missing error condition.
David Ponce <david@dponce.com>
parents:
67417
diff
changeset
|
1201 (error "There is no recent file to open")) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1202 (recentf-dialog (or buffer-name (format "*%s*" recentf-menu-title)) |
65365
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1203 (widget-insert "Click on a file" |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1204 (if recentf-show-file-shortcuts-flag |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1205 ", or type the corresponding digit key," |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1206 "") |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1207 " to open it.\n" |
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1208 "Click on Cancel or type `q' to cancel.\n") |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1209 ;; Use a L&F that looks like the recentf menu. |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1210 (tree-widget-set-theme "folder") |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1211 (apply 'widget-create |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1212 `(group |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1213 :indent 2 |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1214 :format "\n%v\n" |
65365
83aa6efe327f
(recentf-show-file-shortcuts-flag): New option.
David Ponce <david@dponce.com>
parents:
64762
diff
changeset
|
1215 ,@(recentf-open-files-items (or files recentf-list)))) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1216 (widget-create |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1217 'push-button |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1218 :notify 'recentf-cancel-dialog |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1219 "Cancel") |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1220 (recentf-dialog-goto-first 'link))) |
30416 | 1221 |
1222 (defun recentf-open-more-files () | |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1223 "Show a dialog to open a recent file that is not in the menu." |
30416 | 1224 (interactive) |
1225 (recentf-open-files (nthcdr recentf-max-menu-items recentf-list) | |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1226 (format "*%s - More*" recentf-menu-title))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1227 |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1228 (defun recentf-open-most-recent-file (&optional n) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1229 "Open the Nth most recent file. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1230 Optional argument N must be a valid digit number. It defaults to 1. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1231 1 opens the most recent file, 2 the second most recent one, etc.. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1232 0 opens the tenth most recent file." |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1233 (interactive "p") |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1234 (cond |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1235 ((zerop n) (setq n 10)) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1236 ((and (> n 0) (< n 10))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1237 ((error "Recent file number out of range [0-9], %d" n))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1238 (let ((file (nth (1- n) (or recentf--files-with-key recentf-list)))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1239 (unless file (error "Not that many recent files")) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1240 ;; Close the open files dialog. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1241 (when recentf--files-with-key |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1242 (kill-buffer (current-buffer))) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1243 (funcall recentf-menu-action file))) |
66083
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1244 |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1245 ;;; Save/load/cleanup the recent list |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1246 ;; |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1247 (defconst recentf-save-file-header |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1248 ";;; Automatically generated by `recentf' on %s.\n" |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1249 "Header to be written into the `recentf-save-file'.") |
30416 | 1250 |
61733
34f8bb98e444
(recentf-save-file-coding-system): New variable.
Kenichi Handa <handa@m17n.org>
parents:
60844
diff
changeset
|
1251 (defconst recentf-save-file-coding-system |
34f8bb98e444
(recentf-save-file-coding-system): New variable.
Kenichi Handa <handa@m17n.org>
parents:
60844
diff
changeset
|
1252 (if (coding-system-p 'utf-8-emacs) |
34f8bb98e444
(recentf-save-file-coding-system): New variable.
Kenichi Handa <handa@m17n.org>
parents:
60844
diff
changeset
|
1253 'utf-8-emacs |
34f8bb98e444
(recentf-save-file-coding-system): New variable.
Kenichi Handa <handa@m17n.org>
parents:
60844
diff
changeset
|
1254 'emacs-mule) |
34f8bb98e444
(recentf-save-file-coding-system): New variable.
Kenichi Handa <handa@m17n.org>
parents:
60844
diff
changeset
|
1255 "Coding system of the file `recentf-save-file'.") |
34f8bb98e444
(recentf-save-file-coding-system): New variable.
Kenichi Handa <handa@m17n.org>
parents:
60844
diff
changeset
|
1256 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1257 (defun recentf-save-list () |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1258 "Save the recent list. |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1259 Write data into the file specified by `recentf-save-file'." |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1260 (interactive) |
55012
13ef2f084366
(recentf-save-list): Catch and warn about errors.
Richard M. Stallman <rms@gnu.org>
parents:
54770
diff
changeset
|
1261 (condition-case error |
13ef2f084366
(recentf-save-list): Catch and warn about errors.
Richard M. Stallman <rms@gnu.org>
parents:
54770
diff
changeset
|
1262 (with-temp-buffer |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1263 (erase-buffer) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1264 (set-buffer-file-coding-system recentf-save-file-coding-system) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1265 (insert (format recentf-save-file-header (current-time-string))) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1266 (recentf-dump-variable 'recentf-list recentf-max-saved-items) |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
1267 (recentf-dump-variable 'recentf-filter-changer-current) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1268 (insert "\n\n;;; Local Variables:\n" |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1269 (format ";;; coding: %s\n" recentf-save-file-coding-system) |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1270 ";;; End:\n") |
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1271 (write-file (expand-file-name recentf-save-file)) |
65525
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
1272 (when recentf-save-file-modes |
f68d6281086a
(recentf-save-file-modes): New option.
David Ponce <david@dponce.com>
parents:
65368
diff
changeset
|
1273 (set-file-modes recentf-save-file recentf-save-file-modes)) |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1274 nil) |
55012
13ef2f084366
(recentf-save-list): Catch and warn about errors.
Richard M. Stallman <rms@gnu.org>
parents:
54770
diff
changeset
|
1275 (error |
13ef2f084366
(recentf-save-list): Catch and warn about errors.
Richard M. Stallman <rms@gnu.org>
parents:
54770
diff
changeset
|
1276 (warn "recentf mode: %s" (error-message-string error))))) |
32866
8ef794e21542
(recentf-mode): Variable removed.
Miles Bader <miles@gnu.org>
parents:
32429
diff
changeset
|
1277 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1278 (defun recentf-load-list () |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1279 "Load a previously saved recent list. |
52638
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1280 Read data from the file specified by `recentf-save-file'. |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1281 When `recentf-initialize-file-name-history' is non-nil, initialize an |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1282 empty `file-name-history' with the recent list." |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1283 (interactive) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1284 (let ((file (expand-file-name recentf-save-file))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1285 (when (file-readable-p file) |
52638
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1286 (load-file file) |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1287 (and recentf-initialize-file-name-history |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1288 (not file-name-history) |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1289 (setq file-name-history (mapcar 'abbreviate-file-name |
2a2c48cb8b59
(recentf-initialize-file-name-history): New defcustom.
Eli Zaretskii <eliz@gnu.org>
parents:
52509
diff
changeset
|
1290 recentf-list)))))) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1291 |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1292 (defun recentf-cleanup () |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
1293 "Cleanup the recent list. |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
1294 That is, remove duplicates, non-kept, and excluded files." |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1295 (interactive) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1296 (message "Cleaning up the recentf list...") |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
1297 (let ((n 0) newlist) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1298 (dolist (f recentf-list) |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
1299 (setq f (recentf-expand-file-name f)) |
60740
1e67e22bcc1b
(recentf-cleanup-remote): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
59996
diff
changeset
|
1300 (if (and (recentf-include-p f) |
65744
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
1301 (recentf-keep-p f) |
4bbd95905599
(recentf-filename-handlers): Rename from
David Ponce <david@dponce.com>
parents:
65525
diff
changeset
|
1302 (not (recentf-string-member f newlist))) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1303 (push f newlist) |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
1304 (setq n (1+ n)) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1305 (message "File %s removed from the recentf list" f))) |
60844
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
1306 (message "Cleaning up the recentf list...done (%d removed)" n) |
5bb0c1e05b1b
(recentf-keep): New option.
David Ponce <david@dponce.com>
parents:
60740
diff
changeset
|
1307 (setq recentf-list (nreverse newlist)))) |
66083
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1308 |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1309 ;;; The minor mode |
3ee176d1ff23
(recentf-track-opened-file)
David Ponce <david@dponce.com>
parents:
65894
diff
changeset
|
1310 ;; |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1311 (defvar recentf-mode-map (make-sparse-keymap) |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1312 "Keymap to use in recentf mode.") |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1313 |
30416 | 1314 ;;;###autoload |
32866
8ef794e21542
(recentf-mode): Variable removed.
Miles Bader <miles@gnu.org>
parents:
32429
diff
changeset
|
1315 (define-minor-mode recentf-mode |
30416 | 1316 "Toggle recentf mode. |
32866
8ef794e21542
(recentf-mode): Variable removed.
Miles Bader <miles@gnu.org>
parents:
32429
diff
changeset
|
1317 With prefix argument ARG, turn on if positive, otherwise off. |
8ef794e21542
(recentf-mode): Variable removed.
Miles Bader <miles@gnu.org>
parents:
32429
diff
changeset
|
1318 Returns non-nil if the new state is enabled. |
30416 | 1319 |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1320 When recentf mode is enabled, it maintains a menu for visiting files |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1321 that were operated on recently. |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1322 |
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1323 \\{recentf-mode-map}" |
32866
8ef794e21542
(recentf-mode): Variable removed.
Miles Bader <miles@gnu.org>
parents:
32429
diff
changeset
|
1324 :global t |
8ef794e21542
(recentf-mode): Variable removed.
Miles Bader <miles@gnu.org>
parents:
32429
diff
changeset
|
1325 :group 'recentf |
65894
e0cf1ed38749
(recentf-menu-open-all-flag): New option.
David Ponce <david@dponce.com>
parents:
65744
diff
changeset
|
1326 :keymap recentf-mode-map |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1327 (unless (and recentf-mode (recentf-enabled-p)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1328 (if recentf-mode |
67417
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
1329 (progn |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
1330 (recentf-load-list) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
1331 (recentf-show-menu)) |
29df8eb9daf1
Improvement of the menu code.
David Ponce <david@dponce.com>
parents:
67119
diff
changeset
|
1332 (recentf-hide-menu) |
50715
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1333 (recentf-save-list)) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1334 (recentf-auto-cleanup) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1335 (let ((hook-setup (if recentf-mode 'add-hook 'remove-hook))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1336 (dolist (hook recentf-used-hooks) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1337 (apply hook-setup hook))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1338 (run-hooks 'recentf-mode-hook) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1339 (when (interactive-p) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1340 (message "Recentf mode %sabled" (if recentf-mode "en" "dis")))) |
46229d46cbeb
Major rewrite. The code is reordered, cleaner and faster.
Juanma Barranquero <lekktu@gmail.com>
parents:
49549
diff
changeset
|
1341 recentf-mode) |
30416 | 1342 |
1343 (provide 'recentf) | |
1344 | |
1345 (run-hooks 'recentf-load-hook) | |
61733
34f8bb98e444
(recentf-save-file-coding-system): New variable.
Kenichi Handa <handa@m17n.org>
parents:
60844
diff
changeset
|
1346 |
63781
99d460dc50ca
Require 'tree-widget instead of 'wid-edit.
David Ponce <david@dponce.com>
parents:
63409
diff
changeset
|
1347 ;; arch-tag: 78f1eec9-0d16-4d19-a4eb-2e4529edb62a |
32429 | 1348 ;;; recentf.el ends here |