From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#4301: rgrep/lgrep defaults Date: Mon, 31 Aug 2009 22:59:02 +0300 Organization: JURTA Message-ID: <87ljkzsqk9.fsf@mail.jurta.org> Reply-To: Juri Linkov , 4301@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1251750457 11300 80.91.229.12 (31 Aug 2009 20:27:37 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 31 Aug 2009 20:27:37 +0000 (UTC) To: bug-gnu-emacs@gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Aug 31 22:27:30 2009 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1MiDTL-0003y6-J8 for geb-bug-gnu-emacs@m.gmane.org; Mon, 31 Aug 2009 22:27:29 +0200 Original-Received: from localhost ([127.0.0.1]:42639 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MiDTK-0007Qy-PB for geb-bug-gnu-emacs@m.gmane.org; Mon, 31 Aug 2009 16:27:26 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MiDT2-0007HF-Np for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:27:08 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MiDSw-0007D9-Ou for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:27:07 -0400 Original-Received: from [199.232.76.173] (port=60460 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MiDSw-0007CR-2p for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:27:02 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]:43323) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MiDSu-0002V7-Kl for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:27:01 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.14.3/8.14.3/Debian-5) with ESMTP id n7VKQt1i020787; Mon, 31 Aug 2009 13:26:56 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.14.3/8.14.3/Submit) id n7VKF3l2018420; Mon, 31 Aug 2009 13:15:03 -0700 Resent-Date: Mon, 31 Aug 2009 13:15:03 -0700 X-Loop: owner@emacsbugs.donarmstrong.com Resent-From: Juri Linkov Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs 2Resent-Date: Mon, 31 Aug 2009 20:15:03 +0000 Resent-Message-ID: Resent-Sender: owner@emacsbugs.donarmstrong.com X-Emacs-PR-Message: report 4301 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by submit@emacsbugs.donarmstrong.com id=B.125174937217393 (code B ref -1); Mon, 31 Aug 2009 20:15:03 +0000 Original-Received: (at submit) by emacsbugs.donarmstrong.com; 31 Aug 2009 20:09:32 +0000 X-Spam-Bayes: score:0.5 Bayes not run. spammytokens:Tokens not available. hammytokens:Tokens not available. Original-Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) by rzlab.ucr.edu (8.14.3/8.14.3/Debian-5) with ESMTP id n7VK9Vx1017390 for ; Mon, 31 Aug 2009 13:09:32 -0700 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MiDBy-0000xj-FL for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:09:30 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MiDBs-0000rv-Ul for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:09:29 -0400 Original-Received: from [199.232.76.173] (port=53206 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MiDBs-0000rs-OI for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:09:24 -0400 Original-Received: from smtp-out1.starman.ee ([85.253.0.3]:54715 helo=mx1.starman.ee) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MiDBr-00008K-VD for bug-gnu-emacs@gnu.org; Mon, 31 Aug 2009 16:09:24 -0400 X-Virus-Scanned: by Amavisd-New at mx1.starman.ee Original-Received: from mail.starman.ee (82.131.53.175.cable.starman.ee [82.131.53.175]) by mx1.starman.ee (Postfix) with ESMTP id 22C463F4244 for ; Mon, 31 Aug 2009 23:09:16 +0300 (EEST) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (x86_64-pc-linux-gnu) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) Resent-Date: Mon, 31 Aug 2009 16:27:07 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:30690 Archived-At: 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 %s " 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 %s " 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/