]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/progmodes/grep.el: More fixes for 'lgrep' (bug#23590)
authorJuri Linkov <juri@linkov.net>
Wed, 14 Oct 2020 08:45:26 +0000 (11:45 +0300)
committerJuri Linkov <juri@linkov.net>
Wed, 14 Oct 2020 08:45:26 +0000 (11:45 +0300)
* lisp/progmodes/grep.el (grep-expand-template): Add new arg 'more-opts'.
(grep-use-directories-skip): New variable.
(lgrep): Set 'grep-use-directories-skip' to the result of 'grep-probe'.
Use "--directories=skip" when 'grep-use-directories-skip' is t.

lisp/progmodes/grep.el

index f028a4279d182897a9d38d47b817ed8f42f9a69b..9683826974950d1460a8c53ec879c94658e09770 100644 (file)
@@ -959,10 +959,10 @@ The substitution is based on variables bound dynamically, and
 these include `opts', `dir', `files', `null-device', `excl' and
 `regexp'.")
 
-(defun grep-expand-template (template &optional regexp files dir excl)
+(defun grep-expand-template (template &optional regexp files dir excl more-opts)
   "Expand grep COMMAND string replacing <C>, <D>, <F>, <R>, and <X>."
   (let* ((command template)
-         (env `((opts . ,(let (opts)
+         (env `((opts . ,(let ((opts more-opts))
                            (when (and case-fold-search
                                       (isearch-no-upper-case-p regexp t))
                              (push "-i" opts))
@@ -1058,6 +1058,8 @@ REGEXP is used as a string in the prompt."
         (or (cdr (assoc files grep-files-aliases))
             files))))
 
+(defvar grep-use-directories-skip 'auto-detect)
+
 ;;;###autoload
 (defun lgrep (regexp &optional files dir confirm)
   "Run grep, searching for REGEXP in FILES in directory DIR.
@@ -1103,6 +1105,12 @@ command before it's run."
          (if (string= command grep-command)
              (setq command nil))
        (setq dir (file-name-as-directory (expand-file-name dir)))
+       (unless (or (not grep-use-directories-skip) (eq grep-use-directories-skip t))
+         (setq grep-use-directories-skip
+               (grep-probe grep-program
+                         `(nil nil nil "--directories=skip" "foo"
+                               ,null-device)
+                         nil 1)))
        (setq command (grep-expand-template
                       grep-template
                       regexp
@@ -1119,13 +1127,10 @@ command before it's run."
                                                     (shell-quote-argument
                                                      (cdr ignore))))))
                                     grep-find-ignored-files
-                                    " --exclude=")))))
+                                    " --exclude=")))
+                      (and (eq grep-use-directories-skip t)
+                           '("--directories=skip"))))
        (when command
-          (when (grep-probe grep-program
-                            `(nil nil nil "--directories=skip" "foo"
-                                  ,null-device)
-                            nil 1)
-            (setq command (concat command " --directories=skip")))
          (if confirm
              (setq command
                    (read-from-minibuffer "Confirm: "