changeset 294:97aa6a6f9aa5

*** empty log message ***
author Roland McGrath <roland@gnu.org>
date Thu, 20 Jun 1991 12:32:05 +0000
parents 7e7575d7b6d0
children d63a5e102cab
files lisp/find-dired.el
diffstat 1 files changed, 108 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- 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)