annotate lisp/find-dired.el @ 18092:8428d56cd207

(smtpmail-via-smtp): Recognize XVRB as a synonym for VERB and XONE as a synonym for ONEX. (smtpmail-read-response): Add "%s" to `message' calls to avoid problems with percent signs in strings. (smtpmail-read-response): Return all lines of the response text as a list of strings. Formerly only the first line was returned. This is insufficient when one wants to parse e.g. an EHLO response. Ignore responses starting with "0". This is necessary to support the VERB SMTP extension. (smtpmail-via-smtp): Try EHLO and find out which SMTP service extensions the receiving mailer supports. Issue the ONEX and XUSR commands if the corresponding extensions are supported. Issue VERB if supported and `smtpmail-debug-info' is non-nil. Add SIZE attribute to MAIL FROM: command if SIZE extension is supported. Add code that could set the BODY= attribute to MAIL FROM: if the receiving mailer supports 8BITMIME. This is currently disabled, since doing it right might involve adding MIME headers to, and in some cases reencoding, the message.
author Richard M. Stallman <rms@gnu.org>
date Sun, 01 Jun 1997 22:24:22 +0000
parents 4fa015c0a620
children 717e09103d06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2230
6314334d7c2b Add standard library headers.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1225
diff changeset
1 ;;; find-dired.el --- run a `find' command and dired the output
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
3 ;; Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
1225
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
5 ;; Author: Roland McGrath <roland@gnu.ai.mit.edu>,
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
6 ;; Sebastian Kremer <sk@thp.uni-koeln.de>
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
7 ;; Keywords: unix
294
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
8
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
9 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
14 ;; any later version.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
15
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
19 ;; GNU General Public License for more details.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
20
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
21 ;; You should have received a copy of the GNU General Public License
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 12485
diff changeset
24 ;; Boston, MA 02111-1307, USA.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
25
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
26 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 662
diff changeset
27
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
28 (require 'dired)
1225
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
29
11035
97da4cb32d03 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 10929
diff changeset
30 ;; find's -ls corresponds to these switches.
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
31 ;; Note -b, at least GNU find quotes spaces etc. in filenames
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
32 ;;;###autoload
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
33 (defvar find-ls-option (if (eq system-type 'berkeley-unix) '("-ls" . "-gilsb")
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
34 '("-exec ls -ld {} \\;" . "-ld"))
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
35 "*Description of the option to `find' to produce an `ls -l'-type listing.
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
36 This is a cons of two strings (FIND-OPTION . LS-SWITCHES). FIND-OPTION
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
37 gives the option (or options) to `find' that produce the desired output.
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
38 LS-SWITCHES is a list of `ls' switches to tell dired how to parse the output.")
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
39
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
40 ;;;###autoload
16569
a3c07728832a (find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
41 (defvar find-grep-options
a3c07728832a (find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
42 (if (or (eq system-type 'berkeley-unix)
a3c07728832a (find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
43 (string-match "solaris2" system-configuration)
a3c07728832a (find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
44 (string-match "irix" system-configuration))
a3c07728832a (find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
45 "-s" "-q")
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
46 "*Option to grep to be as silent as possible.
10168
64163654c255 (find-grep-options): Use -q on non-BSD systems.
Richard M. Stallman <rms@gnu.org>
parents: 10024
diff changeset
47 On Berkeley systems, this is `-s'; on Posix, and with GNU grep, `-q' does it.
64163654c255 (find-grep-options): Use -q on non-BSD systems.
Richard M. Stallman <rms@gnu.org>
parents: 10024
diff changeset
48 On other systems, the closest you can come is to use `-l'.")
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
49
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
50 (defvar find-args nil
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
51 "Last arguments given to `find' by \\[find-dired].")
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
52
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
53 ;; History of find-args values entered in the minibuffer.
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
54 (defvar find-args-history nil)
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
55
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
56 ;;;###autoload
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
57 (defun find-dired (dir args)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
58 "Run `find' and go into dired-mode on a buffer of the output.
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
59 The command run (after changing into DIR) is
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
60
16823
4fa015c0a620 (find-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16569
diff changeset
61 find . \\( ARGS \\) -ls
4fa015c0a620 (find-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16569
diff changeset
62
4fa015c0a620 (find-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16569
diff changeset
63 except that the variable `find-ls-option' specifies what to use
4fa015c0a620 (find-dired): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16569
diff changeset
64 as the final argument."
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
65 (interactive (list (read-file-name "Run find in directory: " nil "" t)
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
66 (read-string "Run find (with args): " find-args
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
67 '(find-args-history . 1))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
68 ;; Expand DIR ("" means default-directory), and make sure it has a
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
69 ;; trailing slash.
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
70 (setq dir (file-name-as-directory (expand-file-name dir)))
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
71 ;; Check that it's really a directory.
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
72 (or (file-directory-p dir)
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
73 (error "find-dired needs a directory: %s" dir))
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
74 (switch-to-buffer (get-buffer-create "*Find*"))
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
75 (widen)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
76 (kill-all-local-variables)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
77 (setq buffer-read-only nil)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
78 (erase-buffer)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
79 (setq default-directory dir
1225
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
80 find-args args ; save for next interactive call
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
81 args (concat "find . "
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
82 (if (string= args "")
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
83 ""
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
84 (concat "\\( " args " \\) "))
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
85 (car find-ls-option)))
1225
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
86 ;; The next statement will bomb in classic dired (no optional arg allowed)
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
87 (dired-mode dir (cdr find-ls-option))
12485
df3f81ceb780 (find-dired): Undefine the g command.
Richard M. Stallman <rms@gnu.org>
parents: 11996
diff changeset
88 ;; This really should rerun the find command, but I don't
df3f81ceb780 (find-dired): Undefine the g command.
Richard M. Stallman <rms@gnu.org>
parents: 11996
diff changeset
89 ;; have time for that.
df3f81ceb780 (find-dired): Undefine the g command.
Richard M. Stallman <rms@gnu.org>
parents: 11996
diff changeset
90 (use-local-map (append (make-sparse-keymap) (current-local-map)))
df3f81ceb780 (find-dired): Undefine the g command.
Richard M. Stallman <rms@gnu.org>
parents: 11996
diff changeset
91 (define-key (current-local-map) "g" 'undefined)
1225
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
92 ;; Set subdir-alist so that Tree Dired will work:
11996
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
93 (if (fboundp 'dired-simple-subdir-alist)
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
94 ;; will work even with nested dired format (dired-nstd.el,v 1.15
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
95 ;; and later)
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
96 (dired-simple-subdir-alist)
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
97 ;; else we have an ancient tree dired (or classic dired, where
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
98 ;; this does no harm)
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
99 (set (make-local-variable 'dired-subdir-alist)
d330b9cd3529 (find-dired): If dired-simple-subdir-alist is not
Karl Heuer <kwzh@gnu.org>
parents: 11585
diff changeset
100 (list (cons default-directory (point-min-marker)))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
101 (setq buffer-read-only nil)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
102 ;; Subdir headlerline must come first because the first marker in
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
103 ;; subdir-alist points there.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
104 (insert " " dir ":\n")
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
105 ;; Make second line a ``find'' line in analogy to the ``total'' or
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
106 ;; ``wildcard'' line.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
107 (insert " " args "\n")
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
108 ;; Start the find process.
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
109 (let ((proc (start-process-shell-command "find" (current-buffer) args)))
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
110 (set-process-filter proc (function find-dired-filter))
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
111 (set-process-sentinel proc (function find-dired-sentinel))
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
112 ;; Initialize the process marker; it is used by the filter.
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
113 (move-marker (process-mark proc) 1 (current-buffer)))
7073
c662b47cda3f (find-dired, find-dired-sentinel):
Richard M. Stallman <rms@gnu.org>
parents: 5460
diff changeset
114 (setq mode-line-process '(":%s")))
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
115
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
116 ;;;###autoload
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
117 (defun find-name-dired (dir pattern)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
118 "Search DIR recursively for files matching the globbing pattern PATTERN,
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
119 and run dired on those files.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
120 PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
121 The command run (after changing into DIR) is
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
122
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
123 find . -name 'PATTERN' -ls"
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
124 (interactive
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
125 "DFind-name (directory): \nsFind-name (filename wildcard): ")
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
126 (find-dired dir (concat "-name '" pattern "'")))
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
127
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
128 ;; This functionality suggested by
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
129 ;; From: oblanc@watcgl.waterloo.edu (Olivier Blanc)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
130 ;; Subject: find-dired, lookfor-dired
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
131 ;; Date: 10 May 91 17:50:00 GMT
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
132 ;; Organization: University of Waterloo
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
133
2571
b65cf676a09b All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2230
diff changeset
134 (defalias 'lookfor-dired 'find-grep-dired)
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
135 ;;;###autoload
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
136 (defun find-grep-dired (dir args)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
137 "Find files in DIR containing a regexp ARG and start Dired on output.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
138 The command run (after changing into DIR) is
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
139
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
140 find . -exec grep -s ARG {} \\\; -ls
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
141
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
142 Thus ARG can also contain additional grep options."
10168
64163654c255 (find-grep-options): Use -q on non-BSD systems.
Richard M. Stallman <rms@gnu.org>
parents: 10024
diff changeset
143 (interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ")
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
144 ;; find -exec doesn't allow shell i/o redirections in the command,
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
145 ;; or we could use `grep -l >/dev/null'
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
146 (find-dired dir
1225
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
147 (concat "! -type d -exec grep " find-grep-options " "
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
148 args " {} \\\; ")))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
149
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
150 (defun find-dired-filter (proc string)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
151 ;; Filter for \\[find-dired] processes.
294
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
152 (let ((buf (process-buffer proc)))
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
153 (if (buffer-name buf) ; not killed?
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
154 (save-excursion
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
155 (set-buffer buf)
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
156 (save-restriction
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
157 (widen)
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
158 (save-excursion
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
159 (let ((buffer-read-only nil)
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
160 (end (point-max)))
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
161 (goto-char end)
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
162 (insert string)
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
163 (goto-char end)
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
164 (or (looking-at "^")
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
165 (forward-line 1))
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
166 (while (looking-at "^")
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
167 (insert " ")
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
168 (forward-line 1))
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
169 ;; Convert ` ./FILE' to ` FILE'
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
170 ;; This would lose if the current chunk of output
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
171 ;; starts or ends within the ` ./', so back up a bit:
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
172 (goto-char (- end 3)) ; no error if < 0
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 294
diff changeset
173 (while (search-forward " ./" nil t)
10929
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
174 (delete-region (point) (- (point) 2)))
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
175 ;; Find all the complete lines in the unprocessed
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
176 ;; output and process it to add text properties.
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
177 (goto-char end)
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
178 (if (search-backward "\n" (process-mark proc) t)
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
179 (progn
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
180 (dired-insert-set-properties (process-mark proc)
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
181 (1+ (point)))
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
182 (move-marker (process-mark proc) (1+ (point)))))
8102a6447ea0 (find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents: 10168
diff changeset
183 ))))
294
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
184 ;; The buffer has been killed.
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
185 (delete-process proc))))
292
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
186
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
187 (defun find-dired-sentinel (proc state)
cab78578e745 Initial revision
Roland McGrath <roland@gnu.org>
parents:
diff changeset
188 ;; Sentinel for \\[find-dired] processes.
294
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
189 (let ((buf (process-buffer proc)))
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
190 (if (buffer-name buf)
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
191 (save-excursion
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
192 (set-buffer buf)
3189
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
193 (let ((buffer-read-only nil))
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
194 (save-excursion
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
195 (goto-char (point-max))
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
196 (insert "\nfind " state)
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
197 (forward-char -1) ;Back up before \n at end of STATE.
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
198 (insert " at " (substring (current-time-string) 0 19))
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
199 (forward-char 1)
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
200 (setq mode-line-process
7073
c662b47cda3f (find-dired, find-dired-sentinel):
Richard M. Stallman <rms@gnu.org>
parents: 5460
diff changeset
201 (concat ":"
3189
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
202 (symbol-name (process-status proc))))
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
203 ;; Since the buffer and mode line will show that the
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
204 ;; process is dead, we can delete it now. Otherwise it
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
205 ;; will stay around until M-x list-processes.
77efda0d2b31 (find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents: 2571
diff changeset
206 (delete-process proc)
11585
e28ae3856c1d (find-dired-sentinel): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11035
diff changeset
207 (force-mode-line-update)))
294
97aa6a6f9aa5 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 292
diff changeset
208 (message "find-dired %s finished." (current-buffer))))))
1225
e16f52a7c9f9 New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents: 1183
diff changeset
209
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
210 (provide 'find-dired)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
211
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
212 ;;; find-dired.el ends here