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.
View this message in rfc822 format
From: help-debbugs <at> gnu.org (Emacs bug Tracking System) To: Juri Linkov <juri <at> jurta.org> Subject: bug#4301: marked as done (rgrep/lgrep defaults) Date: Mon, 07 Dec 2009 17:45:06 +0000
[Message part 1 (text/plain, inline)]
Your message dated Mon, 07 Dec 2009 19:36:30 +0200 with message-id <873a3m3cv5.fsf <at> mail.jurta.org> 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 help-debbugs <at> gnu.org immediately.) -- 4301: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=4301 Emacs Bug Tracking System Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
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 +0300Currently 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/
[Message part 3 (message/rfc822, inline)]
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/
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.