GNU bug report logs - #4301
rgrep/lgrep defaults

Previous Next

Package: emacs;

Reported by: Juri Linkov <juri <at> jurta.org>

Date: Mon, 31 Aug 2009 20:15:03 UTC

Severity: normal

Done: Juri Linkov <juri <at> jurta.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 4301 in the body.
You can then email your comments to 4301 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>:
bug#4301; Package emacs. (Mon, 31 Aug 2009 20:15:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to Juri Linkov <juri <at> jurta.org>:
New bug report received and forwarded. Copy sent to Emacs Bugs <bug-gnu-emacs <at> gnu.org>. (Mon, 31 Aug 2009 20:15:04 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> emacsbugs.donarmstrong.com (full text, mbox):

From: Juri Linkov <juri <at> jurta.org>
To: bug-gnu-emacs <at> gnu.org
Subject: rgrep/lgrep defaults
Date: Mon, 31 Aug 2009 22:59:02 +0300
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/




Information forwarded to bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>:
bug#4301; Package emacs. (Thu, 10 Sep 2009 01:15:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to Juri Linkov <juri <at> jurta.org>:
Extra info received and forwarded to list. Copy sent to Emacs Bugs <bug-gnu-emacs <at> gnu.org>. (Thu, 10 Sep 2009 01:15:03 GMT) Full text and rfc822 format available.

Message #10 received at 4301 <at> emacsbugs.donarmstrong.com (full text, mbox):

From: Juri Linkov <juri <at> jurta.org>
To: 4301 <at> debbugs.gnu.org
Subject: Re: bug#4301: rgrep/lgrep defaults
Date: Thu, 10 Sep 2009 04:07:17 +0300
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.

Index: lisp/progmodes/grep.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/grep.el,v
retrieving revision 1.107
diff -c -r1.107 grep.el
*** lisp/progmodes/grep.el	10 Sep 2009 00:57:44 -0000	1.107
--- lisp/progmodes/grep.el	10 Sep 2009 01:06:46 -0000
***************
*** 788,799 ****
  	       default-extension
  	       (car grep-files-history)
  	       (car (car grep-files-aliases))))
! 	 (files (read-string
  		 (concat "Search for \"" regexp
  			 "\" 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)))))))
--- 788,800 ----
  	       default-extension
  	       (car grep-files-history)
  	       (car (car grep-files-aliases))))
! 	 (files (completing-read
  		 (concat "Search for \"" regexp
  			 "\" in files"
  			 (if default (concat " (default " default ")"))
  			 ": ")
! 		 'read-file-name-internal
! 		 nil nil nil 'grep-files-history
  		 (delete-dups
  		  (delq nil (append (list default default-alias default-extension)
  				    (mapcar 'car grep-files-aliases)))))))

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



Reply sent to Juri Linkov <juri <at> jurta.org>:
You have taken responsibility. (Mon, 07 Dec 2009 17:45:06 GMT) Full text and rfc822 format available.

Notification sent to Juri Linkov <juri <at> jurta.org>:
bug acknowledged by developer. (Mon, 07 Dec 2009 17:45:07 GMT) Full text and rfc822 format available.

Message #15 received at 4301-done <at> emacsbugs.donarmstrong.com (full text, mbox):

From: Juri Linkov <juri <at> jurta.org>
To: 4301-done <at> debbugs.gnu.org
Subject: Re: bug#4301: rgrep/lgrep defaults
Date: Mon, 07 Dec 2009 19:36:30 +0200
> 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/



bug archived. Request was from Debbugs Internal Request <bug-gnu-emacs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 05 Jan 2010 12:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 15 years and 167 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.