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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106324
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; The file-cache package is an attempt to make it easy to locate files
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; by name, without having to remember exactly where they are located.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; This is very handy when working with source trees. You can also add
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; frequently used files to the cache to create a hotlist effect.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; The cache can be used with any interactive command which takes a
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; filename as an argument.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; It is worth noting that this package works best when most of the files
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; in the cache have unique names, or (if they have the same name) exist in
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; only a few directories. The worst case is many files all with
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; the same name and in different directories, for example a big source tree
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; with a Makefile in each directory. In such a case, you should probably
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; use an alternate strategy to find the files.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; ADDING FILES TO THE CACHE:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; * `file-cache-add-file': Adds a single file to the cache
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; * `file-cache-add-file-list': Adds a list of files to the cache
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; The following functions use the regular expressions in
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; * `file-cache-add-directory': Adds the files in a directory to the
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; cache. You can also specify a regular expression to match the files
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; which should be added.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; * `file-cache-add-directory-list': Same as above, but acts on a list
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; of directories. You can use `load-path', `exec-path' and the like.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; * `file-cache-add-directory-using-find': Uses the `find' command to
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; add a directory tree to the cache.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; * `file-cache-add-directory-using-locate': Uses the `locate' command to
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; add files matching a pattern to the cache.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; Use the function `file-cache-clear-cache' to remove all items from the
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; cache. There are a number of `file-cache-delete' functions provided
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; as well, but in general it is probably better to not worry too much
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; about extra files in the cache.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; FINDING FILES USING THE CACHE:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; You can use the file-cache with any function that expects a filename as
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; an argument. For example:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; 1) Invoke a function which expects a filename as an argument:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; M-x find-file
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; 2) Begin typing a file name.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; 3) Invoke `file-cache-minibuffer-complete' (bound by default to
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; C-TAB) to complete on the filename using the cache.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; 4) When you have found a unique completion, the minibuffer contents
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;; If there are a number of directories which contain the completion,
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;; invoking `file-cache-minibuffer-complete' repeatedly will cycle through
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;; them.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; 5) You can then edit the minibuffer contents, or press RETURN.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; It is much easier to simply try it than trying to explain it :)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; For maximum utility, you should probably define an `eval-after-load'
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; form which loads your favorite files:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; "filecache"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; '(progn
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; (message "Loading file cache...")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;; (file-cache-add-directory-using-find "~/projects")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; (file-cache-add-directory-list load-path)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; (file-cache-add-directory "~/")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;; (file-cache-add-file-list (list "~/foo/bar" "~/baz/bar"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; ))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;; If you clear and reload the cache frequently, it is probably easiest
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;; to put your initializations in a function:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;; "filecache"
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; (defun my-file-cache-initialize ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; (message "Loading file cache...")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; (file-cache-add-directory-using-find "~/projects")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; (file-cache-add-directory-list load-path)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; (file-cache-add-directory "~/")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; (file-cache-add-file-list (list "~/foo/bar" "~/baz/bar"))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;; ))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ;; Of course, you can still add files to the cache afterwards, via
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;; Lisp functions.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 ;; This package is a distant relative of Noah Friedman's fff utilities.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 ;; Our goal is pretty similar, but the implementation strategies are
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;; different.
20578
7eb29ad824eb (file-cache-minibuffer-complete): Accept a prefix arg.
Richard M. Stallman <rms@gnu.org>
parents: 18388
diff changeset
140
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;;; Code:
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
146 (defgroup file-cache nil
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
147 "Find files using a pre-loaded cache."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
148 :group 'files
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21886
diff changeset
149 :group 'convenience
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
150 :prefix "file-cache-")
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
151
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
162 "List of regular expressions used as filters by the file cache.
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
165 do not use this variable."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
166 :type '(repeat regexp)
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
167 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
169 (defcustom file-cache-find-command "find"
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
170 "External program used by `file-cache-add-directory-using-find'."
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
171 :type 'string
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
172 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
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
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
187 (defcustom file-cache-locate-command "locate"
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
188 "External program used by `file-cache-add-directory-using-locate'."
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
189 :type 'string
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
190 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 ;; Minibuffer messages
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
193 (defcustom file-cache-no-match-message " [File Cache: No match]"
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
194 "Message to display when there is no completion."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
195 :type 'string
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
196 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
198 (defcustom file-cache-sole-match-message " [File Cache: sole completion]"
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
199 "Message to display when there is only one completion."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
200 :type 'string
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
201 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
203 (defcustom file-cache-non-unique-message
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
204 " [File Cache: complete but not unique]"
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
205 "Message to display when there is a non-unique completion."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
206 :type 'string
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
207 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (defvar file-cache-multiple-directory-message nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;; Internal variables
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 ;; This should be named *Completions* because that's what the function
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;; switch-to-completions in simple.el expects
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
239 (defcustom file-cache-completions-buffer "*Completions*"
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
240 "Buffer to display completions when using the file cache."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
241 :type 'string
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
242 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
245 "Buffer to hold the cache of file names."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
246 :type 'string
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
247 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
20597
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
249 (defcustom file-cache-buffer-default-regexp "^.+$"
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
250 "Regexp to match files in `file-cache-buffer'."
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
251 :type 'regexp
886039ba7b3e Customized.
Andreas Schwab <schwab@suse.de>
parents: 20578
diff changeset
252 :group 'file-cache)
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (defvar file-cache-last-completion nil)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 "Keymap for file cache completions buffer.")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 ;; Functions to add files to the cache
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
72783
c05b61ed1101 (file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents: 68651
diff changeset
274 ;;;###autoload
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (defun file-cache-add-directory (directory &optional regexp)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
72783
c05b61ed1101 (file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents: 68651
diff changeset
295 ;;;###autoload
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 (defun file-cache-add-directory-list (directory-list &optional regexp)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 directory-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 (defun file-cache-add-file-list (file-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 "Add FILE-LIST (a list of files names) to the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (interactive "XFile List: ")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 (mapcar 'file-cache-add-file file-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (defun file-cache-add-file (file)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 "Add FILE to the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 (defun file-cache-add-directory-using-find (directory)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 "Use the `find' command to add files to the file cache.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 Find is run in DIRECTORY."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (interactive "DAdd files under directory: ")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (set-buffer (get-buffer-create file-cache-buffer))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 "-print")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (file-cache-add-from-file-cache-buffer)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357
72783
c05b61ed1101 (file-cache-add-directory)
Reiner Steib <Reiner.Steib@gmx.de>
parents: 68651
diff changeset
358 ;;;###autoload
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (defun file-cache-add-directory-using-locate (string)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 "Use the `locate' command to add files to the file cache.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 STRING is passed as an argument to the locate command."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (interactive "sAdd files using locate string: ")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 (set-buffer (get-buffer-create file-cache-buffer))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 (get-buffer file-cache-buffer) nil
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 string)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 (file-cache-add-from-file-cache-buffer))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 (defun file-cache-add-from-file-cache-buffer (&optional regexp)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 "Add any entries found in the file cache buffer.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 Each entry matches the regular expression `file-cache-buffer-default-regexp'
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 or the optional REGEXP argument."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (goto-char (point-min))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 (let ((full-filename))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (point-max) t)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 (file-cache-add-file full-filename))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 ;; Functions to delete from the cache
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (defun file-cache-clear-cache ()
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 "Clear the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (interactive)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 (setq file-cache-alist nil))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 ;; This clears *all* files with the given name
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (defun file-cache-delete-file (file)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 "Delete FILE from the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (interactive
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (defun file-cache-delete-file-list (file-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 "Delete FILE-LIST (a list of files) from the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (interactive "XFile List: ")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 (mapcar 'file-cache-delete-file file-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 (defun file-cache-delete-file-regexp (regexp)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 "Delete files matching REGEXP from the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (interactive "sRegexp: ")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (defun file-cache-delete-directory (directory)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 "Delete DIRECTORY from the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (interactive "DDelete directory from file cache: ")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (let ((dir (expand-file-name directory))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (defun file-cache-do-delete-directory (dir entry)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (and (member directory directory-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (defun file-cache-delete-directory-list (directory-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 "Delete DIRECTORY-LIST (a list of directories) from the file cache."
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 (interactive "XDirectory List: ")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 (mapcar 'file-cache-delete-directory directory-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 ;; Utility functions
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 ;; Returns the name of a directory for a file in the cache
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 (len (length directory-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (directory)
106324
279e568f6ec1 Minor cleanup and simplification.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 106130
diff changeset
479 (num))
18388
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 ;; Single element
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 ((eq 1 len)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 (setq directory (elt directory-list 0)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 ;; No elements
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 ;; Multiple elements
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 (setq directory
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 ;; If the directory is in the list, return the next element
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 (setq num (1+ (- len (length dir-list)))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 ;; If there were multiple directories, set up a minibuffer message
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 (setq file-cache-multiple-directory-message
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (and num (format " [%d of %d]" (1+ num) len)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 directory))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 ;; Returns the name of a file in the cache
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (defun file-cache-file-name (file)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (let ((directory (file-cache-directory-name file)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 ;; Return a canonical directory for comparison purposes.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 ;; Such a directory ends with a forward slash.
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 (defun file-cache-canonical-directory (dir)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 (let ((directory dir))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 (if (not (char-equal ?/ (string-to-char (substring directory -1))))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 (concat directory "/")
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 directory)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 ;; Minibuffer functions
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 (completion-list)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 ;; If it's the longest match, insert it
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 ((stringp completion-string)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 ;; If we've already inserted a unique string, see if the user
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ;; wants to use that one
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 (if (and (eq last-command this-command)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (setq file-cache-last-completion string)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (setq completion-list (all-completions string file-cache-alist)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 len (length completion-list))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (if (> len 1)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (progn
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (substring completion-string (length string)))
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 ;; Add our own setup function to the Completions Buffer
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 ;; No match
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 ;; Completion functions
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 ;; Debugging functions
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 (defun file-cache-debug-read-from-minibuffer (file)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 ;; Keybindings
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (provide 'filecache)
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7e14277c51f3 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 ;;; filecache.el ends here