mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-05 11:45:45 +00:00
Use find -exec with '+' for grep-find if supported.
* lisp/progmodes/grep.el (grep-find-use-xargs): Doc fix. (grep-compute-defaults): Check for `-exec COMMAND +' support. Set grep-find-use-xargs, grep-find-command, and grep-find-template accordingly. Don't add the null-device if not needed.
This commit is contained in:
parent
afa8e9f606
commit
f3ca7378c1
@ -1,5 +1,10 @@
|
||||
2011-04-02 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* progmodes/grep.el (grep-find-use-xargs): Doc fix.
|
||||
(grep-compute-defaults): Check for `-exec COMMAND +' support.
|
||||
Set grep-find-use-xargs, grep-find-command, and grep-find-template
|
||||
accordingly. Don't add the null-device if not needed.
|
||||
|
||||
* files.el (save-some-buffers): Doc fix.
|
||||
|
||||
2011-04-02 Eli Zaretskii <eliz@gnu.org>
|
||||
|
@ -440,10 +440,11 @@ This variable's value takes effect when `grep-compute-defaults' is called.")
|
||||
|
||||
;;;###autoload
|
||||
(defvar grep-find-use-xargs nil
|
||||
"Non-nil means that `grep-find' uses the `xargs' utility by default.
|
||||
If `exec', use `find -exec'.
|
||||
"How to invoke find and grep.
|
||||
If `exec', use `find -exec {} ;'.
|
||||
If `exec-plus' use `find -exec {} +'.
|
||||
If `gnu', use `find -print0' and `xargs -0'.
|
||||
Any other non-nil value means to use `find -print' and `xargs'.
|
||||
Any other value means to use `find -print' and `xargs'.
|
||||
|
||||
This variable's value takes effect when `grep-compute-defaults' is called.")
|
||||
|
||||
@ -561,6 +562,10 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
|
||||
(unless grep-find-use-xargs
|
||||
(setq grep-find-use-xargs
|
||||
(cond
|
||||
((grep-probe find-program
|
||||
`(nil nil nil ,null-device "-exec" "echo"
|
||||
"{}" "+"))
|
||||
'exec-plus)
|
||||
((and
|
||||
(grep-probe find-program `(nil nil nil ,null-device "-print0"))
|
||||
(grep-probe xargs-program `(nil nil nil "-0" "-e" "echo")))
|
||||
@ -575,13 +580,17 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
|
||||
;; forward slashes as directory separators.
|
||||
(format "%s . -type f -print0 | \"%s\" -0 -e %s"
|
||||
find-program xargs-program grep-command))
|
||||
((eq grep-find-use-xargs 'exec)
|
||||
((memq grep-find-use-xargs '(exec exec-plus))
|
||||
(let ((cmd0 (format "%s . -type f -exec %s"
|
||||
find-program grep-command)))
|
||||
find-program grep-command))
|
||||
(null (if grep-use-null-device
|
||||
(format "%s " null-device)
|
||||
"")))
|
||||
(cons
|
||||
(format "%s {} %s %s"
|
||||
cmd0 null-device
|
||||
(shell-quote-argument ";"))
|
||||
(if (eq grep-find-use-xargs 'exec-plus)
|
||||
(format "%s %s{} +" cmd0 null)
|
||||
(format "%s {} %s%s" cmd0 null
|
||||
(shell-quote-argument ";")))
|
||||
(1+ (length cmd0)))))
|
||||
(t
|
||||
(format "%s . -type f -print | \"%s\" %s"
|
||||
@ -589,14 +598,20 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
|
||||
(unless grep-find-template
|
||||
(setq grep-find-template
|
||||
(let ((gcmd (format "%s <C> %s <R>"
|
||||
grep-program grep-options)))
|
||||
grep-program grep-options))
|
||||
(null (if grep-use-null-device
|
||||
(format "%s " null-device)
|
||||
"")))
|
||||
(cond ((eq grep-find-use-xargs 'gnu)
|
||||
(format "%s . <X> -type f <F> -print0 | \"%s\" -0 -e %s"
|
||||
find-program xargs-program gcmd))
|
||||
((eq grep-find-use-xargs 'exec)
|
||||
(format "%s . <X> -type f <F> -exec %s {} %s %s"
|
||||
find-program gcmd null-device
|
||||
(format "%s . <X> -type f <F> -exec %s {} %s%s"
|
||||
find-program gcmd null
|
||||
(shell-quote-argument ";")))
|
||||
((eq grep-find-use-xargs 'exec-plus)
|
||||
(format "%s . <X> -type f <F> -exec %s %s{} +"
|
||||
find-program gcmd null))
|
||||
(t
|
||||
(format "%s . <X> -type f <F> -print | \"%s\" %s"
|
||||
find-program xargs-program gcmd))))))))
|
||||
|
Loading…
Reference in New Issue
Block a user