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

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

bug#4301: marked as done (rgrep/lgrep defaults)


From: Emacs bug Tracking System
Subject: bug#4301: marked as done (rgrep/lgrep defaults)
Date: Mon, 07 Dec 2009 17:45:06 +0000

Your message dated Mon, 07 Dec 2009 19:36:30 +0200
with message-id <address@hidden>
and subject line Re: bug#4301: rgrep/lgrep defaults
has caused the Emacs bug report #4301,
regarding rgrep/lgrep defaults
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact address@hidden
immediately.)


-- 
4301: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=4301
Emacs Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 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/



--- End Message ---
--- Begin Message --- Subject: Re: bug#4301: rgrep/lgrep defaults Date: Mon, 07 Dec 2009 19:36:30 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (x86_64-pc-linux-gnu)
> Currently reading a file name pattern in rgep/lgrep provides no completion.
> I think it would be better to provide file completion for the case when
> the user wants to limit the search to one particular file in the current
> directory, or to build a file name pattern based on the file in the
> current directory.

Done.

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

--- End Message ---

reply via email to

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