annotate lisp/find-cmd.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 5df8e547a422
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
1 ;;; find-cmd.el --- Build a valid find(1) command with sexps
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106606
diff changeset
3 ;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
5 ;; Author: Philip Jackson <phil@shellarchive.co.uk>
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
6 ;; Version: 0.6
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
7
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94469
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
94468
cb52c7da8482 Another new file, another license notice to update.
Glenn Morris <rgm@gnu.org>
parents: 94466
diff changeset
11 ;; 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: 94469
diff changeset
12 ;; 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: 94469
diff changeset
13 ;; (at your option) any later version.
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14
94468
cb52c7da8482 Another new file, another license notice to update.
Glenn Morris <rgm@gnu.org>
parents: 94466
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
cb52c7da8482 Another new file, another license notice to update.
Glenn Morris <rgm@gnu.org>
parents: 94466
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
cb52c7da8482 Another new file, another license notice to update.
Glenn Morris <rgm@gnu.org>
parents: 94466
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cb52c7da8482 Another new file, another license notice to update.
Glenn Morris <rgm@gnu.org>
parents: 94466
diff changeset
18 ;; GNU General Public License for more details.
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; 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: 94469
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 ;;; Commentary:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 ;; With this module you can build up a (hopefully) valid find(1)
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
26 ;; string ready for the command line. For example:
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 ;; (find-cmd '(prune (name ".svn" ".git" ".CVS"))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29 ;; '(and (or (name "*.pl" "*.pm" "*.t")
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 ;; (mtime "+1"))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 ;; (fstype "nfs" "ufs"))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33 ;; will become (un-wrapped):
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35 ;; "find '/home/phil/' \\( \\( -name '.svn' -or -name '.git' -or
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36 ;; -name '.CVS' \\) -prune -or -true \\) \\( \\( \\( -name '*.pl'
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 ;; -or -name '*.pm' -or -name '*.t' \\) -or -mtime '+1' \\) -and \\(
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38 ;; -fstype 'nfs' -or -fstype 'ufs' \\) \\)"
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39
94469
cacb4cb4b5bd (top-level): Does not need cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 94468
diff changeset
40 ;;; Code:
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 (defconst find-constituents
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43 '((and . find-and)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44 (not . find-not)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45 (or . find-or)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47 (a . find-and)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 (n . find-not)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49 (o . find-or)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 (prune . find-prune)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 ;; switches
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 (L . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 (P . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 (H . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58 ;; generic tests
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 (amin . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 (anewer . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61 (atime . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 (cmin . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63 (cnewer . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 (ctime . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 (empty . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 (false . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 (fstype . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68 (gid . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 (group . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 (ilname . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 (iname . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72 (inum . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 (iwholename . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74 (iregex . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75 (links . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 (lname . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 (mmin . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78 (mtime . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 (name . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 (newer . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 (nouser . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 (nogroup . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 (path . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 (perm . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85 (regex . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
86 (wholename . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 (size . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 (true . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 (type . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 (uid . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 (used . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 (user . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 (xtype . (nil))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 ;; normal options (always true)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 (depth . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 (maxdepth . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
98 (mindepth . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
99 (mount . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
100 (noleaf . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
101 (xdev . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102 (ignore_readdir_race . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
103 (noignore_readdir_race . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
104
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 ;; actions
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106 (delete . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107 (print0 . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108 (printf . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109 (fprintf . (2))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 (print . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 (fprint0 . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112 (fprint . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113 (ls . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 (fls . (1))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 (prune . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
116 (quit . (0))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
117
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118 ;; these need to be terminated with a ;
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
119 (exec . (1 find-command t))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 (ok . (1 find-command t))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121 (execdir . (1 find-command t))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
122 (okdir . (1 find-command t)))
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
123 "Holds details of each of the find options.
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
124 The car of each alist is the name. The cdr is minimum args, the
106840
5df8e547a422 Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 106815
diff changeset
125 function used to join many occurrences of the argument together,
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
126 and whether or not to leave quotes off the string (non-nil means
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
127 the string will be quoted).")
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129 ;;;###autoload
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
130 (defun find-cmd (&rest subfinds)
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
131 "Initiate the building of a find command.
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
132 For example:
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 \(find-cmd '\(prune \(name \".svn\" \".git\" \".CVS\"\)\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 '\(and \(or \(name \"*.pl\" \"*.pm\" \"*.t\"\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136 \(mtime \"+1\"\)\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137 \(fstype \"nfs\" \"ufs\"\)\)\)\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
139 `default-directory' is used as the initial search path. The
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 result is a string that should be ready for the command line."
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141 (concat
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 "find " (shell-quote-argument (expand-file-name default-directory)) " "
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143 (cond
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
144 ((cdr subfinds)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 (mapconcat 'find-to-string subfinds ""))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
146 (t
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147 (find-to-string (car subfinds))))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149 (defun find-and (form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 "And FORMs together, so:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
151 \(and \(mtime \"+1\"\) \(name \"something\"\)\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
152 will produce:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153 find . \\\( -mtime '+1' -and -name 'something' \\\)"
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154 (if (< (length form) 2)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155 (find-to-string (car form))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 (concat "\\( "
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157 (mapconcat 'find-to-string form "-and ")
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158 "\\) ")))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160 (defun find-or (form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 "Or FORMs together, so:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
162 \(or \(mtime \"+1\"\) \(name \"something\"\)\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163 will produce:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 find . \\\( -mtime '+1' -or -name 'something' \\\)"
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165 (if (< (length form) 2)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 (find-to-string (car form))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 (concat "\\( "
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 (mapconcat 'find-to-string form "-or ")
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169 "\\) ")))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
170
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 (defun find-not (form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172 "Or FORMs together and prefix with a -not, so:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 \(not \(mtime \"+1\"\) \(name \"something\"\)\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174 will produce:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175 -not \\\( -mtime '+1' -or -name 'something' \\\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 If you wanted the FORMs -and(ed) together instead then this would
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177 suffice:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178 \(not \(and \(mtime \"+1\"\) \(name \"something\"\)\)\)"
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
179 (concat "-not " (find-or (mapcar 'find-to-string form))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
180
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
181 (defun find-prune (form)
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
182 "-or together FORMs postfix '-prune' and then -or that with a
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183 -true, so:
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
184 \(prune \(name \".svn\" \".git\"\)\) \(name \"*.pm\"\)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 will produce (unwrapped):
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
186 \\\( \\\( \\\( -name '.svn' -or -name '.git' \\\) /
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187 -prune -or -true \\\) -and -name '*.pm' \\\)"
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188 (find-or
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189 (list
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 (concat (find-or (mapcar 'find-to-string form)) (find-generic "prune"))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
191 (find-generic "true"))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
192
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193 (defun find-generic (option &optional oper argcount args dont-quote)
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
194 "Allow an arbitrary string to be used as a form.
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
195 OPTION is the name of the form, OPER is the function used to either
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
196 OR or AND multiple results together. ARGCOUNT is the minimum of
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
197 args that OPTION can receive and ARGS are the arguments for OPTION.
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
198 If DONT-QUOTE is non-nil, arguments are quoted for passing them to
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
199 the shell."
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200 (when (and (numberp argcount) (< (length args) argcount))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
201 (error "'%s' needs at least %d arguments" option argcount))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
202 (let ((oper (or oper 'find-or)))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
203 (if (and args (length args))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
204 (funcall oper (mapcar (lambda (x)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
205 (concat "-" option
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
206 (if dont-quote
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
207 (concat " " x " ")
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
208 (concat " "
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
209 (shell-quote-argument x)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
210 " "))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
211 args))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
212 (concat "-" option " "))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
213
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
214 (defun find-command (form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
215 "For each item in FORM add a terminating semi-colon and turn
106606
127ccb50f94e Some doc fixes (more needed).
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
216 them into valid switches. The result is -and(ed) together."
94466
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
217 (find-and (mapcar (lambda (x)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
218 (concat (find-to-string x) "\\; "))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
219 form)))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
220
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221 (defun find-to-string (form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 "Parse FORM to produce a set of valid find arguments."
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 (cond
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 ((stringp form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225 form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
226 ((consp form)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
227 (let ((option (cdr (assoc (car form) find-constituents))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
228 (cond
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
229 ((and (symbolp option) (fboundp option))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
230 (funcall option (cdr form)))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
231 ((consp option)
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
232 (let ((option (symbol-name (car form)))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
233 (argcnt (car option))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
234 (oper (cadr option))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
235 (dont-quote (car (cddr option))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
236 (find-to-string
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
237 (find-generic option oper argcnt (cdr form) dont-quote))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
238 (t
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239 (error "Sorry I don't know how to handle '%s'" (car form))))))))
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240
f3f81db34133 New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 (provide 'find-cmd)
94469
cacb4cb4b5bd (top-level): Does not need cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 94468
diff changeset
242
cacb4cb4b5bd (top-level): Does not need cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 94468
diff changeset
243 ;; arch-tag: 9687fd9e-4e90-4022-864a-f904526e2046
cacb4cb4b5bd (top-level): Does not need cl when compiling.
Glenn Morris <rgm@gnu.org>
parents: 94468
diff changeset
244 ;;; find-cmd.el ends here