1993-03-17 15:58:09 +00:00
|
|
|
|
;;; find-dired.el --- run a `find' command and dired the output
|
1992-05-30 23:54:21 +00:00
|
|
|
|
|
2014-01-01 07:43:34 +00:00
|
|
|
|
;; Copyright (C) 1992, 1994-1995, 2000-2014 Free Software Foundation,
|
2013-01-01 09:11:05 +00:00
|
|
|
|
;; Inc.
|
1992-07-22 04:22:42 +00:00
|
|
|
|
|
1999-08-16 04:04:27 +00:00
|
|
|
|
;; Author: Roland McGrath <roland@gnu.org>,
|
1992-09-27 01:24:00 +00:00
|
|
|
|
;; Sebastian Kremer <sk@thp.uni-koeln.de>
|
2014-02-10 01:34:22 +00:00
|
|
|
|
;; Maintainer: emacs-devel@gnu.org
|
1992-07-17 08:15:29 +00:00
|
|
|
|
;; Keywords: unix
|
1991-06-20 12:32:05 +00:00
|
|
|
|
|
1996-01-14 07:34:30 +00:00
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
|
2008-05-06 08:06:51 +00:00
|
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
1996-01-14 07:34:30 +00:00
|
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2008-05-06 08:06:51 +00:00
|
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
;; (at your option) any later version.
|
1996-01-14 07:34:30 +00:00
|
|
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2008-05-06 08:06:51 +00:00
|
|
|
|
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
1992-07-16 21:47:34 +00:00
|
|
|
|
|
2001-07-15 16:15:35 +00:00
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
1992-07-16 21:47:34 +00:00
|
|
|
|
;;; Code:
|
|
|
|
|
|
1991-12-21 09:14:03 +00:00
|
|
|
|
(require 'dired)
|
1992-09-27 01:24:00 +00:00
|
|
|
|
|
1998-01-07 10:31:09 +00:00
|
|
|
|
(defgroup find-dired nil
|
2014-02-28 13:19:06 +00:00
|
|
|
|
"Run a `find' command and Dired the output."
|
1998-01-07 10:31:09 +00:00
|
|
|
|
:group 'dired
|
|
|
|
|
:prefix "find-")
|
|
|
|
|
|
2011-04-02 20:36:47 +00:00
|
|
|
|
;; FIXME this option does not really belong in this file, it's more general.
|
|
|
|
|
;; Eg cf some tests in grep.el.
|
|
|
|
|
(defcustom find-exec-terminator
|
|
|
|
|
(if (eq 0
|
|
|
|
|
(ignore-errors
|
|
|
|
|
(process-file find-program nil nil nil
|
|
|
|
|
null-device "-exec" "echo" "{}" "+")))
|
|
|
|
|
"+"
|
|
|
|
|
(shell-quote-argument ";"))
|
|
|
|
|
"String that terminates \"find -exec COMMAND {} \".
|
|
|
|
|
The value should include any needed quoting for the shell.
|
|
|
|
|
Common values are \"+\" and \"\\\\;\", with the former more efficient
|
|
|
|
|
than the latter."
|
|
|
|
|
:version "24.1"
|
|
|
|
|
:group 'find-dired
|
|
|
|
|
:type 'string)
|
|
|
|
|
|
1995-03-16 04:37:48 +00:00
|
|
|
|
;; find's -ls corresponds to these switches.
|
1995-03-06 19:55:47 +00:00
|
|
|
|
;; Note -b, at least GNU find quotes spaces etc. in filenames
|
1998-01-07 10:31:09 +00:00
|
|
|
|
(defcustom find-ls-option
|
2011-04-02 20:36:47 +00:00
|
|
|
|
(if (eq 0
|
|
|
|
|
(ignore-errors
|
|
|
|
|
(process-file find-program nil nil nil null-device "-ls")))
|
|
|
|
|
(cons "-ls"
|
|
|
|
|
(if (eq system-type 'berkeley-unix)
|
|
|
|
|
"-gilsb"
|
|
|
|
|
"-dilsb"))
|
|
|
|
|
(cons
|
|
|
|
|
(format "-exec ls -ld {} %s" find-exec-terminator)
|
|
|
|
|
"-ld"))
|
2012-01-13 02:32:07 +00:00
|
|
|
|
"A pair of options to produce and parse an `ls -l'-type list from `find'.
|
|
|
|
|
This is a cons of two strings (FIND-OPTION . LS-SWITCHES).
|
|
|
|
|
FIND-OPTION is the option (or options) passed to `find' to produce
|
|
|
|
|
a file listing in the desired format. LS-SWITCHES is a set of
|
|
|
|
|
`ls' switches that tell dired how to parse the output of `find'.
|
|
|
|
|
|
|
|
|
|
The two options must be set to compatible values.
|
|
|
|
|
For example, to use human-readable file sizes with GNU ls:
|
|
|
|
|
\(\"-exec ls -ldh {} +\" . \"-ldh\")
|
|
|
|
|
|
|
|
|
|
To use GNU find's inbuilt \"-ls\" option to list files:
|
|
|
|
|
\(\"-ls\" . \"-dilsb\")
|
|
|
|
|
since GNU find's output has the same format as using GNU ls with
|
|
|
|
|
the options \"-dilsb\"."
|
2011-04-02 20:36:47 +00:00
|
|
|
|
:version "24.1" ; add tests for -ls and -exec + support
|
1998-01-07 10:31:09 +00:00
|
|
|
|
:type '(cons (string :tag "Find Option")
|
|
|
|
|
(string :tag "Ls Switches"))
|
|
|
|
|
:group 'find-dired)
|
1991-12-21 09:14:03 +00:00
|
|
|
|
|
2011-04-02 20:36:47 +00:00
|
|
|
|
(defcustom find-ls-subdir-switches
|
|
|
|
|
(if (string-match "-[a-z]*b" (cdr find-ls-option))
|
|
|
|
|
"-alb"
|
|
|
|
|
"-al")
|
2004-06-06 02:32:53 +00:00
|
|
|
|
"`ls' switches for inserting subdirectories in `*Find*' buffers.
|
|
|
|
|
This should contain the \"-l\" switch.
|
|
|
|
|
Use the \"-F\" or \"-b\" switches if and only if you also use
|
|
|
|
|
them for `find-ls-option'."
|
2011-04-02 20:36:47 +00:00
|
|
|
|
:version "24.1" ; add -b test
|
2004-06-06 02:32:53 +00:00
|
|
|
|
:type 'string
|
2011-04-02 20:36:47 +00:00
|
|
|
|
:group 'find-dired)
|
2004-06-06 02:32:53 +00:00
|
|
|
|
|
1998-01-07 10:31:09 +00:00
|
|
|
|
(defcustom find-grep-options
|
2011-04-02 19:01:52 +00:00
|
|
|
|
(if (or (eq system-type 'berkeley-unix)
|
2011-06-30 03:03:07 +00:00
|
|
|
|
(string-match "solaris2\\|irix" system-configuration))
|
2011-04-02 19:01:52 +00:00
|
|
|
|
"-s" "-q")
|
2008-12-03 05:48:14 +00:00
|
|
|
|
"Option to grep to be as silent as possible.
|
1994-12-15 12:16:29 +00:00
|
|
|
|
On Berkeley systems, this is `-s'; on Posix, and with GNU grep, `-q' does it.
|
1998-01-07 10:31:09 +00:00
|
|
|
|
On other systems, the closest you can come is to use `-l'."
|
|
|
|
|
:type 'string
|
|
|
|
|
:group 'find-dired)
|
1991-12-21 09:14:03 +00:00
|
|
|
|
|
2009-11-19 17:37:22 +00:00
|
|
|
|
;; This used to be autoloaded (see bug#4387).
|
2007-12-21 10:32:38 +00:00
|
|
|
|
(defcustom find-name-arg
|
2011-04-02 19:01:52 +00:00
|
|
|
|
(if read-file-name-completion-ignore-case
|
2007-12-21 10:32:38 +00:00
|
|
|
|
"-iname"
|
2011-04-02 19:01:52 +00:00
|
|
|
|
"-name")
|
2008-12-03 05:48:14 +00:00
|
|
|
|
"Argument used to specify file name pattern.
|
2007-12-21 10:32:38 +00:00
|
|
|
|
If `read-file-name-completion-ignore-case' is non-nil, -iname is used so that
|
2009-10-22 07:43:19 +00:00
|
|
|
|
find also ignores case. Otherwise, -name is used."
|
2007-12-21 10:32:38 +00:00
|
|
|
|
:type 'string
|
|
|
|
|
:group 'find-dired
|
|
|
|
|
:version "22.2")
|
|
|
|
|
|
1991-12-21 09:14:03 +00:00
|
|
|
|
(defvar find-args nil
|
|
|
|
|
"Last arguments given to `find' by \\[find-dired].")
|
1991-06-17 21:50:56 +00:00
|
|
|
|
|
1995-03-06 19:55:47 +00:00
|
|
|
|
;; History of find-args values entered in the minibuffer.
|
|
|
|
|
(defvar find-args-history nil)
|
|
|
|
|
|
2002-11-21 17:29:22 +00:00
|
|
|
|
(defvar dired-sort-inhibit)
|
|
|
|
|
|
1991-06-17 21:50:56 +00:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun find-dired (dir args)
|
1998-06-27 21:59:11 +00:00
|
|
|
|
"Run `find' and go into Dired mode on a buffer of the output.
|
2011-04-02 20:36:47 +00:00
|
|
|
|
The command run (after changing into DIR) is essentially
|
1991-12-21 09:14:03 +00:00
|
|
|
|
|
1997-01-03 23:10:03 +00:00
|
|
|
|
find . \\( ARGS \\) -ls
|
|
|
|
|
|
2011-04-02 20:36:47 +00:00
|
|
|
|
except that the car of the variable `find-ls-option' specifies what to
|
|
|
|
|
use in place of \"-ls\" as the final argument."
|
2010-03-28 19:31:27 +00:00
|
|
|
|
(interactive (list (read-directory-name "Run find in directory: " nil "" t)
|
1995-03-06 19:55:47 +00:00
|
|
|
|
(read-string "Run find (with args): " find-args
|
|
|
|
|
'(find-args-history . 1))))
|
1998-06-27 21:59:11 +00:00
|
|
|
|
(let ((dired-buffers dired-buffers))
|
|
|
|
|
;; Expand DIR ("" means default-directory), and make sure it has a
|
|
|
|
|
;; trailing slash.
|
2004-06-06 02:32:53 +00:00
|
|
|
|
(setq dir (file-name-as-directory (expand-file-name dir)))
|
1998-06-27 21:59:11 +00:00
|
|
|
|
;; Check that it's really a directory.
|
|
|
|
|
(or (file-directory-p dir)
|
|
|
|
|
(error "find-dired needs a directory: %s" dir))
|
|
|
|
|
(switch-to-buffer (get-buffer-create "*Find*"))
|
2000-07-25 16:05:09 +00:00
|
|
|
|
|
|
|
|
|
;; See if there's still a `find' running, and offer to kill
|
|
|
|
|
;; it first, if it is.
|
|
|
|
|
(let ((find (get-buffer-process (current-buffer))))
|
|
|
|
|
(when find
|
|
|
|
|
(if (or (not (eq (process-status find) 'run))
|
|
|
|
|
(yes-or-no-p "A `find' process is running; kill it? "))
|
|
|
|
|
(condition-case nil
|
|
|
|
|
(progn
|
|
|
|
|
(interrupt-process find)
|
|
|
|
|
(sit-for 1)
|
|
|
|
|
(delete-process find))
|
|
|
|
|
(error nil))
|
|
|
|
|
(error "Cannot have two processes in `%s' at once" (buffer-name)))))
|
2003-02-04 11:26:42 +00:00
|
|
|
|
|
1998-06-27 21:59:11 +00:00
|
|
|
|
(widen)
|
|
|
|
|
(kill-all-local-variables)
|
|
|
|
|
(setq buffer-read-only nil)
|
|
|
|
|
(erase-buffer)
|
|
|
|
|
(setq default-directory dir
|
2004-06-06 02:32:53 +00:00
|
|
|
|
find-args args ; save for next interactive call
|
2007-12-21 10:32:38 +00:00
|
|
|
|
args (concat find-program " . "
|
1998-06-27 21:59:11 +00:00
|
|
|
|
(if (string= args "")
|
|
|
|
|
""
|
2006-08-28 08:02:38 +00:00
|
|
|
|
(concat
|
|
|
|
|
(shell-quote-argument "(")
|
|
|
|
|
" " args " "
|
|
|
|
|
(shell-quote-argument ")")
|
|
|
|
|
" "))
|
2011-04-02 20:36:47 +00:00
|
|
|
|
(if (string-match "\\`\\(.*\\) {} \\(\\\\;\\|+\\)\\'"
|
|
|
|
|
(car find-ls-option))
|
|
|
|
|
(format "%s %s %s"
|
|
|
|
|
(match-string 1 (car find-ls-option))
|
2006-08-28 08:02:38 +00:00
|
|
|
|
(shell-quote-argument "{}")
|
2011-04-02 20:36:47 +00:00
|
|
|
|
find-exec-terminator)
|
2006-08-28 08:02:38 +00:00
|
|
|
|
(car find-ls-option))))
|
2004-03-08 21:47:59 +00:00
|
|
|
|
;; Start the find process.
|
|
|
|
|
(shell-command (concat args "&") (current-buffer))
|
1998-06-27 21:59:11 +00:00
|
|
|
|
;; The next statement will bomb in classic dired (no optional arg allowed)
|
|
|
|
|
(dired-mode dir (cdr find-ls-option))
|
2003-12-29 19:15:23 +00:00
|
|
|
|
(let ((map (make-sparse-keymap)))
|
|
|
|
|
(set-keymap-parent map (current-local-map))
|
|
|
|
|
(define-key map "\C-c\C-k" 'kill-find)
|
|
|
|
|
(use-local-map map))
|
2002-11-21 17:29:22 +00:00
|
|
|
|
(make-local-variable 'dired-sort-inhibit)
|
|
|
|
|
(setq dired-sort-inhibit t)
|
2002-05-20 00:42:27 +00:00
|
|
|
|
(set (make-local-variable 'revert-buffer-function)
|
|
|
|
|
`(lambda (ignore-auto noconfirm)
|
|
|
|
|
(find-dired ,dir ,find-args)))
|
1998-06-27 21:59:11 +00:00
|
|
|
|
;; Set subdir-alist so that Tree Dired will work:
|
|
|
|
|
(if (fboundp 'dired-simple-subdir-alist)
|
|
|
|
|
;; will work even with nested dired format (dired-nstd.el,v 1.15
|
|
|
|
|
;; and later)
|
|
|
|
|
(dired-simple-subdir-alist)
|
|
|
|
|
;; else we have an ancient tree dired (or classic dired, where
|
2003-02-04 11:26:42 +00:00
|
|
|
|
;; this does no harm)
|
1998-06-27 21:59:11 +00:00
|
|
|
|
(set (make-local-variable 'dired-subdir-alist)
|
|
|
|
|
(list (cons default-directory (point-min-marker)))))
|
2004-06-06 02:32:53 +00:00
|
|
|
|
(set (make-local-variable 'dired-subdir-switches) find-ls-subdir-switches)
|
1998-06-27 21:59:11 +00:00
|
|
|
|
(setq buffer-read-only nil)
|
|
|
|
|
;; Subdir headlerline must come first because the first marker in
|
|
|
|
|
;; subdir-alist points there.
|
|
|
|
|
(insert " " dir ":\n")
|
|
|
|
|
;; Make second line a ``find'' line in analogy to the ``total'' or
|
2003-02-04 11:26:42 +00:00
|
|
|
|
;; ``wildcard'' line.
|
2013-02-13 09:42:31 +00:00
|
|
|
|
(let ((point (point)))
|
|
|
|
|
(insert " " args "\n")
|
|
|
|
|
(dired-insert-set-properties point (point)))
|
2003-12-29 19:15:23 +00:00
|
|
|
|
(setq buffer-read-only t)
|
2004-03-08 21:47:59 +00:00
|
|
|
|
(let ((proc (get-buffer-process (current-buffer))))
|
1998-06-27 21:59:11 +00:00
|
|
|
|
(set-process-filter proc (function find-dired-filter))
|
|
|
|
|
(set-process-sentinel proc (function find-dired-sentinel))
|
|
|
|
|
;; Initialize the process marker; it is used by the filter.
|
2013-02-13 09:42:31 +00:00
|
|
|
|
(move-marker (process-mark proc) (point) (current-buffer)))
|
1998-06-27 21:59:11 +00:00
|
|
|
|
(setq mode-line-process '(":%s"))))
|
1991-06-17 21:50:56 +00:00
|
|
|
|
|
2003-12-29 19:15:23 +00:00
|
|
|
|
(defun kill-find ()
|
|
|
|
|
"Kill the `find' process running in the current buffer."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((find (get-buffer-process (current-buffer))))
|
|
|
|
|
(and find (eq (process-status find) 'run)
|
|
|
|
|
(eq (process-filter find) (function find-dired-filter))
|
|
|
|
|
(condition-case nil
|
|
|
|
|
(delete-process find)
|
|
|
|
|
(error nil)))))
|
|
|
|
|
|
1991-06-17 21:50:56 +00:00
|
|
|
|
;;;###autoload
|
|
|
|
|
(defun find-name-dired (dir pattern)
|
|
|
|
|
"Search DIR recursively for files matching the globbing pattern PATTERN,
|
2014-02-28 13:19:06 +00:00
|
|
|
|
and run Dired on those files.
|
1991-12-21 09:14:03 +00:00
|
|
|
|
PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
|
2014-02-08 11:06:33 +00:00
|
|
|
|
The default command run (after changing into DIR) is
|
1991-12-21 09:14:03 +00:00
|
|
|
|
|
2014-02-08 11:06:33 +00:00
|
|
|
|
find . -name 'PATTERN' -ls
|
|
|
|
|
|
|
|
|
|
See `find-name-arg' to customize the arguments."
|
1991-12-21 09:14:03 +00:00
|
|
|
|
(interactive
|
|
|
|
|
"DFind-name (directory): \nsFind-name (filename wildcard): ")
|
2007-12-21 10:32:38 +00:00
|
|
|
|
(find-dired dir (concat find-name-arg " " (shell-quote-argument pattern))))
|
1991-06-17 21:50:56 +00:00
|
|
|
|
|
1991-12-21 09:14:03 +00:00
|
|
|
|
;; This functionality suggested by
|
|
|
|
|
;; From: oblanc@watcgl.waterloo.edu (Olivier Blanc)
|
|
|
|
|
;; Subject: find-dired, lookfor-dired
|
|
|
|
|
;; Date: 10 May 91 17:50:00 GMT
|
|
|
|
|
;; Organization: University of Waterloo
|
|
|
|
|
|
1993-04-23 06:51:44 +00:00
|
|
|
|
(defalias 'lookfor-dired 'find-grep-dired)
|
1991-12-21 09:14:03 +00:00
|
|
|
|
;;;###autoload
|
2002-03-03 00:36:27 +00:00
|
|
|
|
(defun find-grep-dired (dir regexp)
|
2014-02-08 11:09:10 +00:00
|
|
|
|
"Find files in DIR matching a regexp REGEXP and start Dired on output.
|
1991-12-21 09:14:03 +00:00
|
|
|
|
The command run (after changing into DIR) is
|
|
|
|
|
|
2011-04-02 20:36:47 +00:00
|
|
|
|
find . \\( -type f -exec `grep-program' `find-grep-options' \\
|
|
|
|
|
-e REGEXP {} \\; \\) -ls
|
1991-12-21 09:14:03 +00:00
|
|
|
|
|
2011-04-02 20:36:47 +00:00
|
|
|
|
where the car of the variable `find-ls-option' specifies what to
|
|
|
|
|
use in place of \"-ls\" as the final argument."
|
|
|
|
|
;; Doc used to say "Thus ARG can also contain additional grep options."
|
|
|
|
|
;; i) Presumably ARG == REGEXP?
|
|
|
|
|
;; ii) No it can't have options, since it gets shell-quoted.
|
1994-12-15 12:16:29 +00:00
|
|
|
|
(interactive "DFind-grep (directory): \nsFind-grep (grep regexp): ")
|
1991-12-21 09:14:03 +00:00
|
|
|
|
;; find -exec doesn't allow shell i/o redirections in the command,
|
|
|
|
|
;; or we could use `grep -l >/dev/null'
|
1997-07-04 00:11:24 +00:00
|
|
|
|
;; We use -type f, not ! -type d, to avoid getting screwed
|
|
|
|
|
;; by FIFOs and devices. I'm not sure what's best to do
|
|
|
|
|
;; about symlinks, so as far as I know this is not wrong.
|
1991-12-21 09:14:03 +00:00
|
|
|
|
(find-dired dir
|
2007-12-21 10:32:38 +00:00
|
|
|
|
(concat "-type f -exec " grep-program " " find-grep-options " -e "
|
2002-03-03 00:36:27 +00:00
|
|
|
|
(shell-quote-argument regexp)
|
2006-08-28 08:02:38 +00:00
|
|
|
|
" "
|
|
|
|
|
(shell-quote-argument "{}")
|
|
|
|
|
" "
|
2011-04-02 20:36:47 +00:00
|
|
|
|
;; Doesn't work with "+".
|
2006-08-28 08:02:38 +00:00
|
|
|
|
(shell-quote-argument ";"))))
|
1991-12-21 09:14:03 +00:00
|
|
|
|
|
1991-06-17 21:50:56 +00:00
|
|
|
|
(defun find-dired-filter (proc string)
|
|
|
|
|
;; Filter for \\[find-dired] processes.
|
2003-12-29 19:15:23 +00:00
|
|
|
|
(let ((buf (process-buffer proc))
|
|
|
|
|
(inhibit-read-only t))
|
2008-04-01 17:34:20 +00:00
|
|
|
|
(if (buffer-name buf)
|
|
|
|
|
(with-current-buffer buf
|
2008-06-29 08:10:56 +00:00
|
|
|
|
(save-excursion
|
|
|
|
|
(save-restriction
|
|
|
|
|
(widen)
|
|
|
|
|
(let ((buffer-read-only nil)
|
|
|
|
|
(beg (point-max))
|
|
|
|
|
(l-opt (and (consp find-ls-option)
|
|
|
|
|
(string-match "l" (cdr find-ls-option))))
|
|
|
|
|
(ls-regexp (concat "^ +[^ \t\r\n]+\\( +[^ \t\r\n]+\\) +"
|
|
|
|
|
"[^ \t\r\n]+ +[^ \t\r\n]+\\( +[0-9]+\\)")))
|
|
|
|
|
(goto-char beg)
|
|
|
|
|
(insert string)
|
2008-04-01 17:34:20 +00:00
|
|
|
|
(goto-char beg)
|
2008-06-29 08:10:56 +00:00
|
|
|
|
(or (looking-at "^")
|
|
|
|
|
(forward-line 1))
|
|
|
|
|
(while (looking-at "^")
|
|
|
|
|
(insert " ")
|
|
|
|
|
(forward-line 1))
|
|
|
|
|
;; Convert ` ./FILE' to ` FILE'
|
|
|
|
|
;; This would lose if the current chunk of output
|
|
|
|
|
;; starts or ends within the ` ./', so back up a bit:
|
|
|
|
|
(goto-char (- beg 3)) ; no error if < 0
|
|
|
|
|
(while (search-forward " ./" nil t)
|
|
|
|
|
(delete-region (point) (- (point) 2)))
|
|
|
|
|
;; Pad the number of links and file size. This is a
|
|
|
|
|
;; quick and dirty way of getting the columns to line up
|
|
|
|
|
;; most of the time, but it's not foolproof.
|
|
|
|
|
(when l-opt
|
|
|
|
|
(goto-char beg)
|
|
|
|
|
(goto-char (line-beginning-position))
|
|
|
|
|
(while (re-search-forward ls-regexp nil t)
|
|
|
|
|
(replace-match (format "%4s" (match-string 1))
|
|
|
|
|
nil nil nil 1)
|
|
|
|
|
(replace-match (format "%9s" (match-string 2))
|
|
|
|
|
nil nil nil 2)
|
|
|
|
|
(forward-line 1)))
|
|
|
|
|
;; Find all the complete lines in the unprocessed
|
|
|
|
|
;; output and process it to add text properties.
|
|
|
|
|
(goto-char (point-max))
|
|
|
|
|
(if (search-backward "\n" (process-mark proc) t)
|
|
|
|
|
(progn
|
|
|
|
|
(dired-insert-set-properties (process-mark proc)
|
|
|
|
|
(1+ (point)))
|
|
|
|
|
(move-marker (process-mark proc) (1+ (point)))))))))
|
1991-06-20 12:32:05 +00:00
|
|
|
|
;; The buffer has been killed.
|
|
|
|
|
(delete-process proc))))
|
1991-06-17 21:50:56 +00:00
|
|
|
|
|
|
|
|
|
(defun find-dired-sentinel (proc state)
|
|
|
|
|
;; Sentinel for \\[find-dired] processes.
|
2003-12-29 19:15:23 +00:00
|
|
|
|
(let ((buf (process-buffer proc))
|
|
|
|
|
(inhibit-read-only t))
|
1991-06-20 12:32:05 +00:00
|
|
|
|
(if (buffer-name buf)
|
* x-dnd.el (x-dnd-maybe-call-test-function):
* window.el (split-window-vertically):
* whitespace.el (whitespace-help-on):
* vc-rcs.el (vc-rcs-consult-headers):
* userlock.el (ask-user-about-lock-help)
(ask-user-about-supersession-help):
* type-break.el (type-break-force-mode-line-update):
* time-stamp.el (time-stamp-conv-warn):
* terminal.el (te-set-output-log, te-more-break, te-filter)
(te-sentinel,terminal-emulator):
* term.el (make-term, term-exec, term-sentinel, term-read-input-ring)
(term-write-input-ring, term-check-source, term-start-output-log):
(term-display-buffer-line, term-dynamic-list-completions):
(term-ansi-make-term, serial-term):
* subr.el (selective-display):
* strokes.el (strokes-xpm-to-compressed-string, strokes-decode-buffer)
(strokes-encode-buffer, strokes-xpm-for-compressed-string):
* speedbar.el (speedbar-buffers-tail-notes, speedbar-buffers-item-info)
(speedbar-reconfigure-keymaps, speedbar-add-localized-speedbar-support)
(speedbar-remove-localized-speedbar-support)
(speedbar-set-mode-line-format, speedbar-create-tag-hierarchy)
(speedbar-update-special-contents, speedbar-buffer-buttons-engine)
(speedbar-buffers-line-directory):
* simple.el (shell-command-on-region, append-to-buffer)
(prepend-to-buffer):
* shadowfile.el (shadow-save-todo-file):
* scroll-bar.el (scroll-bar-set-window-start, scroll-bar-drag-1)
(scroll-bar-maybe-set-window-start):
* sb-image.el (speedbar-image-dump):
* saveplace.el (save-place-alist-to-file, save-places-to-alist)
(load-save-place-alist-from-file):
* ps-samp.el (ps-print-message-from-summary):
* ps-print.el (ps-flush-output, ps-insert-file, ps-get-boundingbox)
(ps-background-image, ps-begin-job, ps-do-despool):
* ps-bdf.el (bdf-find-file, bdf-read-font-info):
* printing.el (pr-interface, pr-ps-file-print, pr-find-buffer-visiting)
(pr-ps-message-from-summary, pr-lpr-message-from-summary):
(pr-call-process, pr-file-list, pr-interface-save):
* novice.el (disabled-command-function)
(enable-command, disable-command):
* mouse.el (mouse-buffer-menu-alist):
* mouse-copy.el (mouse-kill-preserving-secondary):
* macros.el (kbd-macro-query):
* ledit.el (ledit-go-to-lisp, ledit-go-to-liszt):
* informat.el (batch-info-validate):
* ido.el (ido-copy-current-word, ido-initiate-auto-merge):
* hippie-exp.el (try-expand-dabbrev-visible):
* help-mode.el (help-make-xrefs):
* help-fns.el (describe-variable):
* generic-x.el (bat-generic-mode-run-as-comint):
* finder.el (finder-mouse-select):
* find-dired.el (find-dired-sentinel):
* filesets.el (filesets-file-close):
* files.el (list-directory):
* faces.el (list-faces-display, describe-face):
* facemenu.el (list-colors-display):
* ezimage.el (ezimage-image-association-dump, ezimage-image-dump):
* epg.el (epg--process-filter, epg-cancel):
* epa.el (epa--marked-keys, epa--select-keys, epa-display-info)
(epa--read-signature-type):
* emerge.el (emerge-copy-as-kill-A, emerge-copy-as-kill-B)
(emerge-file-names):
* ehelp.el (electric-helpify):
* ediff.el (ediff-regions-wordwise, ediff-regions-linewise):
* ediff-vers.el (rcs-ediff-view-revision):
* ediff-util.el (ediff-setup):
* ediff-mult.el (ediff-append-custom-diff):
* ediff-diff.el (ediff-exec-process, ediff-process-sentinel)
(ediff-wordify):
* echistory.el (Electric-command-history-redo-expression):
* dos-w32.el (find-file-not-found-set-buffer-file-coding-system):
* disp-table.el (describe-display-table):
* dired.el (dired-find-buffer-nocreate):
* dired-aux.el (dired-rename-subdir, dired-dwim-target-directory):
* dabbrev.el (dabbrev--same-major-mode-p):
* chistory.el (list-command-history):
* apropos.el (apropos-documentation):
* allout.el (allout-obtain-passphrase):
(allout-copy-exposed-to-buffer):
(allout-verify-passphrase): Use with-current-buffer.
2009-11-13 22:19:45 +00:00
|
|
|
|
(with-current-buffer buf
|
1993-05-28 00:58:08 +00:00
|
|
|
|
(let ((buffer-read-only nil))
|
|
|
|
|
(save-excursion
|
|
|
|
|
(goto-char (point-max))
|
2013-02-13 09:42:31 +00:00
|
|
|
|
(let ((point (point)))
|
|
|
|
|
(insert "\n find " state)
|
|
|
|
|
(forward-char -1) ;Back up before \n at end of STATE.
|
|
|
|
|
(insert " at " (substring (current-time-string) 0 19))
|
|
|
|
|
(dired-insert-set-properties point (point)))
|
1993-05-28 00:58:08 +00:00
|
|
|
|
(setq mode-line-process
|
1994-04-24 08:15:55 +00:00
|
|
|
|
(concat ":"
|
1993-05-28 00:58:08 +00:00
|
|
|
|
(symbol-name (process-status proc))))
|
|
|
|
|
;; Since the buffer and mode line will show that the
|
|
|
|
|
;; process is dead, we can delete it now. Otherwise it
|
|
|
|
|
;; will stay around until M-x list-processes.
|
|
|
|
|
(delete-process proc)
|
1995-04-25 22:30:38 +00:00
|
|
|
|
(force-mode-line-update)))
|
1991-06-20 12:32:05 +00:00
|
|
|
|
(message "find-dired %s finished." (current-buffer))))))
|
2004-06-06 02:32:53 +00:00
|
|
|
|
|
1992-09-27 01:24:00 +00:00
|
|
|
|
|
1992-03-16 20:39:07 +00:00
|
|
|
|
(provide 'find-dired)
|
|
|
|
|
|
1992-05-30 23:54:21 +00:00
|
|
|
|
;;; find-dired.el ends here
|