diff options
author | Kim F. Storm <storm@cua.dk> | 2006-08-23 23:23:02 +0000 |
---|---|---|
committer | Kim F. Storm <storm@cua.dk> | 2006-08-23 23:23:02 +0000 |
commit | 84d797c949018ef7f6d1289f45ca02f5e3ea1ed6 (patch) | |
tree | ef2b829a8c928f1d8f4edfc6c76ed63cd6852af4 /lisp/progmodes/grep.el | |
parent | 74b770deae14252f357519061f630a47b11cb3cb (diff) | |
download | emacs-84d797c949018ef7f6d1289f45ca02f5e3ea1ed6.tar.gz |
(grep-find-use-xargs): Use explicit value `exec'
to mean "use find -exec"; nil now unambiguously means auto-detect.
(grep-compute-defaults): Set grep-find-use-xargs to `exec' if not `gnu'.
Use shell-quote-argument to build grep-find-command and grep-find-template.
(rgrep): Use shell-quote-argument to properly quote arguments to find.
Reported by Tom Seddon.
Diffstat (limited to 'lisp/progmodes/grep.el')
-rw-r--r-- | lisp/progmodes/grep.el | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index a939d54b3c9..48692f9742f 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -335,7 +335,7 @@ This variable's value takes effect when `grep-compute-defaults' is called.") (defvar grep-find-use-xargs nil "Whether \\[grep-find] uses the `xargs' utility by default. -If nil, it uses `find -exec'; if `gnu', it uses `find -print0' and `xargs -0'; +If `exec', it uses `find -exec'; if `gnu', it uses `find -print0' and `xargs -0'; if not nil and not `gnu', it uses `find -print' and `xargs'. This variable's value takes effect when `grep-compute-defaults' is called.") @@ -419,21 +419,29 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'." (format "%s <C> %s <R> <F>" grep-program grep-options))) (unless grep-find-use-xargs (setq grep-find-use-xargs - (if (and - (grep-probe find-program `(nil nil nil ,null-device "-print0")) - (grep-probe "xargs" `(nil nil nil "-0" "-e" "echo"))) - 'gnu))) + (cond + ((and + (grep-probe find-program `(nil nil nil ,null-device "-print0")) + (grep-probe "xargs" `(nil nil nil "-0" "-e" "echo"))) + 'gnu) + (t + 'exec)))) (unless grep-find-command (setq grep-find-command (cond ((eq grep-find-use-xargs 'gnu) (format "%s . -type f -print0 | xargs -0 -e %s" find-program grep-command)) - (grep-find-use-xargs + ((eq grep-find-use-xargs 'exec) + (let ((cmd0 (format "%s . -type f -exec %s" + find-program grep-command))) + (cons + (format "%s {} %s %s" + cmd0 null-device + (shell-quote-argument ";")) + (1+ (length cmd0))))) + (t (format "%s . -type f -print | xargs %s" - find-program grep-command)) - (t (cons (format "%s . -type f -exec %s {} %s \\;" - find-program grep-command null-device) - (+ 22 (length grep-command))))))) + find-program grep-command))))) (unless grep-find-template (setq grep-find-template (let ((gcmd (format "%s <C> %s <R>" @@ -441,11 +449,13 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'." (cond ((eq grep-find-use-xargs 'gnu) (format "%s . <X> -type f <F> -print0 | xargs -0 -e %s" find-program gcmd)) - (grep-find-use-xargs + ((eq grep-find-use-xargs 'exec) + (format "%s . <X> -type f <F> -exec %s {} %s %s" + find-program gcmd null-device + (shell-quote-argument ";"))) + (t (format "%s . <X> -type f <F> -print | xargs %s" - find-program gcmd)) - (t (format "%s . <X> -type f <F> -exec %s {} %s \\;" - find-program gcmd null-device)))))))) + find-program gcmd)))))))) (unless (or (not grep-highlight-matches) (eq grep-highlight-matches t)) (setq grep-highlight-matches (with-temp-buffer @@ -736,18 +746,26 @@ This command shares argument histories with \\[lgrep] and \\[grep-find]." (let ((command (grep-expand-template grep-find-template regexp - (concat "\\( -name " + (concat (shell-quote-argument "(") + " -name " (mapconcat #'shell-quote-argument (split-string files) " -o -name ") - " \\)") + " " + (shell-quote-argument ")")) dir (and grep-find-ignored-directories - (concat "\\( -path '*/" - (mapconcat #'identity + (concat (shell-quote-argument "(") + ;; we should use shell-quote-argument here + " -path " + (mapconcat #'(lambda (dir) + (shell-quote-argument + (concat "*/" dir))) grep-find-ignored-directories - "' -o -path '*/") - "' \\) -prune -o "))))) + " -o -path ") + " " + (shell-quote-argument ")") + " -prune -o "))))) (when command (if current-prefix-arg (setq command |