Mercurial > emacs
annotate lisp/find-dired.el @ 97366:d2c211c8ceda
(w32_list_system_processes, w32_system_process_attributes): Add prototypes.
(Qeuid, Qegid, Qcomm, Qstate, Qppid, Qpgrp, Qsess, Qttname)
(Qminflt, Qmajflt, Qcminflt, Qcmajflt, Qutime, Qstime, Qcutime)
(Qpri, Qnice, Qthcount, Qstart, Qvsize, Qrss, Qargs, Quser, Qgroup)
(Qetime, Qpcpu, Qpmem, Qtpgid, Qcstime): Add extern declarations.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 09 Aug 2008 17:53:30 +0000 |
parents | 56e9179abfbe |
children | d42aff5ca541 |
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 |
74439 | 3 ;; Copyright (C) 1992, 1994, 1995, 2000, 2001, 2002, 2003, 2004, |
79721 | 4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
811
diff
changeset
|
5 |
25278 | 6 ;; Author: Roland McGrath <roland@gnu.org>, |
1225
e16f52a7c9f9
New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents:
1183
diff
changeset
|
7 ;; Sebastian Kremer <sk@thp.uni-koeln.de> |
21057 | 8 ;; Maintainer: FSF |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
9 ;; Keywords: unix |
294 | 10 |
14169 | 11 ;; This file is part of GNU Emacs. |
12 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify |
14169 | 14 ;; 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:
93975
diff
changeset
|
15 ;; 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:
93975
diff
changeset
|
16 ;; (at your option) any later version. |
14169 | 17 |
18 ;; GNU Emacs is distributed in the hope that it will be useful, | |
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 ;; GNU General Public License for more details. | |
22 | |
23 ;; 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:
93975
diff
changeset
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
25 |
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
30455
diff
changeset
|
26 ;;; Commentary: |
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
30455
diff
changeset
|
27 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
28 ;;; Code: |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
662
diff
changeset
|
29 |
292 | 30 (require 'dired) |
1225
e16f52a7c9f9
New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents:
1183
diff
changeset
|
31 |
20597 | 32 (defgroup find-dired nil |
33 "Run a `find' command and dired the output." | |
34 :group 'dired | |
35 :prefix "find-") | |
36 | |
11035 | 37 ;; 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
|
38 ;; Note -b, at least GNU find quotes spaces etc. in filenames |
474 | 39 ;;;###autoload |
20597 | 40 (defcustom find-ls-option |
41 (if (eq system-type 'berkeley-unix) '("-ls" . "-gilsb") | |
42 '("-exec ls -ld {} \\;" . "-ld")) | |
10929
8102a6447ea0
(find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents:
10168
diff
changeset
|
43 "*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
|
44 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
|
45 gives the option (or options) to `find' that produce the desired output. |
20597 | 46 LS-SWITCHES is a list of `ls' switches to tell dired how to parse the output." |
47 :type '(cons (string :tag "Find Option") | |
48 (string :tag "Ls Switches")) | |
49 :group 'find-dired) | |
474 | 50 |
51 ;;;###autoload | |
55940
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
52 (defcustom find-ls-subdir-switches "-al" |
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
53 "`ls' switches for inserting subdirectories in `*Find*' buffers. |
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
54 This should contain the \"-l\" switch. |
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
55 Use the \"-F\" or \"-b\" switches if and only if you also use |
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
56 them for `find-ls-option'." |
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
57 :type 'string |
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
58 :group 'find-dired |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
55940
diff
changeset
|
59 :version "22.1") |
55940
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
60 |
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
61 ;;;###autoload |
20597 | 62 (defcustom find-grep-options |
16569
a3c07728832a
(find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
63 (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
|
64 (string-match "solaris2" system-configuration) |
a3c07728832a
(find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
65 (string-match "irix" system-configuration)) |
a3c07728832a
(find-grep-options): Treat solaris, irix like BSD.
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
66 "-s" "-q") |
474 | 67 "*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
|
68 On Berkeley systems, this is `-s'; on Posix, and with GNU grep, `-q' does it. |
20597 | 69 On other systems, the closest you can come is to use `-l'." |
70 :type 'string | |
71 :group 'find-dired) | |
292 | 72 |
79588
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
73 ;;;###autoload |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
74 (defcustom find-name-arg |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
75 (if read-file-name-completion-ignore-case |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
76 "-iname" |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
77 "-name") |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
78 "*Argument used to specify file name pattern. |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
79 If `read-file-name-completion-ignore-case' is non-nil, -iname is used so that |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
80 find also ignores case. Otherwise, -name is used." |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
81 :type 'string |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
82 :group 'find-dired |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
83 :version "22.2") |
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
84 |
292 | 85 (defvar find-args nil |
86 "Last arguments given to `find' by \\[find-dired].") | |
87 | |
10929
8102a6447ea0
(find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents:
10168
diff
changeset
|
88 ;; 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
|
89 (defvar find-args-history nil) |
8102a6447ea0
(find-ls-option): Doc fix: now a cons.
Roland McGrath <roland@gnu.org>
parents:
10168
diff
changeset
|
90 |
48490
3531509372aa
(find-dired): Set dired-sort-inhibit to t buffer-locally.
Richard M. Stallman <rms@gnu.org>
parents:
45382
diff
changeset
|
91 (defvar dired-sort-inhibit) |
3531509372aa
(find-dired): Set dired-sort-inhibit to t buffer-locally.
Richard M. Stallman <rms@gnu.org>
parents:
45382
diff
changeset
|
92 |
292 | 93 ;;;###autoload |
94 (defun find-dired (dir args) | |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
95 "Run `find' and go into Dired mode on a buffer of the output. |
474 | 96 The command run (after changing into DIR) is |
97 | |
16823 | 98 find . \\( ARGS \\) -ls |
99 | |
100 except that the variable `find-ls-option' specifies what to use | |
101 as the final argument." | |
292 | 102 (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
|
103 (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
|
104 '(find-args-history . 1)))) |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
105 (let ((dired-buffers dired-buffers)) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
106 ;; Expand DIR ("" means default-directory), and make sure it has a |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
107 ;; trailing slash. |
55940
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
108 (setq dir (file-name-as-directory (expand-file-name dir))) |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
109 ;; Check that it's really a directory. |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
110 (or (file-directory-p dir) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
111 (error "find-dired needs a directory: %s" dir)) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
112 (switch-to-buffer (get-buffer-create "*Find*")) |
30455 | 113 |
114 ;; See if there's still a `find' running, and offer to kill | |
115 ;; it first, if it is. | |
116 (let ((find (get-buffer-process (current-buffer)))) | |
117 (when find | |
118 (if (or (not (eq (process-status find) 'run)) | |
119 (yes-or-no-p "A `find' process is running; kill it? ")) | |
120 (condition-case nil | |
121 (progn | |
122 (interrupt-process find) | |
123 (sit-for 1) | |
124 (delete-process find)) | |
125 (error nil)) | |
126 (error "Cannot have two processes in `%s' at once" (buffer-name))))) | |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48490
diff
changeset
|
127 |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
128 (widen) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
129 (kill-all-local-variables) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
130 (setq buffer-read-only nil) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
131 (erase-buffer) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
132 (setq default-directory dir |
55940
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
133 find-args args ; save for next interactive call |
79588
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
134 args (concat find-program " . " |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
135 (if (string= args "") |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
136 "" |
72555
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
137 (concat |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
138 (shell-quote-argument "(") |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
139 " " args " " |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
140 (shell-quote-argument ")") |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
141 " ")) |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
142 (if (equal (car find-ls-option) "-exec ls -ld {} \\;") |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
143 (concat "-exec ls -ld " |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
144 (shell-quote-argument "{}") |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
145 " " |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
146 (shell-quote-argument ";")) |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
147 (car find-ls-option)))) |
54316
0b81a282eca3
* find-dired.el (find-dired): Call `shell-command' instead of
Michael Albinus <michael.albinus@gmx.de>
parents:
53404
diff
changeset
|
148 ;; Start the find process. |
0b81a282eca3
* find-dired.el (find-dired): Call `shell-command' instead of
Michael Albinus <michael.albinus@gmx.de>
parents:
53404
diff
changeset
|
149 (shell-command (concat args "&") (current-buffer)) |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
150 ;; The next statement will bomb in classic dired (no optional arg allowed) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
151 (dired-mode dir (cdr find-ls-option)) |
53404
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
152 (let ((map (make-sparse-keymap))) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
153 (set-keymap-parent map (current-local-map)) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
154 (define-key map "\C-c\C-k" 'kill-find) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
155 (use-local-map map)) |
48490
3531509372aa
(find-dired): Set dired-sort-inhibit to t buffer-locally.
Richard M. Stallman <rms@gnu.org>
parents:
45382
diff
changeset
|
156 (make-local-variable 'dired-sort-inhibit) |
3531509372aa
(find-dired): Set dired-sort-inhibit to t buffer-locally.
Richard M. Stallman <rms@gnu.org>
parents:
45382
diff
changeset
|
157 (setq dired-sort-inhibit t) |
45382
374dfaadcd0f
(find-dired): Implement revert-buffer-function.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
44847
diff
changeset
|
158 (set (make-local-variable 'revert-buffer-function) |
374dfaadcd0f
(find-dired): Implement revert-buffer-function.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
44847
diff
changeset
|
159 `(lambda (ignore-auto noconfirm) |
374dfaadcd0f
(find-dired): Implement revert-buffer-function.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
44847
diff
changeset
|
160 (find-dired ,dir ,find-args))) |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
161 ;; Set subdir-alist so that Tree Dired will work: |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
162 (if (fboundp 'dired-simple-subdir-alist) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
163 ;; will work even with nested dired format (dired-nstd.el,v 1.15 |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
164 ;; and later) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
165 (dired-simple-subdir-alist) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
166 ;; else we have an ancient tree dired (or classic dired, where |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48490
diff
changeset
|
167 ;; this does no harm) |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
168 (set (make-local-variable 'dired-subdir-alist) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
169 (list (cons default-directory (point-min-marker))))) |
55940
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
170 (set (make-local-variable 'dired-subdir-switches) find-ls-subdir-switches) |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
171 (setq buffer-read-only nil) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
172 ;; Subdir headlerline must come first because the first marker in |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
173 ;; subdir-alist points there. |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
174 (insert " " dir ":\n") |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
175 ;; Make second line a ``find'' line in analogy to the ``total'' or |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48490
diff
changeset
|
176 ;; ``wildcard'' line. |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
177 (insert " " args "\n") |
53404
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
178 (setq buffer-read-only t) |
54316
0b81a282eca3
* find-dired.el (find-dired): Call `shell-command' instead of
Michael Albinus <michael.albinus@gmx.de>
parents:
53404
diff
changeset
|
179 (let ((proc (get-buffer-process (current-buffer)))) |
22630
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
180 (set-process-filter proc (function find-dired-filter)) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
181 (set-process-sentinel proc (function find-dired-sentinel)) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
182 ;; Initialize the process marker; it is used by the filter. |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
183 (move-marker (process-mark proc) 1 (current-buffer))) |
e4a895537576
(find-dired): Bind dired-buffers so it can't change. Use abbreviate-file-name.
Richard M. Stallman <rms@gnu.org>
parents:
21057
diff
changeset
|
184 (setq mode-line-process '(":%s")))) |
292 | 185 |
53404
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
186 (defun kill-find () |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
187 "Kill the `find' process running in the current buffer." |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
188 (interactive) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
189 (let ((find (get-buffer-process (current-buffer)))) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
190 (and find (eq (process-status find) 'run) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
191 (eq (process-filter find) (function find-dired-filter)) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
192 (condition-case nil |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
193 (delete-process find) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
194 (error nil))))) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
195 |
292 | 196 ;;;###autoload |
197 (defun find-name-dired (dir pattern) | |
198 "Search DIR recursively for files matching the globbing pattern PATTERN, | |
474 | 199 and run dired on those files. |
200 PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted. | |
201 The command run (after changing into DIR) is | |
202 | |
203 find . -name 'PATTERN' -ls" | |
204 (interactive | |
205 "DFind-name (directory): \nsFind-name (filename wildcard): ") | |
79588
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
206 (find-dired dir (concat find-name-arg " " (shell-quote-argument pattern)))) |
292 | 207 |
474 | 208 ;; This functionality suggested by |
209 ;; From: oblanc@watcgl.waterloo.edu (Olivier Blanc) | |
210 ;; Subject: find-dired, lookfor-dired | |
211 ;; Date: 10 May 91 17:50:00 GMT | |
212 ;; Organization: University of Waterloo | |
213 | |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2230
diff
changeset
|
214 (defalias 'lookfor-dired 'find-grep-dired) |
474 | 215 ;;;###autoload |
43644
6046fb03f1af
(find-grep-dired): Rename arg to `regexp'.
Richard M. Stallman <rms@gnu.org>
parents:
43643
diff
changeset
|
216 (defun find-grep-dired (dir regexp) |
6046fb03f1af
(find-grep-dired): Rename arg to `regexp'.
Richard M. Stallman <rms@gnu.org>
parents:
43643
diff
changeset
|
217 "Find files in DIR containing a regexp REGEXP and start Dired on output. |
474 | 218 The command run (after changing into DIR) is |
219 | |
43644
6046fb03f1af
(find-grep-dired): Rename arg to `regexp'.
Richard M. Stallman <rms@gnu.org>
parents:
43643
diff
changeset
|
220 find . -exec grep -s -e REGEXP {} \\\; -ls |
474 | 221 |
222 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
|
223 (interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ") |
474 | 224 ;; find -exec doesn't allow shell i/o redirections in the command, |
225 ;; or we could use `grep -l >/dev/null' | |
18580
717e09103d06
(find-grep-dired): Use -type f.
Richard M. Stallman <rms@gnu.org>
parents:
16823
diff
changeset
|
226 ;; We use -type f, not ! -type d, to avoid getting screwed |
717e09103d06
(find-grep-dired): Use -type f.
Richard M. Stallman <rms@gnu.org>
parents:
16823
diff
changeset
|
227 ;; by FIFOs and devices. I'm not sure what's best to do |
717e09103d06
(find-grep-dired): Use -type f.
Richard M. Stallman <rms@gnu.org>
parents:
16823
diff
changeset
|
228 ;; about symlinks, so as far as I know this is not wrong. |
474 | 229 (find-dired dir |
79588
7f97528cec7f
(find-name-arg): New custom variable.
Jason Rumney <jasonr@gnu.org>
parents:
78236
diff
changeset
|
230 (concat "-type f -exec " grep-program " " find-grep-options " -e " |
43644
6046fb03f1af
(find-grep-dired): Rename arg to `regexp'.
Richard M. Stallman <rms@gnu.org>
parents:
43643
diff
changeset
|
231 (shell-quote-argument regexp) |
72555
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
232 " " |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
233 (shell-quote-argument "{}") |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
234 " " |
20f4483c11ca
(find-dired): Use shell-quote-argument to properly
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
235 (shell-quote-argument ";")))) |
474 | 236 |
292 | 237 (defun find-dired-filter (proc string) |
238 ;; Filter for \\[find-dired] processes. | |
53404
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
239 (let ((buf (process-buffer proc)) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
240 (inhibit-read-only t)) |
93521
7587f0dc0aa9
(find-dired-filter): Align columns by padding file sizes and link
Chong Yidong <cyd@stupidchicken.com>
parents:
79721
diff
changeset
|
241 (if (buffer-name buf) |
7587f0dc0aa9
(find-dired-filter): Align columns by padding file sizes and link
Chong Yidong <cyd@stupidchicken.com>
parents:
79721
diff
changeset
|
242 (with-current-buffer buf |
96410
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
243 (save-excursion |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
244 (save-restriction |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
245 (widen) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
246 (let ((buffer-read-only nil) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
247 (beg (point-max)) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
248 (l-opt (and (consp find-ls-option) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
249 (string-match "l" (cdr find-ls-option)))) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
250 (ls-regexp (concat "^ +[^ \t\r\n]+\\( +[^ \t\r\n]+\\) +" |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
251 "[^ \t\r\n]+ +[^ \t\r\n]+\\( +[0-9]+\\)"))) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
252 (goto-char beg) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
253 (insert string) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
254 (goto-char beg) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
255 (or (looking-at "^") |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
256 (forward-line 1)) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
257 (while (looking-at "^") |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
258 (insert " ") |
474 | 259 (forward-line 1)) |
96410
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
260 ;; Convert ` ./FILE' to ` FILE' |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
261 ;; This would lose if the current chunk of output |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
262 ;; starts or ends within the ` ./', so back up a bit: |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
263 (goto-char (- beg 3)) ; no error if < 0 |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
264 (while (search-forward " ./" nil t) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
265 (delete-region (point) (- (point) 2))) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
266 ;; Pad the number of links and file size. This is a |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
267 ;; quick and dirty way of getting the columns to line up |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
268 ;; most of the time, but it's not foolproof. |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
269 (when l-opt |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
270 (goto-char beg) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
271 (goto-char (line-beginning-position)) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
272 (while (re-search-forward ls-regexp nil t) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
273 (replace-match (format "%4s" (match-string 1)) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
274 nil nil nil 1) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
275 (replace-match (format "%9s" (match-string 2)) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
276 nil nil nil 2) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
277 (forward-line 1))) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
278 ;; Find all the complete lines in the unprocessed |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
279 ;; output and process it to add text properties. |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
280 (goto-char (point-max)) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
281 (if (search-backward "\n" (process-mark proc) t) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
282 (progn |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
283 (dired-insert-set-properties (process-mark proc) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
284 (1+ (point))) |
56e9179abfbe
(find-dired-filter): Preserve point.
Andreas Schwab <schwab@suse.de>
parents:
94678
diff
changeset
|
285 (move-marker (process-mark proc) (1+ (point))))))))) |
294 | 286 ;; The buffer has been killed. |
287 (delete-process proc)))) | |
292 | 288 |
289 (defun find-dired-sentinel (proc state) | |
290 ;; Sentinel for \\[find-dired] processes. | |
53404
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
291 (let ((buf (process-buffer proc)) |
5e98e2525d62
(kill-find): New command.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
292 (inhibit-read-only t)) |
294 | 293 (if (buffer-name buf) |
294 (save-excursion | |
295 (set-buffer buf) | |
3189
77efda0d2b31
(find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents:
2571
diff
changeset
|
296 (let ((buffer-read-only nil)) |
77efda0d2b31
(find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents:
2571
diff
changeset
|
297 (save-excursion |
77efda0d2b31
(find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents:
2571
diff
changeset
|
298 (goto-char (point-max)) |
42359 | 299 (insert "\n find " state) |
3189
77efda0d2b31
(find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents:
2571
diff
changeset
|
300 (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
|
301 (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
|
302 (forward-char 1) |
77efda0d2b31
(find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents:
2571
diff
changeset
|
303 (setq mode-line-process |
7073
c662b47cda3f
(find-dired, find-dired-sentinel):
Richard M. Stallman <rms@gnu.org>
parents:
5460
diff
changeset
|
304 (concat ":" |
3189
77efda0d2b31
(find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents:
2571
diff
changeset
|
305 (symbol-name (process-status proc)))) |
77efda0d2b31
(find-dired-sentinel): Write a line describing death.
Roland McGrath <roland@gnu.org>
parents:
2571
diff
changeset
|
306 ;; 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
|
307 ;; 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
|
308 ;; 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
|
309 (delete-process proc) |
11585
e28ae3856c1d
(find-dired-sentinel): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents:
11035
diff
changeset
|
310 (force-mode-line-update))) |
294 | 311 (message "find-dired %s finished." (current-buffer)))))) |
55940
793fa6e18e9d
(find-ls-subdir-switches): New user option.
Luc Teirlinck <teirllm@auburn.edu>
parents:
54316
diff
changeset
|
312 |
1225
e16f52a7c9f9
New version from sk. Further hacked:
Roland McGrath <roland@gnu.org>
parents:
1183
diff
changeset
|
313 |
584 | 314 (provide 'find-dired) |
315 | |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93521
diff
changeset
|
316 ;; arch-tag: 8edece95-af00-4221-bc74-a4bd2f75f9b0 |
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
317 ;;; find-dired.el ends here |