annotate lisp/progmodes/grep.el @ 112238:4f72b1e43644

Merge from emacs-23 branch.
author Glenn Morris <rgm@gnu.org>
date Sat, 15 Jan 2011 12:03:38 -0800
parents 417b1e4d63cd
children ef719132ddfa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
62160
37249e74aa98 Fix file's header line.
Eli Zaretskii <eliz@gnu.org>
parents: 61902
diff changeset
1 ;;; grep.el --- run Grep as inferior of Emacs, parse match messages
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
2
57769
e663f6b659a6 (grep-regexp-alist): Move match highlighting
Juri Linkov <juri@jurta.org>
parents: 57043
diff changeset
3 ;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
112218
376148b31b5e Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents: 107944
diff changeset
4 ;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
87560
62e8690b9f1a (find-name-arg): Declare for compiler.
Glenn Morris <rgm@gnu.org>
parents: 87523
diff changeset
5 ;; Free Software Foundation, Inc.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
6
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
7 ;; Author: Roland McGrath <roland@gnu.org>
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
8 ;; Maintainer: FSF
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
9 ;; Keywords: tools, processes
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
10
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
12
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94566
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94566
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94566
diff changeset
16 ;; (at your option) any later version.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
17
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
21 ;; GNU General Public License for more details.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
22
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94673
52b7a8c22af5 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94566
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
25
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
26 ;;; Commentary:
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
27
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
28 ;; This package provides the grep facilities documented in the Emacs
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
29 ;; user's manual.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
30
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
31 ;;; Code:
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
32
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
33 (require 'compile)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
34
65232
6b7109ed93a0 (font-lock-lines-before): Add defvar.
Juanma Barranquero <lekktu@gmail.com>
parents: 65126
diff changeset
35
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
36 (defgroup grep nil
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
37 "Run grep as inferior of Emacs, parse error messages."
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
38 :group 'tools
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
39 :group 'processes)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
40
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
41 (defvar grep-host-defaults-alist nil
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
42 "Default values depending on target host.
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
43 `grep-compute-defaults' returns default values for every local or
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
44 remote host `grep' runs. These values can differ from host to
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
45 host. Once computed, the default values are kept here in order
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
46 to avoid computing them again.")
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
47
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
48 (defun grep-apply-setting (symbol value)
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
49 "Set SYMBOL to VALUE, and update `grep-host-defaults-alist'.
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
50 SYMBOL should be one of `grep-command', `grep-template',
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
51 `grep-use-null-device', `grep-find-command',
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
52 `grep-find-template', `grep-find-use-xargs', or
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
53 `grep-highlight-matches'."
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
54 (when grep-host-defaults-alist
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
55 (let* ((host-id
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
56 (intern (or (file-remote-p default-directory) "localhost")))
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
57 (host-defaults (assq host-id grep-host-defaults-alist))
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
58 (defaults (assq nil grep-host-defaults-alist)))
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
59 (setcar (cdr (assq symbol host-defaults)) value)
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
60 (setcar (cdr (assq symbol defaults)) value)))
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
61 (set-default symbol value))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
62
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
63 ;;;###autoload
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
64 (defcustom grep-window-height nil
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
65 "*Number of lines in a grep window. If nil, use `compilation-window-height'."
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
66 :type '(choice (const :tag "Default" nil)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
67 integer)
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59991
diff changeset
68 :version "22.1"
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
69 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
70
56948
f6f74981c4b0 (grep-highlight-matches): Change default from
Juri Linkov <juri@jurta.org>
parents: 56921
diff changeset
71 (defcustom grep-highlight-matches 'auto-detect
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
72 "Use special markers to highlight grep matches.
56881
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
73
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
74 Some grep programs are able to surround matches with special
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
75 markers in grep output. Such markers can be used to highlight
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
76 matches in grep mode.
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
77
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
78 This option sets the environment variable GREP_COLORS to specify
56881
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
79 markers for highlighting and GREP_OPTIONS to add the --color
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
80 option in front of any explicit grep options before starting
56960
84482ed458f2 (grep-highlight-matches): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 56948
diff changeset
81 the grep.
84482ed458f2 (grep-highlight-matches): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 56948
diff changeset
82
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
83 When this option is `auto', grep uses `--color=auto' to highlight
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
84 matches only when it outputs to a terminal (when `grep' is the last
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
85 command in the pipe), thus avoiding the use of any potentially-harmful
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
86 escape sequences when standard output goes to a file or pipe.
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
87
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
88 To make grep highlight matches even into a pipe, you need the option
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
89 `always' that forces grep to use `--color=always' to unconditionally
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
90 output escape sequences.
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
91
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
92 In interactive usage, the actual value of this variable is set up
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
93 by `grep-compute-defaults' when the default value is `auto-detect'.
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
94 To change the default value, use Customize or call the function
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
95 `grep-apply-setting'."
56948
f6f74981c4b0 (grep-highlight-matches): Change default from
Juri Linkov <juri@jurta.org>
parents: 56921
diff changeset
96 :type '(choice (const :tag "Do not highlight matches with grep markers" nil)
f6f74981c4b0 (grep-highlight-matches): Change default from
Juri Linkov <juri@jurta.org>
parents: 56921
diff changeset
97 (const :tag "Highlight matches with grep markers" t)
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
98 (const :tag "Use --color=always" always)
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
99 (const :tag "Use --color=auto" auto)
56948
f6f74981c4b0 (grep-highlight-matches): Change default from
Juri Linkov <juri@jurta.org>
parents: 56921
diff changeset
100 (other :tag "Not Set" auto-detect))
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
101 :set 'grep-apply-setting
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59991
diff changeset
102 :version "22.1"
56881
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
103 :group 'grep)
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
104
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
105 (defcustom grep-scroll-output nil
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
106 "*Non-nil to scroll the *grep* buffer window as output appears.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
107
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
108 Setting it causes the grep commands to put point at the end of their
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
109 output window so that the end of the output is always visible rather
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
110 than the begining."
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
111 :type 'boolean
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59991
diff changeset
112 :version "22.1"
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
113 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
114
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
115 ;;;###autoload
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
116 (defcustom grep-command nil
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
117 "The default grep command for \\[grep].
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
118 If the grep program used supports an option to always include file names
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
119 in its output (such as the `-H' option to GNU grep), it's a good idea to
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
120 include it when specifying `grep-command'.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
121
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
122 In interactive usage, the actual value of this variable is set up
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
123 by `grep-compute-defaults'; to change the default value, use
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
124 Customize or call the function `grep-apply-setting'."
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
125 :type '(choice string
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
126 (const :tag "Not Set" nil))
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
127 :set 'grep-apply-setting
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
128 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
129
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
130 (defcustom grep-template nil
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
131 "The default command to run for \\[lgrep].
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
132 The following place holders should be present in the string:
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
133 <C> - place to put -i if case insensitive grep.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
134 <F> - file names and wildcards to search.
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
135 <X> - file names and wildcards to exclude.
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
136 <R> - the regular expression searched for.
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
137 <N> - place to insert null-device.
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
138
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
139 In interactive usage, the actual value of this variable is set up
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
140 by `grep-compute-defaults'; to change the default value, use
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
141 Customize or call the function `grep-apply-setting'."
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
142 :type '(choice string
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
143 (const :tag "Not Set" nil))
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
144 :set 'grep-apply-setting
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
145 :version "22.1"
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
146 :group 'grep)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
147
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
148 (defcustom grep-use-null-device 'auto-detect
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
149 "If t, append the value of `null-device' to `grep' commands.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
150 This is done to ensure that the output of grep includes the filename of
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
151 any match in the case where only a single file is searched, and is not
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
152 necessary if the grep program used supports the `-H' option.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
153
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
154 In interactive usage, the actual value of this variable is set up
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
155 by `grep-compute-defaults'; to change the default value, use
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
156 Customize or call the function `grep-apply-setting'."
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
157 :type '(choice (const :tag "Do Not Append Null Device" nil)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
158 (const :tag "Append Null Device" t)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
159 (other :tag "Not Set" auto-detect))
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
160 :set 'grep-apply-setting
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
161 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
162
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
163 ;;;###autoload
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
164 (defcustom grep-find-command nil
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
165 "The default find command for \\[grep-find].
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
166 In interactive usage, the actual value of this variable is set up
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
167 by `grep-compute-defaults'; to change the default value, use
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
168 Customize or call the function `grep-apply-setting'."
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
169 :type '(choice string
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
170 (const :tag "Not Set" nil))
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
171 :set 'grep-apply-setting
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
172 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
173
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
174 (defcustom grep-find-template nil
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
175 "The default command to run for \\[rgrep].
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
176 The following place holders should be present in the string:
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
177 <D> - base directory for find
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
178 <X> - find options to restrict or expand the directory list
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
179 <F> - find options to limit the files matched
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
180 <C> - place to put -i if case insensitive grep
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
181 <R> - the regular expression searched for.
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
182 In interactive usage, the actual value of this variable is set up
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
183 by `grep-compute-defaults'; to change the default value, use
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
184 Customize or call the function `grep-apply-setting'."
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
185 :type '(choice string
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
186 (const :tag "Not Set" nil))
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
187 :set 'grep-apply-setting
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59991
diff changeset
188 :version "22.1"
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
189 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
190
83780
d1d369daf8dd (grep-files-aliases): Add cc alias.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 83778
diff changeset
191 (defcustom grep-files-aliases
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
192 '(("all" . "* .*")
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
193 ("el" . "*.el")
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
194 ("ch" . "*.[ch]")
83780
d1d369daf8dd (grep-files-aliases): Add cc alias.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 83778
diff changeset
195 ("c" . "*.c")
96604
8e43e1211ac1 (grep-files-aliases): Improve the C++ source
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94775
diff changeset
196 ("cc" . "*.cc *.cxx *.cpp *.C *.CC *.c++")
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
197 ("cchh" . "*.cc *.[ch]xx *.[ch]pp *.[CHh] *.CC *.HH *.[ch]++")
96604
8e43e1211ac1 (grep-files-aliases): Improve the C++ source
Dan Nicolaescu <dann@ics.uci.edu>
parents: 94775
diff changeset
198 ("hh" . "*.hxx *.hpp *.[Hh] *.HH *.h++")
83780
d1d369daf8dd (grep-files-aliases): Add cc alias.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 83778
diff changeset
199 ("h" . "*.h")
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
200 ("l" . "[Cc]hange[Ll]og*")
83780
d1d369daf8dd (grep-files-aliases): Add cc alias.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 83778
diff changeset
201 ("m" . "[Mm]akefile*")
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
202 ("tex" . "*.tex")
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
203 ("texi" . "*.texi")
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
204 ("asm" . "*.[sS]"))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
205 "*Alist of aliases for the FILES argument to `lgrep' and `rgrep'."
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
206 :type 'alist
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
207 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
208
83778
309cf30d46f5 (grep-find-ignored-directories): Add
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 82421
diff changeset
209 (defcustom grep-find-ignored-directories
87523
fe5c2c0f8dcf * progmodes/grep.el (grep-find-ignored-directories): Initialize
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 87453
diff changeset
210 vc-directory-exclusion-list
103787
fb68f473a020 (rgrep): Allow grep-find-ignored-directories
Sam Steingold <sds@gnu.org>
parents: 103276
diff changeset
211 "*List of names of sub-directories which `rgrep' shall not recurse into.
fb68f473a020 (rgrep): Allow grep-find-ignored-directories
Sam Steingold <sds@gnu.org>
parents: 103276
diff changeset
212 If an element is a cons cell, the car is called on the search directory
fb68f473a020 (rgrep): Allow grep-find-ignored-directories
Sam Steingold <sds@gnu.org>
parents: 103276
diff changeset
213 to determine whether cdr should not be recursed into."
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
214 :type '(choice (repeat :tag "Ignored directories" string)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
215 (const :tag "No ignored directories" nil))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
216 :group 'grep)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
217
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
218 (defcustom grep-find-ignored-files
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
219 (cons ".#*" (delq nil (mapcar (lambda (s)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
220 (unless (string-match-p "/\\'" s)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
221 (concat "*" s)))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
222 completion-ignored-extensions)))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
223 "*List of file names which `rgrep' and `lgrep' shall exclude.
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
224 If an element is a cons cell, the car is called on the search directory
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
225 to determine whether cdr should not be excluded."
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
226 :type '(choice (repeat :tag "Ignored file" string)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
227 (const :tag "No ignored files" nil))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
228 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
229
56226
bfe817c8d413 (grep-error-screen-columns): New variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 56155
diff changeset
230 (defcustom grep-error-screen-columns nil
bfe817c8d413 (grep-error-screen-columns): New variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 56155
diff changeset
231 "*If non-nil, column numbers in grep hits are screen columns.
bfe817c8d413 (grep-error-screen-columns): New variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 56155
diff changeset
232 See `compilation-error-screen-columns'"
bfe817c8d413 (grep-error-screen-columns): New variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 56155
diff changeset
233 :type '(choice (const :tag "Default" nil)
bfe817c8d413 (grep-error-screen-columns): New variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 56155
diff changeset
234 integer)
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59991
diff changeset
235 :version "22.1"
56226
bfe817c8d413 (grep-error-screen-columns): New variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 56155
diff changeset
236 :group 'grep)
bfe817c8d413 (grep-error-screen-columns): New variable.
Daniel Pfeiffer <occitan@esperanto.org>
parents: 56155
diff changeset
237
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
238 ;;;###autoload
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
239 (defcustom grep-setup-hook nil
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
240 "List of hook functions run by `grep-process-setup' (see `run-hooks')."
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
241 :type 'hook
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
242 :group 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
243
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
244 (defvar grep-mode-map
94775
b51bb57e843b (compilation-minor-mode-map, compilation-mode-map):
Sam Steingold <sds@gnu.org>
parents: 94673
diff changeset
245 (let ((map (make-sparse-keymap)))
b51bb57e843b (compilation-minor-mode-map, compilation-mode-map):
Sam Steingold <sds@gnu.org>
parents: 94673
diff changeset
246 (set-keymap-parent map compilation-minor-mode-map)
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
247 (define-key map " " 'scroll-up)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
248 (define-key map "\^?" 'scroll-down)
57022
463edf7390ca (grep-mode-map): Rename `next-error-follow-mode' to `next-error-follow-minor-mode'.
Juri Linkov <juri@jurta.org>
parents: 56998
diff changeset
249 (define-key map "\C-c\C-f" 'next-error-follow-minor-mode)
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
250
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
251 (define-key map "\r" 'compile-goto-error) ;; ?
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
252 (define-key map "n" 'next-error-no-select)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
253 (define-key map "p" 'previous-error-no-select)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
254 (define-key map "{" 'compilation-previous-file)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
255 (define-key map "}" 'compilation-next-file)
64728
c1b77e79c51a (grep-mode-map): Bind TAB to `compilation-next-error'
Juri Linkov <juri@jurta.org>
parents: 64725
diff changeset
256 (define-key map "\t" 'compilation-next-error)
c1b77e79c51a (grep-mode-map): Bind TAB to `compilation-next-error'
Juri Linkov <juri@jurta.org>
parents: 64725
diff changeset
257 (define-key map [backtab] 'compilation-previous-error)
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
258
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
259 ;; Set up the menu-bar
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
260 (define-key map [menu-bar grep]
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
261 (cons "Grep" (make-sparse-keymap "Grep")))
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
262
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
263 (define-key map [menu-bar grep compilation-kill-compilation]
92493
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
264 '(menu-item "Kill Grep" kill-compilation
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
265 :help "Kill the currently running grep process"))
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
266 (define-key map [menu-bar grep compilation-separator2] '("----"))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
267 (define-key map [menu-bar grep compilation-compile]
92493
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
268 '(menu-item "Compile..." compile
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
269 :help "Compile the program including the current buffer. Default: run `make'"))
101450
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
270 (define-key map [menu-bar grep compilation-rgrep]
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
271 '(menu-item "Recursive grep..." rgrep
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
272 :help "User-friendly recursive grep in directory tree"))
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
273 (define-key map [menu-bar grep compilation-lgrep]
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
274 '(menu-item "Local grep..." lgrep
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
275 :help "User-friendly grep in a directory"))
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
276 (define-key map [menu-bar grep compilation-grep-find]
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
277 '(menu-item "Grep via Find..." grep-find
2bdde6d84336 (grep-mode-map): Put grep-find before grep and
Juri Linkov <juri@jurta.org>
parents: 100908
diff changeset
278 :help "Run grep via find, with user-specified args"))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
279 (define-key map [menu-bar grep compilation-grep]
92493
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
280 '(menu-item "Another grep..." grep
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
281 :help "Run grep, with user-specified args, and collect output in a buffer."))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
282 (define-key map [menu-bar grep compilation-recompile]
92493
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
283 '(menu-item "Repeat grep" recompile
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
284 :help "Run grep again"))
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
285 (define-key map [menu-bar grep compilation-separator2] '("----"))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
286 (define-key map [menu-bar grep compilation-first-error]
92493
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
287 '(menu-item "First Match" first-error
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
288 :help "Restart at the first match, visit corresponding location"))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
289 (define-key map [menu-bar grep compilation-previous-error]
92493
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
290 '(menu-item "Previous Match" previous-error
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
291 :help "Visit the previous match and corresponding location"))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
292 (define-key map [menu-bar grep compilation-next-error]
92493
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
293 '(menu-item "Next Match" next-error
402ee2cfca27 * bindings.el (mode-line-remote): Add mouse-face. Improve tooltip.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 92230
diff changeset
294 :help "Visit the next match and corresponding location"))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
295 map)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
296 "Keymap for grep buffers.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
297 `compilation-minor-mode-map' is a cdr of this.")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
298
92204
ab425a596ec9 (grep-mode-tool-bar-map): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 88102
diff changeset
299 (defvar grep-mode-tool-bar-map
98660
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
300 ;; When bootstrapping, tool-bar-map is not properly initialized yet,
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
301 ;; so don't do anything.
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
302 (when (keymapp (butlast tool-bar-map))
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
303 (let ((map (butlast (copy-keymap tool-bar-map)))
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
304 (help (last tool-bar-map))) ;; Keep Help last in tool bar
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
305 (tool-bar-local-item
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
306 "left-arrow" 'previous-error-no-select 'previous-error-no-select map
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
307 :rtl "right-arrow"
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
308 :help "Goto previous match")
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
309 (tool-bar-local-item
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
310 "right-arrow" 'next-error-no-select 'next-error-no-select map
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
311 :rtl "left-arrow"
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
312 :help "Goto next match")
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
313 (tool-bar-local-item
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
314 "cancel" 'kill-compilation 'kill-compilation map
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
315 :enable '(let ((buffer (compilation-find-buffer)))
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
316 (get-buffer-process buffer))
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
317 :help "Stop grep")
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
318 (tool-bar-local-item
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
319 "refresh" 'recompile 'recompile map
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
320 :help "Restart grep")
90b078ed2dc4 (grep-mode-tool-bar-map): Check if tool-bar-map has been initialized
Chong Yidong <cyd@stupidchicken.com>
parents: 98629
diff changeset
321 (append map help))))
92204
ab425a596ec9 (grep-mode-tool-bar-map): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 88102
diff changeset
322
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
323 (defalias 'kill-grep 'kill-compilation)
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
324
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
325 ;;;; TODO --- refine this!!
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
326
94141
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
327 ;; (defcustom grep-use-compilation-buffer t
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
328 ;; "When non-nil, grep specific commands update `compilation-last-buffer'.
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
329 ;; This means that standard compile commands like \\[next-error] and \\[compile-goto-error]
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
330 ;; can be used to navigate between grep matches (the default).
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
331 ;; Otherwise, the grep specific commands like \\[grep-next-match] must
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
332 ;; be used to navigate between grep matches."
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
333 ;; :type 'boolean
e93898d6903e Fix up comment convention.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93335
diff changeset
334 ;; :group 'grep)
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
335
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
336 ;; override compilation-last-buffer
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
337 (defvar grep-last-buffer nil
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
338 "The most recent grep buffer.
71854
a4944423be59 (grep-last-buffer): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 71422
diff changeset
339 A grep buffer becomes most recent when you select Grep mode in it.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
340 Notice that using \\[next-error] or \\[compile-goto-error] modifies
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
341 `complation-last-buffer' rather than `grep-last-buffer'.")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
342
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
343 ;;;###autoload
105950
e411fa8e0abf * progmodes/grep.el (grep-regexp-alist):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105939
diff changeset
344 (defconst grep-regexp-alist
64864
c474b6f22449 (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
Juri Linkov <juri@jurta.org>
parents: 64740
diff changeset
345 '(("^\\(.+?\\)\\(:[ \t]*\\)\\([0-9]+\\)\\2"
64725
0344b299e9e6 (grep-regexp-alist): Replace complex regexp
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
346 1 3)
0344b299e9e6 (grep-regexp-alist): Replace complex regexp
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
347 ;; Rule to match column numbers is commented out since no known grep
0344b299e9e6 (grep-regexp-alist): Replace complex regexp
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
348 ;; produces them
64864
c474b6f22449 (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
Juri Linkov <juri@jurta.org>
parents: 64740
diff changeset
349 ;; ("^\\(.+?\\)\\(:[ \t]*\\)\\([0-9]+\\)\\2\\(?:\\([0-9]+\\)\\(?:-\\([0-9]+\\)\\)?\\2\\)?"
64725
0344b299e9e6 (grep-regexp-alist): Replace complex regexp
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
350 ;; 1 3 (4 . 5))
111579
4433803ef920 * lisp/progmodes/grep.el (grep-regexp-alist): Tighten the regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108743
diff changeset
351 ;; Note that we want to use as tight a regexp as we can to try and
4433803ef920 * lisp/progmodes/grep.el (grep-regexp-alist): Tighten the regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108743
diff changeset
352 ;; handle weird file names (with colons in them) as well as possible.
4433803ef920 * lisp/progmodes/grep.el (grep-regexp-alist): Tighten the regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108743
diff changeset
353 ;; E.g. we use [1-9][0-9]* rather than [0-9]+ so as to accept ":034:" in
4433803ef920 * lisp/progmodes/grep.el (grep-regexp-alist): Tighten the regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108743
diff changeset
354 ;; file names.
4433803ef920 * lisp/progmodes/grep.el (grep-regexp-alist): Tighten the regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108743
diff changeset
355 ("^\\(\\(.+?\\):\\([1-9][0-9]*\\):\\).*?\
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
356 \\(\033\\[01;31m\\(?:\033\\[K\\)?\\)\\(.*?\\)\\(\033\\[[0-9]*m\\)"
63576
7c3d537469b0 (grep-regexp-alist): Use backreference at the
Juri Linkov <juri@jurta.org>
parents: 62160
diff changeset
357 2 3
57769
e663f6b659a6 (grep-regexp-alist): Move match highlighting
Juri Linkov <juri@jurta.org>
parents: 57043
diff changeset
358 ;; Calculate column positions (beg . end) of first grep match on a line
56881
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
359 ((lambda ()
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
360 (setq compilation-error-screen-columns nil)
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
361 (- (match-beginning 4) (match-end 1)))
56881
4be25baf31b5 (grep-highlight-matches): New defcustom.
Juri Linkov <juri@jurta.org>
parents: 56828
diff changeset
362 .
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
363 (lambda () (- (match-end 5) (match-end 1)
111579
4433803ef920 * lisp/progmodes/grep.el (grep-regexp-alist): Tighten the regexp.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 108743
diff changeset
364 (- (match-end 4) (match-beginning 4)))))
63576
7c3d537469b0 (grep-regexp-alist): Use backreference at the
Juri Linkov <juri@jurta.org>
parents: 62160
diff changeset
365 nil 1)
64740
eeed7a7c1afa (grep-regexp-alist): Set 5th arg `TYPE' to
Juri Linkov <juri@jurta.org>
parents: 64728
diff changeset
366 ("^Binary file \\(.+\\) matches$" 1 nil nil 0 1))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
367 "Regexp used to match grep hits. See `compilation-error-regexp-alist'.")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
368
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
369 (defvar grep-error "grep hit"
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
370 "Message to print when no matches are found.")
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
371
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
372 ;; Reverse the colors because grep hits are not errors (though we jump there
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
373 ;; with `next-error'), and unreadable files can't be gone to.
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
374 (defvar grep-hit-face compilation-info-face
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
375 "Face name to use for grep hits.")
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
376
64864
c474b6f22449 (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
Juri Linkov <juri@jurta.org>
parents: 64740
diff changeset
377 (defvar grep-error-face 'compilation-error
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
378 "Face name to use for grep error messages.")
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
379
58988
067d5dcfe531 (grep-match-face): New defvar.
Juri Linkov <juri@jurta.org>
parents: 58493
diff changeset
380 (defvar grep-match-face 'match
067d5dcfe531 (grep-match-face): New defvar.
Juri Linkov <juri@jurta.org>
parents: 58493
diff changeset
381 "Face name to use for grep matches.")
067d5dcfe531 (grep-match-face): New defvar.
Juri Linkov <juri@jurta.org>
parents: 58493
diff changeset
382
64725
0344b299e9e6 (grep-regexp-alist): Replace complex regexp
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
383 (defvar grep-context-face 'shadow
0344b299e9e6 (grep-regexp-alist): Replace complex regexp
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
384 "Face name to use for grep context lines.")
0344b299e9e6 (grep-regexp-alist): Replace complex regexp
Juri Linkov <juri@jurta.org>
parents: 64699
diff changeset
385
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
386 (defvar grep-mode-font-lock-keywords
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
387 '(;; Command output lines.
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
388 ("^\\([A-Za-z_0-9/\.+-]+\\)[ \t]*:" 1 font-lock-function-name-face)
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
389 (": \\(.+\\): \\(?:Permission denied\\|No such \\(?:file or directory\\|device or address\\)\\)$"
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
390 1 grep-error-face)
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
391 ;; remove match from grep-regexp-alist before fontifying
71422
2611669abf9e (grep-mode-font-lock-keywords): Correct regexps
Kim F. Storm <storm@cua.dk>
parents: 70712
diff changeset
392 ("^Grep[/a-zA-z]* started.*"
65126
559a37c2f306 (grep, grep-mode): Make buffer-local variables
Juri Linkov <juri@jurta.org>
parents: 65056
diff changeset
393 (0 '(face nil message nil help-echo nil mouse-face nil) t))
71422
2611669abf9e (grep-mode-font-lock-keywords): Correct regexps
Kim F. Storm <storm@cua.dk>
parents: 70712
diff changeset
394 ("^Grep[/a-zA-z]* finished \\(?:(\\(matches found\\))\\|with \\(no matches found\\)\\).*"
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
395 (0 '(face nil message nil help-echo nil mouse-face nil) t)
64864
c474b6f22449 (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
Juri Linkov <juri@jurta.org>
parents: 64740
diff changeset
396 (1 compilation-info-face nil t)
c474b6f22449 (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
Juri Linkov <juri@jurta.org>
parents: 64740
diff changeset
397 (2 compilation-warning-face nil t))
71422
2611669abf9e (grep-mode-font-lock-keywords): Correct regexps
Kim F. Storm <storm@cua.dk>
parents: 70712
diff changeset
398 ("^Grep[/a-zA-z]* \\(exited abnormally\\|interrupt\\|killed\\|terminated\\)\\(?:.*with code \\([0-9]+\\)\\)?.*"
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
399 (0 '(face nil message nil help-echo nil mouse-face nil) t)
64864
c474b6f22449 (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
Juri Linkov <juri@jurta.org>
parents: 64740
diff changeset
400 (1 grep-error-face)
64944
c845f6151d83 (grep-mode-map): Add ellipsis to "Another grep".
Juri Linkov <juri@jurta.org>
parents: 64864
diff changeset
401 (2 grep-error-face nil t))
64864
c474b6f22449 (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
Juri Linkov <juri@jurta.org>
parents: 64740
diff changeset
402 ("^.+?-[0-9]+-.*\n" (0 grep-context-face))
57769
e663f6b659a6 (grep-regexp-alist): Move match highlighting
Juri Linkov <juri@jurta.org>
parents: 57043
diff changeset
403 ;; Highlight grep matches and delete markers
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
404 ("\\(\033\\[01;31m\\)\\(.*?\\)\\(\033\\[[0-9]*m\\)"
61902
e8076329ceee (grep-mode-font-lock-keywords): Use the font-lock-face property to
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
405 ;; Refontification does not work after the markers have been
e8076329ceee (grep-mode-font-lock-keywords): Use the font-lock-face property to
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
406 ;; deleted. So we use the font-lock-face property here as Font
e8076329ceee (grep-mode-font-lock-keywords): Use the font-lock-face property to
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
407 ;; Lock does not clear that.
e8076329ceee (grep-mode-font-lock-keywords): Use the font-lock-face property to
Lute Kamstra <lute@gnu.org>
parents: 59996
diff changeset
408 (2 (list 'face nil 'font-lock-face grep-match-face))
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
409 ((lambda (bound))
57769
e663f6b659a6 (grep-regexp-alist): Move match highlighting
Juri Linkov <juri@jurta.org>
parents: 57043
diff changeset
410 (progn
e663f6b659a6 (grep-regexp-alist): Move match highlighting
Juri Linkov <juri@jurta.org>
parents: 57043
diff changeset
411 ;; Delete markers with `replace-match' because it updates
e663f6b659a6 (grep-regexp-alist): Move match highlighting
Juri Linkov <juri@jurta.org>
parents: 57043
diff changeset
412 ;; the match-data, whereas `delete-region' would render it obsolete.
e663f6b659a6 (grep-regexp-alist): Move match highlighting
Juri Linkov <juri@jurta.org>
parents: 57043
diff changeset
413 (replace-match "" t t nil 3)
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
414 (replace-match "" t t nil 1))))
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
415 ("\\(\033\\[[0-9;]*[mK]\\)"
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
416 ;; Delete all remaining escape sequences
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
417 ((lambda (bound))
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
418 (replace-match "" t t nil 1))))
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
419 "Additional things to highlight in grep output.
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
420 This gets tacked on the end of the generated expressions.")
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
421
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
422 ;;;###autoload
105939
a0f778f4a995 * term/x-win.el (x-gtk-stock-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105170
diff changeset
423 (defvar grep-program (purecopy "grep")
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
424 "The default grep program for `grep-command' and `grep-find-command'.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
425 This variable's value takes effect when `grep-compute-defaults' is called.")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
426
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
427 ;;;###autoload
105939
a0f778f4a995 * term/x-win.el (x-gtk-stock-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105170
diff changeset
428 (defvar find-program (purecopy "find")
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
429 "The default find program for `grep-find-command'.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
430 This variable's value takes effect when `grep-compute-defaults' is called.")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
431
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
432 ;;;###autoload
105939
a0f778f4a995 * term/x-win.el (x-gtk-stock-map):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105170
diff changeset
433 (defvar xargs-program (purecopy "xargs")
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
434 "The default xargs program for `grep-find-command'.
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
435 See `grep-find-use-xargs'.
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
436 This variable's value takes effect when `grep-compute-defaults' is called.")
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
437
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
438 ;;;###autoload
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
439 (defvar grep-find-use-xargs nil
77033
25b4502cd0b4 (grep-find-use-xargs): Rewrite docstring.
Chong Yidong <cyd@stupidchicken.com>
parents: 76966
diff changeset
440 "Non-nil means that `grep-find' uses the `xargs' utility by default.
25b4502cd0b4 (grep-find-use-xargs): Rewrite docstring.
Chong Yidong <cyd@stupidchicken.com>
parents: 76966
diff changeset
441 If `exec', use `find -exec'.
25b4502cd0b4 (grep-find-use-xargs): Rewrite docstring.
Chong Yidong <cyd@stupidchicken.com>
parents: 76966
diff changeset
442 If `gnu', use `find -print0' and `xargs -0'.
25b4502cd0b4 (grep-find-use-xargs): Rewrite docstring.
Chong Yidong <cyd@stupidchicken.com>
parents: 76966
diff changeset
443 Any other non-nil value means to use `find -print' and `xargs'.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
444
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
445 This variable's value takes effect when `grep-compute-defaults' is called.")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
446
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
447 ;; History of grep commands.
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
448 ;;;###autoload
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
449 (defvar grep-history nil)
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
450 ;;;###autoload
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
451 (defvar grep-find-history nil)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
452
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
453 ;; History of lgrep and rgrep regexp and files args.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
454 (defvar grep-regexp-history nil)
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
455 (defvar grep-files-history nil)
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
456
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
457 ;;;###autoload
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
458 (defun grep-process-setup ()
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
459 "Setup compilation variables and buffer for `grep'.
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
460 Set up `compilation-exit-message-function' and run `grep-setup-hook'."
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
461 (when (eq grep-highlight-matches 'auto-detect)
56960
84482ed458f2 (grep-highlight-matches): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 56948
diff changeset
462 (grep-compute-defaults))
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
463 (unless (or (eq grep-highlight-matches 'auto-detect)
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
464 (null grep-highlight-matches))
86354
29047758dd89 (grep-process-setup): Set envvar "TERM" to "emacs-grep".
Juri Linkov <juri@jurta.org>
parents: 86249
diff changeset
465 ;; `setenv' modifies `process-environment' let-bound in `compilation-start'
29047758dd89 (grep-process-setup): Set envvar "TERM" to "emacs-grep".
Juri Linkov <juri@jurta.org>
parents: 86249
diff changeset
466 ;; Any TERM except "dumb" allows GNU grep to use `--color=auto'
29047758dd89 (grep-process-setup): Set envvar "TERM" to "emacs-grep".
Juri Linkov <juri@jurta.org>
parents: 86249
diff changeset
467 (setenv "TERM" "emacs-grep")
102336
83645050eee3 (grep-process-setup) [windows-nt msdos]: Use "--color=always".
Eli Zaretskii <eliz@gnu.org>
parents: 101450
diff changeset
468 (setenv "GREP_OPTIONS"
83645050eee3 (grep-process-setup) [windows-nt msdos]: Use "--color=always".
Eli Zaretskii <eliz@gnu.org>
parents: 101450
diff changeset
469 (concat (getenv "GREP_OPTIONS")
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
470 " --color=" (if (eq grep-highlight-matches 'always)
102336
83645050eee3 (grep-process-setup) [windows-nt msdos]: Use "--color=always".
Eli Zaretskii <eliz@gnu.org>
parents: 101450
diff changeset
471 "always" "auto")))
86354
29047758dd89 (grep-process-setup): Set envvar "TERM" to "emacs-grep".
Juri Linkov <juri@jurta.org>
parents: 86249
diff changeset
472 ;; GREP_COLOR is used in GNU grep 2.5.1, but deprecated in later versions
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
473 (setenv "GREP_COLOR" "01;31")
86354
29047758dd89 (grep-process-setup): Set envvar "TERM" to "emacs-grep".
Juri Linkov <juri@jurta.org>
parents: 86249
diff changeset
474 ;; GREP_COLORS is used in GNU grep 2.5.2 and later versions
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
475 (setenv "GREP_COLORS" "mt=01;31:fn=:ln=:bn=:se=:ml=:cx=:ne"))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
476 (set (make-local-variable 'compilation-exit-message-function)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
477 (lambda (status code msg)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
478 (if (eq status 'exit)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
479 (cond ((zerop code)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
480 '("finished (matches found)\n" . "matched"))
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
481 ((= code 1)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
482 '("finished with no matches found\n" . "no match"))
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
483 (t
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
484 (cons msg code)))
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
485 (cons msg code))))
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
486 (run-hooks 'grep-setup-hook))
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
487
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
488 (defun grep-probe (command args &optional func result)
104601
3f203311bcc1 * progmodes/grep.el (grep-probe): Let-bind `process-file-side-effects' with nil.
Michael Albinus <michael.albinus@gmx.de>
parents: 104525
diff changeset
489 (let (process-file-side-effects)
3f203311bcc1 * progmodes/grep.el (grep-probe): Let-bind `process-file-side-effects' with nil.
Michael Albinus <michael.albinus@gmx.de>
parents: 104525
diff changeset
490 (equal (condition-case nil
3f203311bcc1 * progmodes/grep.el (grep-probe): Let-bind `process-file-side-effects' with nil.
Michael Albinus <michael.albinus@gmx.de>
parents: 104525
diff changeset
491 (apply (or func 'process-file) command args)
3f203311bcc1 * progmodes/grep.el (grep-probe): Let-bind `process-file-side-effects' with nil.
Michael Albinus <michael.albinus@gmx.de>
parents: 104525
diff changeset
492 (error nil))
3f203311bcc1 * progmodes/grep.el (grep-probe): Let-bind `process-file-side-effects' with nil.
Michael Albinus <michael.albinus@gmx.de>
parents: 104525
diff changeset
493 (or result 0))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
494
56333
eb4bc9a65835 (grep-compute-defaults, grep-command)
Eli Zaretskii <eliz@gnu.org>
parents: 56226
diff changeset
495 ;;;###autoload
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
496 (defun grep-compute-defaults ()
82031
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
497 ;; Keep default values.
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
498 (unless grep-host-defaults-alist
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
499 (add-to-list
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
500 'grep-host-defaults-alist
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
501 (cons nil
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
502 `((grep-command ,grep-command)
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
503 (grep-template ,grep-template)
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
504 (grep-use-null-device ,grep-use-null-device)
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
505 (grep-find-command ,grep-find-command)
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
506 (grep-find-template ,grep-find-template)
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
507 (grep-find-use-xargs ,grep-find-use-xargs)
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
508 (grep-highlight-matches ,grep-highlight-matches)))))
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
509 (let* ((host-id
88102
0fa30755c209 (grep-compute-defaults):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87560
diff changeset
510 (intern (or (file-remote-p default-directory) "localhost")))
82031
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
511 (host-defaults (assq host-id grep-host-defaults-alist))
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
512 (defaults (assq nil grep-host-defaults-alist)))
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
513 ;; There are different defaults on different hosts. They must be
82031
73ba7647c960 * progmodes/grep.el (grep-compute-defaults): Keep default values.
Michael Albinus <michael.albinus@gmx.de>
parents: 81972
diff changeset
514 ;; computed for every host once.
103276
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
515 (dolist (setting '(grep-command grep-template
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
516 grep-use-null-device grep-find-command
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
517 grep-find-template grep-find-use-xargs
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
518 grep-highlight-matches))
a53bb8ffd3ae * progmodes/grep.el (grep-compute-defaults): Simplify how settings
Chong Yidong <cyd@stupidchicken.com>
parents: 102336
diff changeset
519 (set setting
107944
f3e910318160 * progmodes/grep.el (grep-compute-defaults): Fix handling of host
Chong Yidong <cyd@stupidchicken.com>
parents: 107067
diff changeset
520 (cadr (or (assq setting host-defaults)
f3e910318160 * progmodes/grep.el (grep-compute-defaults): Fix handling of host
Chong Yidong <cyd@stupidchicken.com>
parents: 107067
diff changeset
521 (assq setting defaults)))))
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
522
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
523 (unless (or (not grep-use-null-device) (eq grep-use-null-device t))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
524 (setq grep-use-null-device
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
525 (with-temp-buffer
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
526 (let ((hello-file (expand-file-name "HELLO" data-directory)))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
527 (not
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
528 (and (if grep-command
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
529 ;; `grep-command' is already set, so
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
530 ;; use that for testing.
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
531 (grep-probe grep-command
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
532 `(nil t nil "^English" ,hello-file)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
533 #'call-process-shell-command)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
534 ;; otherwise use `grep-program'
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
535 (grep-probe grep-program
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
536 `(nil t nil "-nH" "^English" ,hello-file)))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
537 (progn
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
538 (goto-char (point-min))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
539 (looking-at
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
540 (concat (regexp-quote hello-file)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
541 ":[0-9]+:English")))))))))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
542 (unless (and grep-command grep-find-command
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
543 grep-template grep-find-template)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
544 (let ((grep-options
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
545 (concat (if grep-use-null-device "-n" "-nH")
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
546 (if (grep-probe grep-program
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
547 `(nil nil nil "-e" "foo" ,null-device)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
548 nil 1)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
549 " -e"))))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
550 (unless grep-command
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
551 (setq grep-command
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
552 (format "%s %s " grep-program grep-options)))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
553 (unless grep-template
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
554 (setq grep-template
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
555 (format "%s <X> <C> %s <R> <F>" grep-program grep-options)))
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
556 (unless grep-find-use-xargs
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
557 (setq grep-find-use-xargs
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
558 (cond
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
559 ((and
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
560 (grep-probe find-program `(nil nil nil ,null-device "-print0"))
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
561 (grep-probe xargs-program `(nil nil nil "-0" "-e" "echo")))
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
562 'gnu)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
563 (t
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
564 'exec))))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
565 (unless grep-find-command
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
566 (setq grep-find-command
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
567 (cond ((eq grep-find-use-xargs 'gnu)
112238
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
568 ;; Windows shells need the program file name
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
569 ;; after the pipe symbol be quoted if they use
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
570 ;; forward slashes as directory separators.
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
571 (format "%s . -type f -print0 | \"%s\" -0 -e %s"
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
572 find-program xargs-program grep-command))
72500
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
573 ((eq grep-find-use-xargs 'exec)
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
574 (let ((cmd0 (format "%s . -type f -exec %s"
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
575 find-program grep-command)))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
576 (cons
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
577 (format "%s {} %s %s"
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
578 cmd0 null-device
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
579 (shell-quote-argument ";"))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
580 (1+ (length cmd0)))))
72500
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
581 (t
112238
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
582 (format "%s . -type f -print | \"%s\" %s"
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
583 find-program xargs-program grep-command)))))
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
584 (unless grep-find-template
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
585 (setq grep-find-template
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
586 (let ((gcmd (format "%s <C> %s <R>"
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
587 grep-program grep-options)))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
588 (cond ((eq grep-find-use-xargs 'gnu)
112238
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
589 (format "%s . <X> -type f <F> -print0 | \"%s\" -0 -e %s"
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
590 find-program xargs-program gcmd))
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
591 ((eq grep-find-use-xargs 'exec)
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
592 (format "%s . <X> -type f <F> -exec %s {} %s %s"
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
593 find-program gcmd null-device
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
594 (shell-quote-argument ";")))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
595 (t
112238
4f72b1e43644 Merge from emacs-23 branch.
Glenn Morris <rgm@gnu.org>
parents: 112228
diff changeset
596 (format "%s . <X> -type f <F> -print | \"%s\" %s"
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
597 find-program xargs-program gcmd))))))))
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
598 (when (eq grep-highlight-matches 'auto-detect)
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
599 (setq grep-highlight-matches
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
600 (with-temp-buffer
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
601 (and (grep-probe grep-program '(nil t nil "--help"))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
602 (progn
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
603 (goto-char (point-min))
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
604 (search-forward "--color" nil t))
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
605 ;; Windows and DOS pipes fail `isatty' detection in Grep.
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
606 (if (memq system-type '(windows-nt ms-dos))
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
607 'always 'auto)))))
81936
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
608
64c6efb87c40 * progmodes/grep.el (grep-probe): Use `process-file'.
Michael Albinus <michael.albinus@gmx.de>
parents: 77033
diff changeset
609 ;; Save defaults for this host.
81972
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
610 (setq grep-host-defaults-alist
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
611 (delete (assq host-id grep-host-defaults-alist)
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
612 grep-host-defaults-alist))
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
613 (add-to-list
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
614 'grep-host-defaults-alist
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
615 (cons host-id
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
616 `((grep-command ,grep-command)
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
617 (grep-template ,grep-template)
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
618 (grep-use-null-device ,grep-use-null-device)
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
619 (grep-find-command ,grep-find-command)
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
620 (grep-find-template ,grep-find-template)
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
621 (grep-find-use-xargs ,grep-find-use-xargs)
7447c9b7efeb * progmodes/grep.el (grep-host-defaults-alist): New defvar.
Michael Albinus <michael.albinus@gmx.de>
parents: 81936
diff changeset
622 (grep-highlight-matches ,grep-highlight-matches))))))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
623
72163
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
624 (defun grep-tag-default ()
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
625 (or (and transient-mark-mode mark-active
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
626 (/= (point) (mark))
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
627 (buffer-substring-no-properties (point) (mark)))
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
628 (funcall (or find-tag-default-function
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
629 (get major-mode 'find-tag-default-function)
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
630 'find-tag-default))
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
631 ""))
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
632
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
633 (defun grep-default-command ()
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
634 "Compute the default grep command for \\[universal-argument] \\[grep] to offer."
72163
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
635 (let ((tag-default (shell-quote-argument (grep-tag-default)))
72173
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
636 ;; This a regexp to match single shell arguments.
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
637 ;; Could someone please add comments explaining it?
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
638 (sh-arg-re "\\(\\(?:\"\\(?:[^\"]\\|\\\\\"\\)+\"\\|'[^']+'\\|[^\"' \t\n]\\)+\\)")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
639 (grep-default (or (car grep-history) grep-command)))
72173
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
640 ;; In the default command, find the arg that specifies the pattern.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
641 (when (or (string-match
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
642 (concat "[^ ]+\\s +\\(?:-[^ ]+\\s +\\)*"
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
643 sh-arg-re "\\(\\s +\\(\\S +\\)\\)?")
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
644 grep-default)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
645 ;; If the string is not yet complete.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
646 (string-match "\\(\\)\\'" grep-default))
72173
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
647 ;; Maybe we will replace the pattern with the default tag.
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
648 ;; But first, maybe replace the file name pattern.
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
649 (condition-case nil
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
650 (unless (or (not (stringp buffer-file-name))
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
651 (when (match-beginning 2)
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
652 (save-match-data
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
653 (string-match
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
654 (wildcard-to-regexp
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
655 (file-name-nondirectory
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
656 (match-string 3 grep-default)))
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
657 (file-name-nondirectory buffer-file-name)))))
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
658 (setq grep-default (concat (substring grep-default
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
659 0 (match-beginning 2))
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
660 " *."
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
661 (file-name-extension buffer-file-name))))
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
662 ;; In case wildcard-to-regexp gets an error
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
663 ;; from invalid data.
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
664 (error nil))
691a901b4418 (grep-default-command): Catch errors from wildcard-to-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 72165
diff changeset
665 ;; Now replace the pattern with the default tag.
57908
a4ed247d476f (grep-default-command): Take empty string
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 57769
diff changeset
666 (replace-match tag-default t t grep-default 1))))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
667
54372
a4d3c17f991f (kill-grep): Move here from compile.el
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54012
diff changeset
668
64509
9a66028f1658 (grep-regexp-alist)
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
669 ;;;###autoload
55018
4f12dee543dc Undo previous change
Jan Djärv <jan.h.d@swipnet.se>
parents: 55017
diff changeset
670 (define-compilation-mode grep-mode "Grep"
4f12dee543dc Undo previous change
Jan Djärv <jan.h.d@swipnet.se>
parents: 55017
diff changeset
671 "Sets `grep-last-buffer' and `compilation-window-height'."
4f12dee543dc Undo previous change
Jan Djärv <jan.h.d@swipnet.se>
parents: 55017
diff changeset
672 (setq grep-last-buffer (current-buffer))
92204
ab425a596ec9 (grep-mode-tool-bar-map): New variable.
Jan Djärv <jan.h.d@swipnet.se>
parents: 88102
diff changeset
673 (set (make-local-variable 'tool-bar-map) grep-mode-tool-bar-map)
55018
4f12dee543dc Undo previous change
Jan Djärv <jan.h.d@swipnet.se>
parents: 55017
diff changeset
674 (set (make-local-variable 'compilation-error-face)
4f12dee543dc Undo previous change
Jan Djärv <jan.h.d@swipnet.se>
parents: 55017
diff changeset
675 grep-hit-face)
4f12dee543dc Undo previous change
Jan Djärv <jan.h.d@swipnet.se>
parents: 55017
diff changeset
676 (set (make-local-variable 'compilation-error-regexp-alist)
63576
7c3d537469b0 (grep-regexp-alist): Use backreference at the
Juri Linkov <juri@jurta.org>
parents: 62160
diff changeset
677 grep-regexp-alist)
65126
559a37c2f306 (grep, grep-mode): Make buffer-local variables
Juri Linkov <juri@jurta.org>
parents: 65056
diff changeset
678 (set (make-local-variable 'compilation-process-setup-function)
559a37c2f306 (grep, grep-mode): Make buffer-local variables
Juri Linkov <juri@jurta.org>
parents: 65056
diff changeset
679 'grep-process-setup)
69499
caf8f09897bc * font-lock.el (font-lock-lines-before): Delete variable, subsumed by
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68773
diff changeset
680 (set (make-local-variable 'compilation-disable-input) t))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
681
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
682
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
683 ;;;###autoload
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
684 (defun grep (command-args)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
685 "Run grep, with user-specified args, and collect output in a buffer.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
686 While grep runs asynchronously, you can use \\[next-error] (M-x next-error),
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
687 or \\<grep-mode-map>\\[compile-goto-error] in the grep \
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
688 output buffer, to go to the lines where grep
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
689 found matches.
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
690
75803
81c369551691 (grep): Mention lgrep and rgrep in the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 75347
diff changeset
691 For doing a recursive `grep', see the `rgrep' command. For running
75877
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
692 `grep' in a specific directory, see `lgrep'.
75803
81c369551691 (grep): Mention lgrep and rgrep in the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 75347
diff changeset
693
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
694 This command uses a special history list for its COMMAND-ARGS, so you
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
695 can easily repeat a grep command.
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
696
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
697 A prefix argument says to default the argument based upon the current
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
698 tag the cursor is over, substituting it into the last grep command
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
699 in the grep command history (or into `grep-command' if that history
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
700 list is empty)."
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
701 (interactive
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
702 (progn
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
703 (grep-compute-defaults)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
704 (let ((default (grep-default-command)))
93114
57fa8ebfd227 * progmodes/compile.el (compile):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92493
diff changeset
705 (list (read-shell-command "Run grep (like this): "
57fa8ebfd227 * progmodes/compile.el (compile):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92493
diff changeset
706 (if current-prefix-arg default grep-command)
57fa8ebfd227 * progmodes/compile.el (compile):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92493
diff changeset
707 'grep-history
57fa8ebfd227 * progmodes/compile.el (compile):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92493
diff changeset
708 (if current-prefix-arg nil default))))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
709
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
710 ;; Setting process-setup-function makes exit-message-function work
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
711 ;; even when async processes aren't supported.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
712 (compilation-start (if (and grep-use-null-device null-device)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
713 (concat command-args " " null-device)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
714 command-args)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
715 'grep-mode))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
716
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
717
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
718 ;;;###autoload
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
719 (defun grep-find (command-args)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
720 "Run grep via find, with user-specified args COMMAND-ARGS.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
721 Collect output in a buffer.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
722 While find runs asynchronously, you can use the \\[next-error] command
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
723 to find the text that grep hits refer to.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
724
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
725 This command uses a special history list for its arguments, so you can
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
726 easily repeat a find command."
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
727 (interactive
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
728 (progn
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
729 (grep-compute-defaults)
53750
4deb14fde58c (grep-compute-defaults): Use executable-command-find-posix-p.
Richard M. Stallman <rms@gnu.org>
parents: 53486
diff changeset
730 (if grep-find-command
93114
57fa8ebfd227 * progmodes/compile.el (compile):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92493
diff changeset
731 (list (read-shell-command "Run find (like this): "
57fa8ebfd227 * progmodes/compile.el (compile):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92493
diff changeset
732 grep-find-command 'grep-find-history))
53750
4deb14fde58c (grep-compute-defaults): Use executable-command-find-posix-p.
Richard M. Stallman <rms@gnu.org>
parents: 53486
diff changeset
733 ;; No default was set
4deb14fde58c (grep-compute-defaults): Use executable-command-find-posix-p.
Richard M. Stallman <rms@gnu.org>
parents: 53486
diff changeset
734 (read-string
4deb14fde58c (grep-compute-defaults): Use executable-command-find-posix-p.
Richard M. Stallman <rms@gnu.org>
parents: 53486
diff changeset
735 "compile.el: No `grep-find-command' command available. Press RET.")
4deb14fde58c (grep-compute-defaults): Use executable-command-find-posix-p.
Richard M. Stallman <rms@gnu.org>
parents: 53486
diff changeset
736 (list nil))))
70712
070ab453b31f (grep-find): Don't check grep-find-command
Kim F. Storm <storm@cua.dk>
parents: 70534
diff changeset
737 (when command-args
53750
4deb14fde58c (grep-compute-defaults): Use executable-command-find-posix-p.
Richard M. Stallman <rms@gnu.org>
parents: 53486
diff changeset
738 (let ((null-device nil)) ; see grep
4deb14fde58c (grep-compute-defaults): Use executable-command-find-posix-p.
Richard M. Stallman <rms@gnu.org>
parents: 53486
diff changeset
739 (grep command-args))))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
740
59688
3761d1e2619d * NEWS: Mention alias `find-grep' for `grep-find'.
David Kastrup <dak@gnu.org>
parents: 59605
diff changeset
741 ;;;###autoload
3761d1e2619d * NEWS: Mention alias `find-grep' for `grep-find'.
David Kastrup <dak@gnu.org>
parents: 59605
diff changeset
742 (defalias 'find-grep 'grep-find)
3761d1e2619d * NEWS: Mention alias `find-grep' for `grep-find'.
David Kastrup <dak@gnu.org>
parents: 59605
diff changeset
743
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
744
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
745 ;; User-friendly interactive API.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
746
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
747 (defconst grep-expand-keywords
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
748 '(("<C>" . (and cf (isearch-no-upper-case-p regexp t) "-i"))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
749 ("<D>" . dir)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
750 ("<F>" . files)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
751 ("<N>" . null-device)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
752 ("<X>" . excl)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
753 ("<R>" . (shell-quote-argument (or regexp ""))))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
754 "List of substitutions performed by `grep-expand-template'.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
755 If car of an element matches, the cdr is evalled in to get the
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
756 substitution string. Note dynamic scoping of variables.")
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
757
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
758 (defun grep-expand-template (template &optional regexp files dir excl)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
759 "Patch grep COMMAND string replacing <C>, <D>, <F>, <R>, and <X>."
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
760 (let ((command template)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
761 (cf case-fold-search)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
762 (case-fold-search nil))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
763 (dolist (kw grep-expand-keywords command)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
764 (if (string-match (car kw) command)
70315
cf0d76a2f0c7 (grep-expand-template): Use save-match-data.
Kim F. Storm <storm@cua.dk>
parents: 70259
diff changeset
765 (setq command
cf0d76a2f0c7 (grep-expand-template): Use save-match-data.
Kim F. Storm <storm@cua.dk>
parents: 70259
diff changeset
766 (replace-match
cf0d76a2f0c7 (grep-expand-template): Use save-match-data.
Kim F. Storm <storm@cua.dk>
parents: 70259
diff changeset
767 (or (if (symbolp (cdr kw))
70340
3146cc3b9e56 (grep-expand-template): Use symbol-value instead of eval on symbols.
Kim F. Storm <storm@cua.dk>
parents: 70315
diff changeset
768 (symbol-value (cdr kw))
70315
cf0d76a2f0c7 (grep-expand-template): Use save-match-data.
Kim F. Storm <storm@cua.dk>
parents: 70259
diff changeset
769 (save-match-data (eval (cdr kw))))
cf0d76a2f0c7 (grep-expand-template): Use save-match-data.
Kim F. Storm <storm@cua.dk>
parents: 70259
diff changeset
770 "")
cf0d76a2f0c7 (grep-expand-template): Use save-match-data.
Kim F. Storm <storm@cua.dk>
parents: 70259
diff changeset
771 t t command))))))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
772
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
773 (defun grep-read-regexp ()
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
774 "Read regexp arg for interactive grep."
72163
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
775 (let ((default (grep-tag-default)))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
776 (read-string
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
777 (concat "Search for"
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
778 (if (and default (> (length default) 0))
72163
bca9d3121eef (grep-tag-default): New function.
Kim F. Storm <storm@cua.dk>
parents: 72024
diff changeset
779 (format " (default \"%s\"): " default) ": "))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
780 nil 'grep-regexp-history default)))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
781
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
782 (defun grep-read-files (regexp)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
783 "Read files arg for interactive grep."
104745
60a123e396f8 (grep-read-files): Strip trailing <N> from buffer names
Juri Linkov <juri@jurta.org>
parents: 104601
diff changeset
784 (let* ((bn (or (buffer-file-name)
60a123e396f8 (grep-read-files): Strip trailing <N> from buffer names
Juri Linkov <juri@jurta.org>
parents: 104601
diff changeset
785 (replace-regexp-in-string "<[0-9]+>\\'" "" (buffer-name))))
70259
58edc69a1813 (grep-read-files): Use buffer-name if no buffer-file-name.
Kim F. Storm <storm@cua.dk>
parents: 70258
diff changeset
786 (fn (and bn
58edc69a1813 (grep-read-files): Use buffer-name if no buffer-file-name.
Kim F. Storm <storm@cua.dk>
parents: 70258
diff changeset
787 (stringp bn)
58edc69a1813 (grep-read-files): Use buffer-name if no buffer-file-name.
Kim F. Storm <storm@cua.dk>
parents: 70258
diff changeset
788 (file-name-nondirectory bn)))
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
789 (default-alias
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
790 (and fn
108743
4b1caf0bded6 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Juri Linkov <juri@jurta.org>
parents: 107944
diff changeset
791 (let ((aliases (remove (assoc "all" grep-files-aliases)
4b1caf0bded6 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Juri Linkov <juri@jurta.org>
parents: 107944
diff changeset
792 grep-files-aliases))
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
793 alias)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
794 (while aliases
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
795 (setq alias (car aliases)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
796 aliases (cdr aliases))
108743
4b1caf0bded6 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Juri Linkov <juri@jurta.org>
parents: 107944
diff changeset
797 (if (string-match (mapconcat
4b1caf0bded6 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Juri Linkov <juri@jurta.org>
parents: 107944
diff changeset
798 'wildcard-to-regexp
4b1caf0bded6 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Juri Linkov <juri@jurta.org>
parents: 107944
diff changeset
799 (split-string (cdr alias) nil t)
4b1caf0bded6 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Juri Linkov <juri@jurta.org>
parents: 107944
diff changeset
800 "\\|")
4b1caf0bded6 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
Juri Linkov <juri@jurta.org>
parents: 107944
diff changeset
801 fn)
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
802 (setq aliases nil)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
803 (setq alias nil)))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
804 (cdr alias))))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
805 (default-extension
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
806 (and fn
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
807 (let ((ext (file-name-extension fn)))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
808 (and ext (concat "*." ext)))))
70259
58edc69a1813 (grep-read-files): Use buffer-name if no buffer-file-name.
Kim F. Storm <storm@cua.dk>
parents: 70258
diff changeset
809 (default
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
810 (or default-alias
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
811 default-extension
72165
301cc56a3482 (grep-read-files): Use car of grep-files-history or grep-files-aliases
Kim F. Storm <storm@cua.dk>
parents: 72163
diff changeset
812 (car grep-files-history)
301cc56a3482 (grep-read-files): Use car of grep-files-history or grep-files-aliases
Kim F. Storm <storm@cua.dk>
parents: 72163
diff changeset
813 (car (car grep-files-aliases))))
106479
67d8bc783433 (grep-read-files): Use `completing-read'
Juri Linkov <juri@jurta.org>
parents: 106243
diff changeset
814 (files (completing-read
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
815 (concat "Search for \"" regexp
70259
58edc69a1813 (grep-read-files): Use buffer-name if no buffer-file-name.
Kim F. Storm <storm@cua.dk>
parents: 70258
diff changeset
816 "\" in files"
58edc69a1813 (grep-read-files): Use buffer-name if no buffer-file-name.
Kim F. Storm <storm@cua.dk>
parents: 70258
diff changeset
817 (if default (concat " (default " default ")"))
58edc69a1813 (grep-read-files): Use buffer-name if no buffer-file-name.
Kim F. Storm <storm@cua.dk>
parents: 70258
diff changeset
818 ": ")
106479
67d8bc783433 (grep-read-files): Use `completing-read'
Juri Linkov <juri@jurta.org>
parents: 106243
diff changeset
819 'read-file-name-internal
67d8bc783433 (grep-read-files): Use `completing-read'
Juri Linkov <juri@jurta.org>
parents: 106243
diff changeset
820 nil nil nil 'grep-files-history
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
821 (delete-dups
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
822 (delq nil (append (list default default-alias default-extension)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
823 (mapcar 'car grep-files-aliases)))))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
824 (and files
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
825 (or (cdr (assoc files grep-files-aliases))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
826 files))))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
827
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
828 ;;;###autoload
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
829 (defun lgrep (regexp &optional files dir confirm)
75877
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
830 "Run grep, searching for REGEXP in FILES in directory DIR.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
831 The search is limited to file names matching shell pattern FILES.
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
832 FILES may use abbreviations defined in `grep-files-aliases', e.g.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
833 entering `ch' is equivalent to `*.[ch]'.
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
834
70526
0c5d2102f71a (lgrep, rgrep): Doc fixes.
Kim F. Storm <storm@cua.dk>
parents: 70421
diff changeset
835 With \\[universal-argument] prefix, you can edit the constructed shell command line
0c5d2102f71a (lgrep, rgrep): Doc fixes.
Kim F. Storm <storm@cua.dk>
parents: 70421
diff changeset
836 before it is executed.
0c5d2102f71a (lgrep, rgrep): Doc fixes.
Kim F. Storm <storm@cua.dk>
parents: 70421
diff changeset
837 With two \\[universal-argument] prefixes, directly edit and run `grep-command'.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
838
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
839 Collect output in a buffer. While grep runs asynchronously, you
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
840 can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error] \
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
841 in the grep output buffer,
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
842 to go to the lines where grep found matches.
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
843
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
844 This command shares argument histories with \\[rgrep] and \\[grep]."
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
845 (interactive
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
846 (progn
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
847 (grep-compute-defaults)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
848 (cond
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
849 ((and grep-command (equal current-prefix-arg '(16)))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
850 (list (read-from-minibuffer "Run: " grep-command
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
851 nil nil 'grep-history)))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
852 ((not grep-template)
105170
f8ba8d6fd250 Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 104898
diff changeset
853 (error "grep.el: No `grep-template' available"))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
854 (t (let* ((regexp (grep-read-regexp))
75877
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
855 (files (grep-read-files regexp))
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
856 (dir (read-directory-name "In directory: "
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
857 nil default-directory t))
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
858 (confirm (equal current-prefix-arg '(4))))
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
859 (list regexp files dir confirm))))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
860 (when (and (stringp regexp) (> (length regexp) 0))
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
861 (unless (and dir (file-directory-p dir) (file-readable-p dir))
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
862 (setq dir default-directory))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
863 (let ((command regexp))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
864 (if (null files)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
865 (if (string= command grep-command)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
866 (setq command nil))
75877
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
867 (setq dir (file-name-as-directory (expand-file-name dir)))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
868 (setq command (grep-expand-template
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
869 grep-template
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
870 regexp
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
871 files
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
872 nil
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
873 (and grep-find-ignored-files
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
874 (concat " --exclude="
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
875 (mapconcat
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
876 #'(lambda (ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
877 (cond ((stringp ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
878 (shell-quote-argument ignore))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
879 ((consp ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
880 (and (funcall (car ignore) dir)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
881 (shell-quote-argument
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
882 (cdr ignore))))))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
883 grep-find-ignored-files
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
884 " --exclude=")))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
885 (when command
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
886 (if confirm
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
887 (setq command
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
888 (read-from-minibuffer "Confirm: "
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
889 command nil nil 'grep-history))
70421
47fe68ac1971 (lgrep, rgrep): Use add-to-history.
Kim F. Storm <storm@cua.dk>
parents: 70340
diff changeset
890 (add-to-history 'grep-history command))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
891 (when command
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
892 (let ((default-directory dir))
75877
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
893 ;; Setting process-setup-function makes exit-message-function work
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
894 ;; even when async processes aren't supported.
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
895 (compilation-start (if (and grep-use-null-device null-device)
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
896 (concat command " " null-device)
82421
84edadc1cf67 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
897 command)
84edadc1cf67 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 82140
diff changeset
898 'grep-mode))
75877
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
899 (if (eq next-error-last-buffer (current-buffer))
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
900 (setq default-directory dir))))))
9ba96fd63815 (grep-files-aliases): Add tex and texi aliases.
Kim F. Storm <storm@cua.dk>
parents: 75803
diff changeset
901
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
902
106121
f58be5f9ad87 * find-dired.el (find-name-arg): Remove autoload. (Bug#4387)
Juri Linkov <juri@jurta.org>
parents: 105950
diff changeset
903 (defvar find-name-arg) ; not autoloaded but defined in find-dired
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
904
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
905 ;;;###autoload
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
906 (defun rgrep (regexp &optional files dir confirm)
70526
0c5d2102f71a (lgrep, rgrep): Doc fixes.
Kim F. Storm <storm@cua.dk>
parents: 70421
diff changeset
907 "Recursively grep for REGEXP in FILES in directory tree rooted at DIR.
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
908 The search is limited to file names matching shell pattern FILES.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
909 FILES may use abbreviations defined in `grep-files-aliases', e.g.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
910 entering `ch' is equivalent to `*.[ch]'.
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
911
70526
0c5d2102f71a (lgrep, rgrep): Doc fixes.
Kim F. Storm <storm@cua.dk>
parents: 70421
diff changeset
912 With \\[universal-argument] prefix, you can edit the constructed shell command line
0c5d2102f71a (lgrep, rgrep): Doc fixes.
Kim F. Storm <storm@cua.dk>
parents: 70421
diff changeset
913 before it is executed.
0c5d2102f71a (lgrep, rgrep): Doc fixes.
Kim F. Storm <storm@cua.dk>
parents: 70421
diff changeset
914 With two \\[universal-argument] prefixes, directly edit and run `grep-find-command'.
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
915
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
916 Collect output in a buffer. While find runs asynchronously, you
86249
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
917 can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error] \
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
918 in the grep output buffer,
ef17406635fe (xargs-program): New variable.
Juanma Barranquero <lekktu@gmail.com>
parents: 83780
diff changeset
919 to go to the lines where grep found matches.
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
920
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
921 This command shares argument histories with \\[lgrep] and \\[grep-find]."
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
922 (interactive
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
923 (progn
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
924 (grep-compute-defaults)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
925 (cond
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
926 ((and grep-find-command (equal current-prefix-arg '(16)))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
927 (list (read-from-minibuffer "Run: " grep-find-command
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
928 nil nil 'grep-find-history)))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
929 ((not grep-find-template)
105170
f8ba8d6fd250 Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 104898
diff changeset
930 (error "grep.el: No `grep-find-template' available"))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
931 (t (let* ((regexp (grep-read-regexp))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
932 (files (grep-read-files regexp))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
933 (dir (read-directory-name "Base directory: "
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
934 nil default-directory t))
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
935 (confirm (equal current-prefix-arg '(4))))
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
936 (list regexp files dir confirm))))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
937 (when (and (stringp regexp) (> (length regexp) 0))
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
938 (unless (and dir (file-directory-p dir) (file-readable-p dir))
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
939 (setq dir default-directory))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
940 (if (null files)
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
941 (if (not (string= regexp grep-find-command))
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
942 (compilation-start regexp 'grep-mode))
70534
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
943 (setq dir (file-name-as-directory (expand-file-name dir)))
106121
f58be5f9ad87 * find-dired.el (find-name-arg): Remove autoload. (Bug#4387)
Juri Linkov <juri@jurta.org>
parents: 105950
diff changeset
944 (require 'find-dired) ; for `find-name-arg'
70534
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
945 (let ((command (grep-expand-template
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
946 grep-find-template
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
947 regexp
72500
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
948 (concat (shell-quote-argument "(")
79589
05774558f6e1 (rgrep): Use find-name-arg.
Jason Rumney <jasonr@gnu.org>
parents: 78234
diff changeset
949 " " find-name-arg " "
70534
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
950 (mapconcat #'shell-quote-argument
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
951 (split-string files)
79643
078fe4baaf42 (rgrep): Fix last change.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 79589
diff changeset
952 (concat " -o " find-name-arg " "))
72500
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
953 " "
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
954 (shell-quote-argument ")"))
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
955 dir
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
956 (concat
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
957 (and grep-find-ignored-directories
72500
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
958 (concat (shell-quote-argument "(")
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
959 ;; we should use shell-quote-argument here
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
960 " -path "
103787
fb68f473a020 (rgrep): Allow grep-find-ignored-directories
Sam Steingold <sds@gnu.org>
parents: 103276
diff changeset
961 (mapconcat
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
962 #'(lambda (ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
963 (cond ((stringp ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
964 (shell-quote-argument
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
965 (concat "*/" ignore)))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
966 ((consp ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
967 (and (funcall (car ignore) dir)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
968 (shell-quote-argument
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
969 (concat "*/"
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
970 (cdr ignore)))))))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
971 grep-find-ignored-directories
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
972 " -o -path ")
72500
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
973 " "
35e43fe3d8ef (grep-find-use-xargs): Use explicit value `exec'
Kim F. Storm <storm@cua.dk>
parents: 72173
diff changeset
974 (shell-quote-argument ")")
104898
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
975 " -prune -o "))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
976 (and grep-find-ignored-files
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
977 (concat (shell-quote-argument "(")
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
978 ;; we should use shell-quote-argument here
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
979 " -name "
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
980 (mapconcat
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
981 #'(lambda (ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
982 (cond ((stringp ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
983 (shell-quote-argument ignore))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
984 ((consp ignore)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
985 (and (funcall (car ignore) dir)
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
986 (shell-quote-argument
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
987 (cdr ignore))))))
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
988 grep-find-ignored-files
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
989 " -o -name ")
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
990 " "
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
991 (shell-quote-argument ")")
5c11b1241dc1 (grep-template): Add "<X>" to docstring.
Juri Linkov <juri@jurta.org>
parents: 104745
diff changeset
992 " -prune -o "))))))
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
993 (when command
104525
b8afce0dc654 (lgrep, rgrep): At the beginning
Juri Linkov <juri@jurta.org>
parents: 104243
diff changeset
994 (if confirm
70258
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
995 (setq command
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
996 (read-from-minibuffer "Confirm: "
5dfde453f39e (defgroup grep): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 69499
diff changeset
997 command nil nil 'grep-find-history))
70421
47fe68ac1971 (lgrep, rgrep): Use add-to-history.
Kim F. Storm <storm@cua.dk>
parents: 70340
diff changeset
998 (add-to-history 'grep-find-history command))
70534
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
999 (let ((default-directory dir))
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
1000 (compilation-start command 'grep-mode))
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
1001 ;; Set default-directory if we started rgrep in the *grep* buffer.
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
1002 (if (eq next-error-last-buffer (current-buffer))
afe3317800c2 (rgrep): Set default directory of *grep*
Kim F. Storm <storm@cua.dk>
parents: 70526
diff changeset
1003 (setq default-directory dir)))))))
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1004
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1005 ;;;###autoload
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1006 (defun zrgrep (regexp &optional files dir confirm grep-find-template)
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1007 "Recursively grep for REGEXP in gzipped FILES in tree rooted at DIR.
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1008 Like `rgrep' but uses `zgrep' for `grep-program', sets the default
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1009 file name to `*.gz', and sets `grep-highlight-matches' to `always'."
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1010 (interactive
107067
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1011 (progn
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1012 ;; Compute standard default values.
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1013 (grep-compute-defaults)
107067
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1014 ;; Compute the default zrgrep command by running `grep-compute-defaults'
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1015 ;; for grep program "zgrep", but not changing global values.
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1016 (let ((grep-program "zgrep")
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1017 ;; Don't change global values for variables computed
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1018 ;; by `grep-compute-defaults'.
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1019 (grep-find-template nil)
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1020 (grep-find-command nil)
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1021 (grep-host-defaults-alist nil)
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1022 ;; Use for `grep-read-files'
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1023 (grep-files-aliases '(("all" . "* .*")
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1024 ("gz" . "*.gz"))))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1025 ;; Recompute defaults using let-bound values above.
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1026 (grep-compute-defaults)
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1027 (cond
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1028 ((and grep-find-command (equal current-prefix-arg '(16)))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1029 (list (read-from-minibuffer "Run: " grep-find-command
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1030 nil nil 'grep-find-history)))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1031 ((not grep-find-template)
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1032 (error "grep.el: No `grep-find-template' available"))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1033 (t (let* ((regexp (grep-read-regexp))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1034 (files (grep-read-files regexp))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1035 (dir (read-directory-name "Base directory: "
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1036 nil default-directory t))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1037 (confirm (equal current-prefix-arg '(4))))
5f67deabc08b * progmodes/grep.el (zrgrep): Call `grep-compute-defaults' at the
Juri Linkov <juri@jurta.org>
parents: 106815
diff changeset
1038 (list regexp files dir confirm grep-find-template)))))))
106243
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1039 ;; Set `grep-highlight-matches' to `always'
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1040 ;; since `zgrep' puts filters in the grep output.
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1041 (let ((grep-highlight-matches 'always))
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1042 ;; `rgrep' uses the dynamically bound value `grep-find-template'
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1043 ;; from the argument `grep-find-template' whose value is computed
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1044 ;; in the `interactive' spec.
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1045 (rgrep regexp files dir confirm)))
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1046
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1047 ;;;###autoload
20e6e5b85a34 Search recursively in gzipped files. (Bug#4982)
Juri Linkov <juri@jurta.org>
parents: 106121
diff changeset
1048 (defalias 'rzgrep 'zrgrep)
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1049
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1050 (provide 'grep)
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1051
57043
cb013e5835b8 (grep-mode): Remove unnecessary autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57022
diff changeset
1052 ;; arch-tag: 5a5b9169-a79d-4f38-9c38-f69615f39c4d
53139
df3033332097 * progmodes/grep.el: New file with grep code from compile.el.
Kim F. Storm <storm@cua.dk>
parents:
diff changeset
1053 ;;; grep.el ends here