# HG changeset patch # User Roland McGrath # Date 677421125 0 # Node ID 97aa6a6f9aa55456eab41c1871a3de504ae0db25 # Parent 7e7575d7b6d07a7eca73b03fe09c6cee07c497e0 *** empty log message *** diff -r 7e7575d7b6d0 -r 97aa6a6f9aa5 lisp/find-dired.el --- a/lisp/find-dired.el Thu Jun 20 10:29:36 1991 +0000 +++ b/lisp/find-dired.el Thu Jun 20 12:32:05 1991 +0000 @@ -1,7 +1,8 @@ ;;; find-dired.el -- Run a `find' command and dired the result. -;;; Copyright (C) 1991 Free Software Foundation, Inc. -;;; Written by Roland McGrath -;;; +;;; Copyright (C) 1991 Roland McGrath + +(defconst find-dired-version "$Id: find-dired.el,v 1.7 1991/06/20 08:50:20 sk RelBeta $") + ;;; This program is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 1, or (at your option) @@ -17,6 +18,17 @@ ;;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA ;;; 02139, USA. ;;; +;;; Send bug reports to roland@gnu.ai.mit.edu. + +;;; To use this file, byte-compile it, install it somewhere +;;; in your load-path, and put: +;;; (autoload 'find-dired "find-dired" nil t) +;;; (autoload 'lookfor-dired "find-dired" nil t) +;;; in your .emacs, or site-init.el, etc. +;;; To bind it to a key, put, e.g.: +;;; (global-set-key "\C-cf" 'find-dired) +;;; (global-set-key "\C-cl" 'lookfor-dired) +;;; in your .emacs. (require 'dired) @@ -32,7 +44,10 @@ "Run `find' and go into dired-mode on a buffer of the output. The command run is \"find . \\( ARGS \\) -ls\" (after changing into DIR)." (interactive (list (read-file-name "Run find in directory: " nil "" t) - (read-string "Run find (with args): " find-args))) + (if (featurep 'gmhist) + (read-with-history-in 'find-args-history + "Run find (with args): ") + (read-string "Run find (with args): " find-args)))) (if (equal dir "") (setq dir default-directory)) ;; Expand DIR, and make sure it has a trailing slash. @@ -68,31 +83,97 @@ (defun find-dired-filter (proc string) ;; Filter for \\[find-dired] processes. - (let ((buf (process-buffer proc))) - (if (buffer-name buf) - (save-excursion - (set-buffer buf) - (save-restriction - (widen) - (save-excursion - (let ((buffer-read-only nil) - (end (point-max))) - (goto-char end) - (insert string) - (goto-char end) - (or (looking-at "^") - (forward-line 1)) - (while (looking-at "^") - (insert " ") - (forward-line 1)))))) - ;; The buffer has been killed. - (delete-process proc)))) + (let ((buf (process-buffer proc))) + (if (buffer-name buf) ; not killed? + (save-excursion + (set-buffer buf) + (save-restriction + (widen) + (save-excursion + (let ((buffer-read-only nil) + (end (point-max))) + (goto-char end) + (insert string) + (goto-char end) + (or (looking-at "^") + (forward-line 1)) + (while (looking-at "^") + (insert " ") + (forward-line 1)))))) + ;; The buffer has been killed. + (delete-process proc)))) (defun find-dired-sentinel (proc state) ;; Sentinel for \\[find-dired] processes. - (save-excursion - (set-buffer (process-buffer proc)) - (setq mode-line-process nil) - (message "find-dired %s finished." (current-buffer)))) + (let ((buf (process-buffer proc))) + (if (buffer-name buf) + (save-excursion + (set-buffer buf) + (setq mode-line-process nil) + (message "find-dired %s finished." (current-buffer)))))) + +(or (fboundp 'start-process-shell-command) + ;; From version 19 subr.el. + (defun start-process-shell-command (name buffer &rest args) + "Start a program in a subprocess. Return the process object for it. +Args are NAME BUFFER COMMAND &rest COMMAND-ARGS. +NAME is name for process. It is modified if necessary to make it unique. +BUFFER is the buffer or (buffer-name) to associate with the process. + Process output goes at end of that buffer, unless you specify + an output stream or filter function to handle the output. + BUFFER may be also nil, meaning that this process is not associated + with any buffer +Third arg is command name, the name of a shell command. +Remaining arguments are the arguments for the command. +Wildcards and redirection are handle as usual in the shell." + (if (eq system-type 'vax-vms) + (apply 'start-process name buffer args) + (start-process name buffer shell-file-name "-c" + (concat "exec " (mapconcat 'identity args " "))))) + ) + +;; From: oblanc@watcgl.waterloo.edu (Olivier Blanc) +;; Subject: find-dired, lookfor-dired +;; Date: 10 May 91 17:50:00 GMT +;; Organization: University of Waterloo + +;; I added a functiopn to the find-dired.el file: +;; The function is a lookfor-dired and is used to search a string +;; a subtree: + +;;;###autoload +(defun lookfor-dired (dir args) + "Find files in DIR containing a regexp ARG and go into dired-mode on the output. +The command run is + + \"find . -exec grep -l ARG {} \\\; -ls\" + +\(after changing into DIR)." + (interactive (list (read-file-name "Run find in directory: " nil "" t) + (read-string "Run find (with args): " find-args))) + (if (equal dir "") + (setq dir default-directory)) + ;; Expand DIR, and make sure it has a trailing slash. + (setq dir (file-name-as-directory (expand-file-name dir))) + ;; Check that it's really a directory. + (or (file-directory-p dir) + (error "%s is not a directory!" dir)) + (switch-to-buffer (get-buffer-create "*Find*")) + (widen) + (kill-all-local-variables) + (setq buffer-read-only nil) + (erase-buffer) + (setq default-directory dir + find-args args + args (concat "find . -exec grep -l " args " {} \\\; -ls")) + (insert " " args "\n" + " " dir ":\n") + (set-process-filter (start-process-shell-command "find" + (current-buffer) args) + 'find-dired-filter) + (set-process-sentinel (get-buffer-process (current-buffer)) + 'find-dired-sentinel) + (dired-mode) + (setq mode-line-process '(": %s"))) (provide 'find-dired)