bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#4301: rgrep/lgrep defaults


From: Juri Linkov
Subject: bug#4301: rgrep/lgrep defaults
Date: Mon, 31 Aug 2009 22:59:02 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (x86_64-pc-linux-gnu)

Currently rgep/lgrep proposes to search in C files by default.
This default value assumes that majority of Emacs users prefer searching
only in C files.  This can't be true.  So the current default value is
useless.  I think a better default value is to search _all_ files, where
all includes hidden dot files as well.  rgrep already searches in dot
files, but lgrep doesn't.  To remove this inconsistency we could bind
"all" to "* .*" in `grep-files-aliases'.  Placing it first makes it the
default value which reads clear and understandable in the default prompt as:

  Search for "text" in files (default all):

instead of the current:

  Search for "text" in files (default ch):

"asm" could be moved to the bottom of the list of default values
in `grep-files-aliases', so this less frequent alias comes last
when retrieving via M-n.  Also this requires removing ("ch" "el")
from the pre-defined default of `grep-files-history' and moving
("ch" "el") higher in `grep-files-aliases'.

Another inconsistency is that rgrep provides the default command that
ignores vcs directories, but doesn't ignore vcs files like ".v",
backup files "~" "\\`#" "\\`.#" and other ignorable files from
`completion-ignored-extensions'.  This can be improved by adding
new customizable variable `grep-find-ignored-files' where the nil
option disables it easily.  The same nil option is also useful for
`grep-find-ignored-directories' to disable it at once than deleting
every value from the default list one by one.

For rgrep, `grep-find-ignored-files' means mapping its list to
something like

  \(-name .\#\* -o -name \*\~ -o -name \*.o -o ... \) -prune -o

For lgrep, `grep-find-ignored-files' means mapping its list to
something like

  grep --exclude=.\#\* --exclude=\*\~ --exclude=\*.o ...

Below is a patch that implements this:

Index: lisp/progmodes/grep.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/grep.el,v
retrieving revision 1.106
diff -c -w -b -r1.106 grep.el
*** lisp/progmodes/grep.el      30 Aug 2009 23:46:09 -0000      1.106
--- lisp/progmodes/grep.el      31 Aug 2009 19:54:27 -0000
***************
*** 176,193 ****
    :group 'grep)
  
  (defcustom grep-files-aliases
!   '(("asm" .    "*.[sS]")
      ("c" .     "*.c")
      ("cc" .    "*.cc *.cxx *.cpp *.C *.CC *.c++")
      ("cchh" .    "*.cc *.[ch]xx *.[ch]pp *.[CHh] *.CC *.HH *.[ch]++")
      ("hh" .    "*.hxx *.hpp *.[Hh] *.HH *.h++")
-     ("ch" .    "*.[ch]")
-     ("el" .    "*.el")
      ("h" .     "*.h")
      ("l" .      "[Cc]hange[Ll]og*")
      ("m" .     "[Mm]akefile*")
      ("tex" .    "*.tex")
!     ("texi" .   "*.texi"))
    "*Alist of aliases for the FILES argument to `lgrep' and `rgrep'."
    :type 'alist
    :group 'grep)
--- 176,194 ----
    :group 'grep)
  
  (defcustom grep-files-aliases
!   '(("all" .   "* .*")
!     ("el" .    "*.el")
!     ("ch" .    "*.[ch]")
      ("c" .     "*.c")
      ("cc" .    "*.cc *.cxx *.cpp *.C *.CC *.c++")
      ("cchh" .  "*.cc *.[ch]xx *.[ch]pp *.[CHh] *.CC *.HH *.[ch]++")
      ("hh" .    "*.hxx *.hpp *.[Hh] *.HH *.h++")
      ("h" .     "*.h")
      ("l" .     "[Cc]hange[Ll]og*")
      ("m" .     "[Mm]akefile*")
      ("tex" .   "*.tex")
!     ("texi" .  "*.texi")
!     ("asm" .   "*.[sS]"))
    "*Alist of aliases for the FILES argument to `lgrep' and `rgrep'."
    :type 'alist
    :group 'grep)
***************
*** 197,203 ****
    "*List of names of sub-directories which `rgrep' shall not recurse into.
  If an element is a cons cell, the car is called on the search directory
  to determine whether cdr should not be recursed into."
!   :type '(repeat string)
    :group 'grep)
  
  (defcustom grep-error-screen-columns nil
--- 198,217 ----
    "*List of names of sub-directories which `rgrep' shall not recurse into.
  If an element is a cons cell, the car is called on the search directory
  to determine whether cdr should not be recursed into."
!   :type '(choice (repeat :tag "Ignored directories" string)
!                (const :tag "No ignored directories" nil))
!   :group 'grep)
! 
! (defcustom grep-find-ignored-files
!   (cons ".#*" (delq nil (mapcar (lambda (s)
!                                 (unless (string-match-p "/\\'" s)
!                                   (concat "*" s)))
!                               completion-ignored-extensions)))
!   "*List of names of file names which `rgrep' and `lgrep' shall exclude.
! If an element is a cons cell, the car is called on the search directory
! to determine whether cdr should not be excluded."
!   :type '(choice (repeat :tag "Ignored file" string)
!                (const :tag "No ignored files" nil))
    :group 'grep)
  
  (defcustom grep-error-screen-columns nil
***************
*** 421,427 ****
  
  ;; History of lgrep and rgrep regexp and files args.
  (defvar grep-regexp-history nil)
! (defvar grep-files-history '("ch" "el"))
  
  ;;;###autoload
  (defun grep-process-setup ()
--- 435,441 ----
  
  ;; History of lgrep and rgrep regexp and files args.
  (defvar grep-regexp-history nil)
! (defvar grep-files-history nil)
  
  ;;;###autoload
  (defun grep-process-setup ()
***************
*** 524,530 ****
                (format "%s %s " grep-program grep-options)))
        (unless grep-template
          (setq grep-template
!               (format "%s <C> %s <R> <F>" grep-program grep-options)))
        (unless grep-find-use-xargs
          (setq grep-find-use-xargs
                (cond
--- 538,544 ----
                (format "%s %s " grep-program grep-options)))
        (unless grep-template
          (setq grep-template
!               (format "%s <X> <C> %s <R> <F>" grep-program grep-options)))
        (unless grep-find-use-xargs
          (setq grep-find-use-xargs
                (cond
***************
*** 753,760 ****
         (fn (and bn
                  (stringp bn)
                  (file-name-nondirectory bn)))
!        (default
!          (or (and fn
                    (let ((aliases grep-files-aliases)
                          alias)
                      (while aliases
--- 767,774 ----
         (fn (and bn
                  (stringp bn)
                  (file-name-nondirectory bn)))
!        (default-alias
!          (and fn
                (let ((aliases grep-files-aliases)
                      alias)
                  (while aliases
***************
*** 763,772 ****
                        (if (string-match (wildcard-to-regexp (cdr alias)) fn)
                            (setq aliases nil)
                          (setq alias nil)))
!                     (cdr alias)))
               (and fn
                    (let ((ext (file-name-extension fn)))
!                     (and ext (concat "*." ext))))
               (car grep-files-history)
               (car (car grep-files-aliases))))
         (files (read-string
--- 777,790 ----
                    (if (string-match (wildcard-to-regexp (cdr alias)) fn)
                        (setq aliases nil)
                      (setq alias nil)))
!                 (cdr alias))))
!        (default-extension
           (and fn
                (let ((ext (file-name-extension fn)))
!                 (and ext (concat "*." ext)))))
!        (default
!          (or default-alias
!              default-extension
               (car grep-files-history)
               (car (car grep-files-aliases))))
         (files (read-string
***************
*** 774,780 ****
                         "\" in files"
                         (if default (concat " (default " default ")"))
                         ": ")
!                nil 'grep-files-history default)))
      (and files
         (or (cdr (assoc files grep-files-aliases))
             files))))
--- 792,801 ----
                         "\" in files"
                         (if default (concat " (default " default ")"))
                         ": ")
!                nil 'grep-files-history
!                (delete-dups
!                 (delq nil (append (list default default-alias 
default-extension)
!                                   (mapcar 'car grep-files-aliases)))))))
      (and files
         (or (cdr (assoc files grep-files-aliases))
             files))))
***************
*** 822,828 ****
        (setq command (grep-expand-template
                       grep-template
                       regexp
!                      files))
        (when command
          (if confirm
              (setq command
--- 843,862 ----
        (setq command (grep-expand-template
                       grep-template
                       regexp
!                      files
!                      nil
!                      (and grep-find-ignored-files
!                           (concat " --exclude="
!                                   (mapconcat
!                                    #'(lambda (ignore)
!                                        (cond ((stringp ignore)
!                                               (shell-quote-argument ignore))
!                                              ((consp ignore)
!                                               (and (funcall (car ignore) dir)
!                                                    (shell-quote-argument
!                                                     (cdr ignore))))))
!                                    grep-find-ignored-files
!                                    " --exclude=")))))
        (when command
          (if confirm
              (setq command
***************
*** 893,898 ****
--- 927,933 ----
                              " "
                              (shell-quote-argument ")"))
                      dir
+                     (concat
                       (and grep-find-ignored-directories
                            (concat (shell-quote-argument "(")
                                    ;; we should use shell-quote-argument here
***************
*** 911,917 ****
                                       " -o -path ")
                                    " "
                                    (shell-quote-argument ")")
!                                   " -prune -o ")))))
        (when command
          (if confirm
              (setq command
--- 946,969 ----
                                     " -o -path ")
                                    " "
                                    (shell-quote-argument ")")
!                                   " -prune -o "))
!                      (and grep-find-ignored-files
!                           (concat (shell-quote-argument "(")
!                                   ;; we should use shell-quote-argument here
!                                   " -name "
!                                   (mapconcat
!                                    #'(lambda (ignore)
!                                        (cond ((stringp ignore)
!                                               (shell-quote-argument ignore))
!                                              ((consp ignore)
!                                               (and (funcall (car ignore) dir)
!                                                    (shell-quote-argument
!                                                     (cdr ignore))))))
!                                    grep-find-ignored-files
!                                    " -o -name ")
!                                   " "
!                                   (shell-quote-argument ")")
!                                   " -prune -o "))))))
        (when command
          (if confirm
              (setq command

-- 
Juri Linkov
http://www.jurta.org/emacs/






reply via email to

[Prev in Thread] Current Thread [Next in Thread]