Mercurial > emacs
annotate lisp/filecache.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | 066c6d53b8b9 |
children | 2b266010d0b7 376148b31b5e |
rev | line source |
---|---|
45046
dc980af6073b
Lowercase the first letter in the header.
Pavel Janík <Pavel@Janik.cz>
parents:
41568
diff
changeset
|
1 ;;; filecache.el --- find files using a pre-loaded cache |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
2 |
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
3 ;; Copyright (C) 1996, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, |
106815 | 4 ;; 2008, 2009, 2010 Free Software Foundation, Inc. |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
5 |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
6 ;; Author: Peter Breton <pbreton@cs.umb.edu> |
18388 | 7 ;; Created: Sun Nov 10 1996 |
22250
a77d473867b8
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21886
diff
changeset
|
8 ;; Keywords: convenience |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
9 |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
10 ;; This file is part of GNU Emacs. |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
11 |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94087
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
18388 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94087
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94087
diff
changeset
|
15 ;; (at your option) any later version. |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
16 |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
17 ;; GNU Emacs is distributed in the hope that it will be useful, |
18388 | 18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
20 ;; GNU General Public License for more details. |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
21 |
18388 | 22 ;; You should have received a copy of the GNU General Public License |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94087
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
24 |
18388 | 25 ;;; Commentary: |
26 ;; | |
27 ;; The file-cache package is an attempt to make it easy to locate files | |
28 ;; by name, without having to remember exactly where they are located. | |
29 ;; This is very handy when working with source trees. You can also add | |
30 ;; frequently used files to the cache to create a hotlist effect. | |
31 ;; The cache can be used with any interactive command which takes a | |
32 ;; filename as an argument. | |
33 ;; | |
34 ;; It is worth noting that this package works best when most of the files | |
35 ;; in the cache have unique names, or (if they have the same name) exist in | |
36 ;; only a few directories. The worst case is many files all with | |
37 ;; the same name and in different directories, for example a big source tree | |
38 ;; with a Makefile in each directory. In such a case, you should probably | |
39 ;; use an alternate strategy to find the files. | |
40 ;; | |
41 ;; ADDING FILES TO THE CACHE: | |
42 ;; | |
43 ;; Use the following functions to add items to the file cache: | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
44 ;; |
18388 | 45 ;; * `file-cache-add-file': Adds a single file to the cache |
46 ;; | |
47 ;; * `file-cache-add-file-list': Adds a list of files to the cache | |
48 ;; | |
49 ;; The following functions use the regular expressions in | |
50 ;; `file-cache-delete-regexps' to eliminate unwanted files: | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
51 ;; |
18388 | 52 ;; * `file-cache-add-directory': Adds the files in a directory to the |
53 ;; cache. You can also specify a regular expression to match the files | |
54 ;; which should be added. | |
55 ;; | |
56 ;; * `file-cache-add-directory-list': Same as above, but acts on a list | |
57 ;; of directories. You can use `load-path', `exec-path' and the like. | |
58 ;; | |
59 ;; * `file-cache-add-directory-using-find': Uses the `find' command to | |
60 ;; add a directory tree to the cache. | |
61 ;; | |
62 ;; * `file-cache-add-directory-using-locate': Uses the `locate' command to | |
63 ;; add files matching a pattern to the cache. | |
64 ;; | |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
65 ;; * `file-cache-add-directory-recursively': Uses the find-lisp package to |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
66 ;; add all files matching a pattern to the cache. |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
67 ;; |
18388 | 68 ;; Use the function `file-cache-clear-cache' to remove all items from the |
69 ;; cache. There are a number of `file-cache-delete' functions provided | |
70 ;; as well, but in general it is probably better to not worry too much | |
71 ;; about extra files in the cache. | |
72 ;; | |
73 ;; The most convenient way to initialize the cache is with an | |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
74 ;; `eval-after-load' function, as noted in the ADDING FILES |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
75 ;; AUTOMATICALLY section. |
18388 | 76 ;; |
77 ;; FINDING FILES USING THE CACHE: | |
78 ;; | |
79 ;; You can use the file-cache with any function that expects a filename as | |
80 ;; an argument. For example: | |
81 ;; | |
82 ;; 1) Invoke a function which expects a filename as an argument: | |
83 ;; M-x find-file | |
84 ;; | |
85 ;; 2) Begin typing a file name. | |
86 ;; | |
87 ;; 3) Invoke `file-cache-minibuffer-complete' (bound by default to | |
88 ;; C-TAB) to complete on the filename using the cache. | |
89 ;; | |
90 ;; 4) When you have found a unique completion, the minibuffer contents | |
91 ;; will change to the full name of that file. | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
92 ;; |
18388 | 93 ;; If there are a number of directories which contain the completion, |
94 ;; invoking `file-cache-minibuffer-complete' repeatedly will cycle through | |
95 ;; them. | |
96 ;; | |
97 ;; 5) You can then edit the minibuffer contents, or press RETURN. | |
98 ;; | |
99 ;; It is much easier to simply try it than trying to explain it :) | |
100 ;; | |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
101 ;;; ADDING FILES AUTOMATICALLY |
18388 | 102 ;; |
103 ;; For maximum utility, you should probably define an `eval-after-load' | |
104 ;; form which loads your favorite files: | |
105 ;; | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
106 ;; (eval-after-load |
18388 | 107 ;; "filecache" |
108 ;; '(progn | |
109 ;; (message "Loading file cache...") | |
110 ;; (file-cache-add-directory-using-find "~/projects") | |
111 ;; (file-cache-add-directory-list load-path) | |
112 ;; (file-cache-add-directory "~/") | |
113 ;; (file-cache-add-file-list (list "~/foo/bar" "~/baz/bar")) | |
114 ;; )) | |
115 ;; | |
116 ;; If you clear and reload the cache frequently, it is probably easiest | |
117 ;; to put your initializations in a function: | |
118 ;; | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
119 ;; (eval-after-load |
18388 | 120 ;; "filecache" |
121 ;; '(my-file-cache-initialize)) | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
122 ;; |
18388 | 123 ;; (defun my-file-cache-initialize () |
124 ;; (interactive) | |
125 ;; (message "Loading file cache...") | |
126 ;; (file-cache-add-directory-using-find "~/projects") | |
127 ;; (file-cache-add-directory-list load-path) | |
128 ;; (file-cache-add-directory "~/") | |
129 ;; (file-cache-add-file-list (list "~/foo/bar" "~/baz/bar")) | |
130 ;; )) | |
131 ;; | |
132 ;; Of course, you can still add files to the cache afterwards, via | |
133 ;; Lisp functions. | |
134 ;; | |
135 ;; RELATED WORK: | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
136 ;; |
18388 | 137 ;; This package is a distant relative of Noah Friedman's fff utilities. |
138 ;; Our goal is pretty similar, but the implementation strategies are | |
139 ;; different. | |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
140 |
18388 | 141 ;;; Code: |
142 | |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
143 (eval-when-compile |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
144 (require 'find-lisp)) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
145 |
20597 | 146 (defgroup file-cache nil |
147 "Find files using a pre-loaded cache." | |
148 :group 'files | |
22250
a77d473867b8
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21886
diff
changeset
|
149 :group 'convenience |
20597 | 150 :prefix "file-cache-") |
151 | |
18388 | 152 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
153 ;; Customization Variables |
18388 | 154 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
155 | |
156 ;; User-modifiable variables | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
157 (defcustom file-cache-filter-regexps |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
158 ;; These are also used in buffers containing lines of file names, |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
159 ;; so the end-of-name is matched with $ rather than \\'. |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
160 (list "~$" "\\.o$" "\\.exe$" "\\.a$" "\\.elc$" ",v$" "\\.output$" |
24340
9d52c9051940
(file-cache-filter-regexps): Added .class.
Richard M. Stallman <rms@gnu.org>
parents:
22250
diff
changeset
|
161 "\\.$" "#$" "\\.class$") |
100171 | 162 "List of regular expressions used as filters by the file cache. |
18388 | 163 File names which match these expressions will not be added to the cache. |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
164 Note that the functions `file-cache-add-file' and `file-cache-add-file-list' |
20597 | 165 do not use this variable." |
166 :type '(repeat regexp) | |
167 :group 'file-cache) | |
18388 | 168 |
20597 | 169 (defcustom file-cache-find-command "find" |
100171 | 170 "External program used by `file-cache-add-directory-using-find'." |
20597 | 171 :type 'string |
172 :group 'file-cache) | |
18388 | 173 |
53729
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
174 (defcustom file-cache-find-command-posix-flag 'not-defined |
100171 | 175 "Set to t, if `file-cache-find-command' handles wildcards POSIX style. |
53729
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
176 This variable is automatically set to nil or non-nil |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
177 if it has the initial value `not-defined' whenever you first |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
178 call the `file-cache-add-directory-using-find'. |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
179 |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
180 Under Windows operating system where Cygwin is available, this value |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
181 should be t." |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
182 :type '(choice (const :tag "Yes" t) |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
183 (const :tag "No" nil) |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
184 (const :tag "Unknown" not-defined)) |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
185 :group 'file-cache) |
2598e11dc4dd
(file-cache-find-posix-p): New function. Detect Cygwin.
Richard M. Stallman <rms@gnu.org>
parents:
53400
diff
changeset
|
186 |
20597 | 187 (defcustom file-cache-locate-command "locate" |
100171 | 188 "External program used by `file-cache-add-directory-using-locate'." |
20597 | 189 :type 'string |
190 :group 'file-cache) | |
18388 | 191 |
192 ;; Minibuffer messages | |
20597 | 193 (defcustom file-cache-no-match-message " [File Cache: No match]" |
194 "Message to display when there is no completion." | |
195 :type 'string | |
196 :group 'file-cache) | |
18388 | 197 |
20597 | 198 (defcustom file-cache-sole-match-message " [File Cache: sole completion]" |
199 "Message to display when there is only one completion." | |
200 :type 'string | |
201 :group 'file-cache) | |
18388 | 202 |
20597 | 203 (defcustom file-cache-non-unique-message |
204 " [File Cache: complete but not unique]" | |
205 "Message to display when there is a non-unique completion." | |
206 :type 'string | |
207 :group 'file-cache) | |
18388 | 208 |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
209 (defcustom file-cache-completion-ignore-case |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
45046
diff
changeset
|
210 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
211 t |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
212 completion-ignore-case) |
25907
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
213 "If non-nil, file-cache completion should ignore case. |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
214 Defaults to the value of `completion-ignore-case'." |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
215 :type 'boolean |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
216 :group 'file-cache) |
25907
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
217 |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
218 (defcustom file-cache-case-fold-search |
49549
99be3a1e2589
Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents:
45046
diff
changeset
|
219 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
220 t |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
221 case-fold-search) |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
222 "If non-nil, file-cache completion should ignore case. |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
223 Defaults to the value of `case-fold-search'." |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
224 :type 'boolean |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
225 :group 'file-cache) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
226 |
53400
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
227 (defcustom file-cache-ignore-case |
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
228 (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) |
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
229 "Non-nil means ignore case when checking completions in the file cache. |
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
230 Defaults to nil on DOS and Windows, and t on other systems." |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
231 :type 'boolean |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
232 :group 'file-cache) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
233 |
18388 | 234 (defvar file-cache-multiple-directory-message nil) |
235 | |
236 ;; Internal variables | |
237 ;; This should be named *Completions* because that's what the function | |
238 ;; switch-to-completions in simple.el expects | |
20597 | 239 (defcustom file-cache-completions-buffer "*Completions*" |
240 "Buffer to display completions when using the file cache." | |
241 :type 'string | |
242 :group 'file-cache) | |
18388 | 243 |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
244 (defcustom file-cache-buffer "*File Cache*" |
20597 | 245 "Buffer to hold the cache of file names." |
246 :type 'string | |
247 :group 'file-cache) | |
18388 | 248 |
20597 | 249 (defcustom file-cache-buffer-default-regexp "^.+$" |
250 "Regexp to match files in `file-cache-buffer'." | |
251 :type 'regexp | |
252 :group 'file-cache) | |
18388 | 253 |
254 (defvar file-cache-last-completion nil) | |
255 | |
256 (defvar file-cache-alist nil | |
106130
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
257 "Internal data structure to hold cache of file names. |
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
258 It is a list of entries of the form (FILENAME DIRNAME1 DIRNAME2 ...) |
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
259 where FILENAME is a file name component and the entry represents N |
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
260 files of names DIRNAME1/FILENAME, DIRNAME2/FILENAME, ...") |
18388 | 261 |
94087
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
262 (defvar file-cache-completions-keymap |
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
263 (let ((map (make-sparse-keymap))) |
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
264 (set-keymap-parent map completion-list-mode-map) |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
265 (define-key map [mouse-2] 'file-cache-choose-completion) |
94087
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
266 (define-key map "\C-m" 'file-cache-choose-completion) |
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
267 map) |
18388 | 268 "Keymap for file cache completions buffer.") |
269 | |
270 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
271 ;; Functions to add files to the cache | |
272 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
273 | |
72783
c05b61ed1101
(file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents:
68651
diff
changeset
|
274 ;;;###autoload |
18388 | 275 (defun file-cache-add-directory (directory &optional regexp) |
276 "Add DIRECTORY to the file cache. | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
277 If the optional REGEXP argument is non-nil, only files which match it will |
18388 | 278 be added to the cache." |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
279 (interactive "DAdd files from directory: ") |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
280 ;; Not an error, because otherwise we can't use load-paths that |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
281 ;; contain non-existent directories. |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
282 (if (not (file-accessible-directory-p directory)) |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
283 (message "Directory %s does not exist" directory) |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
284 (let* ((dir (expand-file-name directory)) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
285 (dir-files (directory-files dir t regexp))) |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
286 ;; Filter out files we don't want to see |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
287 (dolist (file dir-files) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
288 (if (file-directory-p file) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
289 (setq dir-files (delq file dir-files)) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
290 (dolist (regexp file-cache-filter-regexps) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
291 (if (string-match regexp file) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
292 (setq dir-files (delq file dir-files)))))) |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
293 (file-cache-add-file-list dir-files)))) |
18388 | 294 |
72783
c05b61ed1101
(file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents:
68651
diff
changeset
|
295 ;;;###autoload |
18388 | 296 (defun file-cache-add-directory-list (directory-list &optional regexp) |
297 "Add DIRECTORY-LIST (a list of directory names) to the file cache. | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
298 If the optional REGEXP argument is non-nil, only files which match it |
108345
066c6d53b8b9
* filecache.el: Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
299 will be added to the cache. Note that the REGEXP is applied to the |
066c6d53b8b9
* filecache.el: Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
300 files in each directory, not to the directory list itself." |
18388 | 301 (interactive "XAdd files from directory list: ") |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
302 (mapcar |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
303 (lambda (dir) (file-cache-add-directory dir regexp)) |
18388 | 304 directory-list)) |
305 | |
306 (defun file-cache-add-file-list (file-list) | |
307 "Add FILE-LIST (a list of files names) to the file cache." | |
308 (interactive "XFile List: ") | |
309 (mapcar 'file-cache-add-file file-list)) | |
310 | |
311 ;; Workhorse function | |
72783
c05b61ed1101
(file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents:
68651
diff
changeset
|
312 |
c05b61ed1101
(file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents:
68651
diff
changeset
|
313 ;;;###autoload |
18388 | 314 (defun file-cache-add-file (file) |
315 "Add FILE to the file cache." | |
316 (interactive "fAdd File: ") | |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
317 (if (not (file-exists-p file)) |
53982
a8c5903da579
All message and error commands now use prefix `filecache:'
Eli Zaretskii <eliz@is.elta.co.il>
parents:
53751
diff
changeset
|
318 (message "Filecache: file %s does not exist" file) |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
319 (let* ((file-name (file-name-nondirectory file)) |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
320 (dir-name (file-name-directory file)) |
53400
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
321 (the-entry (assoc-string |
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
322 file-name file-cache-alist |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
323 file-cache-ignore-case))) |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
324 ;; Does the entry exist already? |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
325 (if the-entry |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
326 (if (or (and (stringp (cdr the-entry)) |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
327 (string= dir-name (cdr the-entry))) |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
328 (and (listp (cdr the-entry)) |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
329 (member dir-name (cdr the-entry)))) |
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
330 nil |
106130
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
331 (setcdr the-entry (cons dir-name (cdr the-entry)))) |
21886
ca7b274a97d9
(file-cache-add-file): Checks to see if file exists
Richard M. Stallman <rms@gnu.org>
parents:
21045
diff
changeset
|
332 ;; If not, add it to the cache |
106130
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
333 (push (list file-name dir-name) file-cache-alist))))) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
334 |
72783
c05b61ed1101
(file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents:
68651
diff
changeset
|
335 ;;;###autoload |
18388 | 336 (defun file-cache-add-directory-using-find (directory) |
337 "Use the `find' command to add files to the file cache. | |
338 Find is run in DIRECTORY." | |
339 (interactive "DAdd files under directory: ") | |
340 (let ((dir (expand-file-name directory))) | |
58944
d61290cbd2dd
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
58943
diff
changeset
|
341 (when (memq system-type '(windows-nt cygwin)) |
d61290cbd2dd
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
58943
diff
changeset
|
342 (if (eq file-cache-find-command-posix-flag 'not-defined) |
d61290cbd2dd
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
58943
diff
changeset
|
343 (setq file-cache-find-command-posix-flag |
d61290cbd2dd
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
58943
diff
changeset
|
344 (executable-command-find-posix-p file-cache-find-command)))) |
18388 | 345 (set-buffer (get-buffer-create file-cache-buffer)) |
346 (erase-buffer) | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
347 (call-process file-cache-find-command nil |
18388 | 348 (get-buffer file-cache-buffer) nil |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
349 dir "-name" |
58943
30845c637a6a
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
53982
diff
changeset
|
350 (if (memq system-type '(windows-nt cygwin)) |
30845c637a6a
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
53982
diff
changeset
|
351 (if file-cache-find-command-posix-flag |
30845c637a6a
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
53982
diff
changeset
|
352 "\\*" |
30845c637a6a
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
53982
diff
changeset
|
353 "'*'") |
30845c637a6a
(file-cache-add-directory-using-find):
Richard M. Stallman <rms@gnu.org>
parents:
53982
diff
changeset
|
354 "*") |
18388 | 355 "-print") |
356 (file-cache-add-from-file-cache-buffer))) | |
357 | |
72783
c05b61ed1101
(file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents:
68651
diff
changeset
|
358 ;;;###autoload |
18388 | 359 (defun file-cache-add-directory-using-locate (string) |
360 "Use the `locate' command to add files to the file cache. | |
361 STRING is passed as an argument to the locate command." | |
362 (interactive "sAdd files using locate string: ") | |
363 (set-buffer (get-buffer-create file-cache-buffer)) | |
364 (erase-buffer) | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
365 (call-process file-cache-locate-command nil |
18388 | 366 (get-buffer file-cache-buffer) nil |
367 string) | |
368 (file-cache-add-from-file-cache-buffer)) | |
369 | |
72783
c05b61ed1101
(file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents:
68651
diff
changeset
|
370 ;;;###autoload |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
371 (defun file-cache-add-directory-recursively (dir &optional regexp) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
372 "Adds DIR and any subdirectories to the file-cache. |
108345
066c6d53b8b9
* filecache.el: Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
373 This function does not use any external programs. |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
374 If the optional REGEXP argument is non-nil, only files which match it |
108345
066c6d53b8b9
* filecache.el: Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
375 will be added to the cache. Note that the REGEXP is applied to the |
066c6d53b8b9
* filecache.el: Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
376 files in each directory, not to the directory list itself." |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
377 (interactive "DAdd directory: ") |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
378 (require 'find-lisp) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
379 (mapcar |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
380 (function |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
381 (lambda (file) |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
382 (or (file-directory-p file) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
383 (let (filtered) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
384 (dolist (regexp file-cache-filter-regexps) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
385 (and (string-match regexp file) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
386 (setq filtered t))) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
387 filtered) |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
388 (file-cache-add-file file)))) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
389 (find-lisp-find-files dir (if regexp regexp "^")))) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
390 |
18388 | 391 (defun file-cache-add-from-file-cache-buffer (&optional regexp) |
392 "Add any entries found in the file cache buffer. | |
393 Each entry matches the regular expression `file-cache-buffer-default-regexp' | |
394 or the optional REGEXP argument." | |
395 (set-buffer file-cache-buffer) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
396 (dolist (elt file-cache-filter-regexps) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
397 (goto-char (point-min)) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
398 (delete-matching-lines elt)) |
18388 | 399 (goto-char (point-min)) |
400 (let ((full-filename)) | |
401 (while (re-search-forward | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
402 (or regexp file-cache-buffer-default-regexp) |
18388 | 403 (point-max) t) |
404 (setq full-filename (buffer-substring-no-properties | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
405 (match-beginning 0) (match-end 0))) |
18388 | 406 (file-cache-add-file full-filename)))) |
407 | |
408 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
409 ;; Functions to delete from the cache | |
410 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
411 | |
412 (defun file-cache-clear-cache () | |
413 "Clear the file cache." | |
414 (interactive) | |
415 (setq file-cache-alist nil)) | |
416 | |
417 ;; This clears *all* files with the given name | |
418 (defun file-cache-delete-file (file) | |
419 "Delete FILE from the file cache." | |
420 (interactive | |
421 (list (completing-read "Delete file from cache: " file-cache-alist))) | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
422 (setq file-cache-alist |
53400
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
423 (delq (assoc-string file file-cache-alist file-cache-ignore-case) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
424 file-cache-alist))) |
18388 | 425 |
426 (defun file-cache-delete-file-list (file-list) | |
427 "Delete FILE-LIST (a list of files) from the file cache." | |
428 (interactive "XFile List: ") | |
429 (mapcar 'file-cache-delete-file file-list)) | |
430 | |
431 (defun file-cache-delete-file-regexp (regexp) | |
432 "Delete files matching REGEXP from the file cache." | |
433 (interactive "sRegexp: ") | |
434 (let ((delete-list)) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
435 (dolist (elt file-cache-alist) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
436 (and (string-match regexp (car elt)) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
437 (push (car elt) delete-list))) |
18388 | 438 (file-cache-delete-file-list delete-list) |
53982
a8c5903da579
All message and error commands now use prefix `filecache:'
Eli Zaretskii <eliz@is.elta.co.il>
parents:
53751
diff
changeset
|
439 (message "Filecache: deleted %d files from file cache" |
a8c5903da579
All message and error commands now use prefix `filecache:'
Eli Zaretskii <eliz@is.elta.co.il>
parents:
53751
diff
changeset
|
440 (length delete-list)))) |
18388 | 441 |
442 (defun file-cache-delete-directory (directory) | |
443 "Delete DIRECTORY from the file cache." | |
444 (interactive "DDelete directory from file cache: ") | |
445 (let ((dir (expand-file-name directory)) | |
446 (result 0)) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
447 (dolist (entry file-cache-alist) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
448 (if (file-cache-do-delete-directory dir entry) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
449 (setq result (1+ result)))) |
18388 | 450 (if (zerop result) |
53982
a8c5903da579
All message and error commands now use prefix `filecache:'
Eli Zaretskii <eliz@is.elta.co.il>
parents:
53751
diff
changeset
|
451 (error "Filecache: no entries containing %s found in cache" directory) |
a8c5903da579
All message and error commands now use prefix `filecache:'
Eli Zaretskii <eliz@is.elta.co.il>
parents:
53751
diff
changeset
|
452 (message "Filecache: deleted %d entries" result)))) |
18388 | 453 |
454 (defun file-cache-do-delete-directory (dir entry) | |
455 (let ((directory-list (cdr entry)) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
456 (directory (file-cache-canonical-directory dir))) |
18388 | 457 (and (member directory directory-list) |
458 (if (equal 1 (length directory-list)) | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
459 (setq file-cache-alist |
18388 | 460 (delq entry file-cache-alist)) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
461 (setcdr entry (delete directory directory-list)))))) |
18388 | 462 |
463 (defun file-cache-delete-directory-list (directory-list) | |
464 "Delete DIRECTORY-LIST (a list of directories) from the file cache." | |
465 (interactive "XDirectory List: ") | |
466 (mapcar 'file-cache-delete-directory directory-list)) | |
467 | |
468 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
469 ;; Utility functions | |
470 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
471 | |
472 ;; Returns the name of a directory for a file in the cache | |
473 (defun file-cache-directory-name (file) | |
53400
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
474 (let* ((directory-list (cdr (assoc-string |
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
475 file file-cache-alist |
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
476 file-cache-ignore-case))) |
18388 | 477 (len (length directory-list)) |
478 (directory) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
479 (num)) |
18388 | 480 (if (not (listp directory-list)) |
53982
a8c5903da579
All message and error commands now use prefix `filecache:'
Eli Zaretskii <eliz@is.elta.co.il>
parents:
53751
diff
changeset
|
481 (error "Filecache: unknown type in file-cache-alist for key %s" file)) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
482 (cond |
18388 | 483 ;; Single element |
484 ((eq 1 len) | |
485 (setq directory (elt directory-list 0))) | |
486 ;; No elements | |
487 ((eq 0 len) | |
53982
a8c5903da579
All message and error commands now use prefix `filecache:'
Eli Zaretskii <eliz@is.elta.co.il>
parents:
53751
diff
changeset
|
488 (error "Filecache: no directory found for key %s" file)) |
18388 | 489 ;; Multiple elements |
490 (t | |
34072
24c9291f8fa8
(file-cache-directory-name, file-cache-minibuffer-complete):
Miles Bader <miles@gnu.org>
parents:
34070
diff
changeset
|
491 (let* ((minibuffer-dir (file-name-directory (minibuffer-contents))) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
492 (dir-list (member minibuffer-dir directory-list))) |
18388 | 493 (setq directory |
494 ;; If the directory is in the list, return the next element | |
495 ;; Otherwise, return the first element | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
496 (if dir-list |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
497 (or (elt directory-list |
18388 | 498 (setq num (1+ (- len (length dir-list))))) |
499 (elt directory-list (setq num 0))) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
500 (elt directory-list (setq num 0))))))) |
18388 | 501 ;; If there were multiple directories, set up a minibuffer message |
502 (setq file-cache-multiple-directory-message | |
503 (and num (format " [%d of %d]" (1+ num) len))) | |
504 directory)) | |
505 | |
506 ;; Returns the name of a file in the cache | |
507 (defun file-cache-file-name (file) | |
508 (let ((directory (file-cache-directory-name file))) | |
509 (concat directory file))) | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
510 |
18388 | 511 ;; Return a canonical directory for comparison purposes. |
512 ;; Such a directory ends with a forward slash. | |
513 (defun file-cache-canonical-directory (dir) | |
514 (let ((directory dir)) | |
515 (if (not (char-equal ?/ (string-to-char (substring directory -1)))) | |
516 (concat directory "/") | |
517 directory))) | |
518 | |
519 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
520 ;; Minibuffer functions | |
521 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
522 | |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
523 ;; The prefix argument works around a bug in the minibuffer completion. |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
524 ;; The completion function doesn't distinguish between the states: |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
525 ;; |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
526 ;; "Multiple completions of name" (eg, Makefile, Makefile.in) |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
527 ;; "Name available in multiple directories" (/tmp/Makefile, ~me/Makefile) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
528 ;; |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
529 ;; The default is to do the former; a prefix arg forces the latter. |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
530 |
18388 | 531 ;;;###autoload |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
532 (defun file-cache-minibuffer-complete (arg) |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
533 "Complete a filename in the minibuffer using a preloaded cache. |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
534 Filecache does two kinds of substitution: it completes on names in |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
535 the cache, and, once it has found a unique name, it cycles through |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
536 the directories that the name is available in. With a prefix argument, |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
537 the name is considered already unique; only the second substitution |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
538 \(directories) is done." |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
539 (interactive "P") |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
540 (let* |
18388 | 541 ( |
25907
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
542 (completion-ignore-case file-cache-completion-ignore-case) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
543 (case-fold-search file-cache-case-fold-search) |
34072
24c9291f8fa8
(file-cache-directory-name, file-cache-minibuffer-complete):
Miles Bader <miles@gnu.org>
parents:
34070
diff
changeset
|
544 (string (file-name-nondirectory (minibuffer-contents))) |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
545 (completion-string (try-completion string file-cache-alist)) |
18388 | 546 (completion-list) |
547 (len) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
548 (file-cache-string)) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
549 (cond |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
550 ;; If it's the only match, replace the original contents |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
551 ((or arg (eq completion-string t)) |
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
552 (setq file-cache-string (file-cache-file-name string)) |
34072
24c9291f8fa8
(file-cache-directory-name, file-cache-minibuffer-complete):
Miles Bader <miles@gnu.org>
parents:
34070
diff
changeset
|
553 (if (string= file-cache-string (minibuffer-contents)) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
554 (minibuffer-message file-cache-sole-match-message) |
34072
24c9291f8fa8
(file-cache-directory-name, file-cache-minibuffer-complete):
Miles Bader <miles@gnu.org>
parents:
34070
diff
changeset
|
555 (delete-minibuffer-contents) |
41568
1aef79dfa6fe
(file-cache-minibuffer-complete): Use insert instead of insert-string.
Pavel Janík <Pavel@Janik.cz>
parents:
34072
diff
changeset
|
556 (insert file-cache-string) |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
557 (if file-cache-multiple-directory-message |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
558 (minibuffer-message file-cache-multiple-directory-message)))) |
20578
7eb29ad824eb
(file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents:
18388
diff
changeset
|
559 |
18388 | 560 ;; If it's the longest match, insert it |
561 ((stringp completion-string) | |
562 ;; If we've already inserted a unique string, see if the user | |
563 ;; wants to use that one | |
564 (if (and (string= string completion-string) | |
53400
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
565 (assoc-string string file-cache-alist |
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
566 file-cache-ignore-case)) |
18388 | 567 (if (and (eq last-command this-command) |
568 (string= file-cache-last-completion completion-string)) | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
569 (progn |
34072
24c9291f8fa8
(file-cache-directory-name, file-cache-minibuffer-complete):
Miles Bader <miles@gnu.org>
parents:
34070
diff
changeset
|
570 (delete-minibuffer-contents) |
41568
1aef79dfa6fe
(file-cache-minibuffer-complete): Use insert instead of insert-string.
Pavel Janík <Pavel@Janik.cz>
parents:
34072
diff
changeset
|
571 (insert (file-cache-file-name completion-string)) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
572 (setq file-cache-last-completion nil)) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
573 (minibuffer-message file-cache-non-unique-message) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
574 (setq file-cache-last-completion string)) |
18388 | 575 (setq file-cache-last-completion string) |
576 (setq completion-list (all-completions string file-cache-alist) | |
577 len (length completion-list)) | |
578 (if (> len 1) | |
579 (progn | |
580 (goto-char (point-max)) | |
41568
1aef79dfa6fe
(file-cache-minibuffer-complete): Use insert instead of insert-string.
Pavel Janík <Pavel@Janik.cz>
parents:
34072
diff
changeset
|
581 (insert |
18388 | 582 (substring completion-string (length string))) |
583 ;; Add our own setup function to the Completions Buffer | |
584 (let ((completion-setup-hook | |
94087
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
585 (append completion-setup-hook |
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
586 (list 'file-cache-completion-setup-function)))) |
18388 | 587 (with-output-to-temp-buffer file-cache-completions-buffer |
94087
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
588 (display-completion-list completion-list string)))) |
18388 | 589 (setq file-cache-string (file-cache-file-name completion-string)) |
34072
24c9291f8fa8
(file-cache-directory-name, file-cache-minibuffer-complete):
Miles Bader <miles@gnu.org>
parents:
34070
diff
changeset
|
590 (if (string= file-cache-string (minibuffer-contents)) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
591 (minibuffer-message file-cache-sole-match-message) |
34072
24c9291f8fa8
(file-cache-directory-name, file-cache-minibuffer-complete):
Miles Bader <miles@gnu.org>
parents:
34070
diff
changeset
|
592 (delete-minibuffer-contents) |
41568
1aef79dfa6fe
(file-cache-minibuffer-complete): Use insert instead of insert-string.
Pavel Janík <Pavel@Janik.cz>
parents:
34072
diff
changeset
|
593 (insert file-cache-string) |
18388 | 594 (if file-cache-multiple-directory-message |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
595 (minibuffer-message file-cache-multiple-directory-message))) |
18388 | 596 ))) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
597 |
18388 | 598 ;; No match |
599 ((eq completion-string nil) | |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
600 (minibuffer-message file-cache-no-match-message))))) |
18388 | 601 |
602 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
603 ;; Completion functions | |
604 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
605 | |
606 (defun file-cache-completion-setup-function () | |
94087
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
607 (with-current-buffer standard-output ;; i.e. file-cache-completions-buffer |
d23d9685c214
(file-cache-completions-keymap): Move init from
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
608 (use-local-map file-cache-completions-keymap))) |
18388 | 609 |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
610 (defun file-cache-choose-completion (&optional event) |
18388 | 611 "Choose a completion in the `*Completions*' buffer." |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
612 (interactive (list last-nonmenu-event)) |
18388 | 613 (let ((completion-no-auto-exit t)) |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
614 (choose-completion event) |
18388 | 615 (select-window (active-minibuffer-window)) |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
616 (file-cache-minibuffer-complete nil))) |
18388 | 617 |
105741
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
618 (define-obsolete-function-alias 'file-cache-mouse-choose-completion |
90bde63d7310
(file-cache-completions-keymap): Bind mouse-2 to
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
619 'file-cache-choose-completion "23.2") |
18388 | 620 |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
621 (defun file-cache-complete () |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
622 "Complete the word at point, using the filecache." |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
623 (interactive) |
106130
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
624 (let ((start |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
625 (save-excursion |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
626 (skip-syntax-backward "^\"") |
106130
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
627 (point)))) |
a035929f0418
(file-cache-add-file): Use push and cons.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105741
diff
changeset
|
628 (completion-in-region start (point) file-cache-alist))) |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
629 |
18388 | 630 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
25907
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
631 ;; Show parts of the cache |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
632 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
633 |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
634 (defun file-cache-files-matching-internal (regexp) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
635 "Output a list of files whose names (not including directories) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
636 match REGEXP." |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
637 (let ((results)) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
638 (dolist (cache-element file-cache-alist) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
639 (and (string-match regexp (elt cache-element 0)) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
640 (push (elt cache-element 0) results))) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
641 (nreverse results))) |
25907
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
642 |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
643 (defun file-cache-files-matching (regexp) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
644 "Output a list of files whose names (not including directories) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
645 match REGEXP." |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
646 (interactive "sFind files matching regexp: ") |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
647 (let ((results |
25907
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
648 (file-cache-files-matching-internal regexp)) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
649 buf) |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
650 (set-buffer |
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
651 (setq buf (get-buffer-create |
25907
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
652 "*File Cache Files Matching*"))) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
653 (erase-buffer) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
654 (insert |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
655 (mapconcat |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
656 'identity |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
657 results |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
658 "\n")) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
659 (goto-char (point-min)) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
660 (display-buffer buf))) |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
661 |
10d0bb886b1e
(file-cache-completion-ignore-case): New variable,
Gerd Moellmann <gerd@gnu.org>
parents:
24340
diff
changeset
|
662 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
18388 | 663 ;; Debugging functions |
664 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
665 | |
666 (defun file-cache-debug-read-from-minibuffer (file) | |
667 "Debugging function." | |
31235
5102c4c410c2
Added file-cache-case-fold-search and file-cache-assoc-function variables
Peter Breton <pbreton@attbi.com>
parents:
25907
diff
changeset
|
668 (interactive |
18388 | 669 (list (completing-read "File Cache: " file-cache-alist))) |
53400
01072e418fa4
(file-cache-ignore-case): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
670 (message "%s" (assoc-string file file-cache-alist |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
671 file-cache-ignore-case))) |
18388 | 672 |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
673 (defun file-cache-display () |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
674 "Display the file cache." |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
675 (interactive) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
676 (let ((buf "*File Cache Contents*")) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
677 (with-current-buffer |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
678 (get-buffer-create buf) |
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
679 (erase-buffer) |
106324
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
680 (dolist (item file-cache-alist) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
681 (insert (nth 1 item) (nth 0 item) "\n")) |
279e568f6ec1
Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
106130
diff
changeset
|
682 (pop-to-buffer buf)))) |
50263
1f6e75676769
Add file-cache-add-directory-recursively function
Peter Breton <pbreton@attbi.com>
parents:
49549
diff
changeset
|
683 |
18388 | 684 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
685 ;; Keybindings | |
686 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
687 | |
688 (provide 'filecache) | |
689 | |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
690 ;; arch-tag: 433d3ca4-4af2-47ce-b2cf-1f727460f538 |
18388 | 691 ;;; filecache.el ends here |