Mercurial > emacs
annotate lisp/replace.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | 280c8ae2476d |
children | 88e55e239ecc |
rev | line source |
---|---|
38414
67b464da13ec
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
38080
diff
changeset
|
1 ;;; replace.el --- replace commands for Emacs |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
324
diff
changeset
|
2 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64503
diff
changeset
|
3 ;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1996, 1997, 2000, 2001, |
106815 | 4 ;; 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
101013
dbe70c3aa01d
Replace last-input-char with last-input-event.
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
5 ;; Free Software Foundation, Inc. |
61 | 6 |
45078 | 7 ;; Maintainer: FSF |
110015
280c8ae2476d
Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents:
109716
diff
changeset
|
8 ;; Package: emacs |
45078 | 9 |
61 | 10 ;; This file is part of GNU Emacs. |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94525
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
61 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94525
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94525
diff
changeset
|
15 ;; (at your option) any later version. |
61 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94525
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
61 | 24 |
2315
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2156
diff
changeset
|
25 ;;; Commentary: |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2156
diff
changeset
|
26 |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2156
diff
changeset
|
27 ;; This package supplies the string and regular-expression replace functions |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2156
diff
changeset
|
28 ;; documented in the Emacs user's manual. |
9e7ec92a4fdf
Added or corrected Commentary headers
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2156
diff
changeset
|
29 |
788
c8d4eb38ebfc
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
732
diff
changeset
|
30 ;;; Code: |
61 | 31 |
17664
d8cb277f0ce8
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17655
diff
changeset
|
32 (defcustom case-replace t |
100171 | 33 "Non-nil means `query-replace' should preserve case in replacements." |
17664
d8cb277f0ce8
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17655
diff
changeset
|
34 :type 'boolean |
d8cb277f0ce8
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17655
diff
changeset
|
35 :group 'matching) |
264 | 36 |
107417
a24389e7f686
Use query-replace-{from,to}-history-variable in more places.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
37 (defvar query-replace-history nil |
a24389e7f686
Use query-replace-{from,to}-history-variable in more places.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
38 "Default history list for query-replace commands. |
a24389e7f686
Use query-replace-{from,to}-history-variable in more places.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
39 See `query-replace-from-history-variable' and |
a24389e7f686
Use query-replace-{from,to}-history-variable in more places.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
40 `query-replace-to-history-variable'.") |
864
fe5f6b7c9727
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
862
diff
changeset
|
41 |
71025
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
42 (defvar query-replace-defaults nil |
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
43 "Default values of FROM-STRING and TO-STRING for `query-replace'. |
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
44 This is a cons cell (FROM-STRING . TO-STRING), or nil if there is |
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
45 no default value.") |
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
46 |
56350
cae4ae1c68a9
(query-replace-interactive, query-replace-read-args):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56328
diff
changeset
|
47 (defvar query-replace-interactive nil |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
48 "Non-nil means `query-replace' uses the last search string. |
56350
cae4ae1c68a9
(query-replace-interactive, query-replace-read-args):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56328
diff
changeset
|
49 That becomes the \"string to replace\".") |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
50 |
20806
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
51 (defcustom query-replace-from-history-variable 'query-replace-history |
38036
018637678f29
(case-replace, query-replace-from-history-variable)
Eli Zaretskii <eliz@gnu.org>
parents:
37832
diff
changeset
|
52 "History list to use for the FROM argument of `query-replace' commands. |
20806
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
53 The value of this variable should be a symbol; that symbol |
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
54 is used as a variable to hold a history list for the strings |
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
55 or patterns to be replaced." |
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
56 :group 'matching |
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21294
diff
changeset
|
57 :type 'symbol |
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21294
diff
changeset
|
58 :version "20.3") |
20806
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
59 |
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
60 (defcustom query-replace-to-history-variable 'query-replace-history |
38036
018637678f29
(case-replace, query-replace-from-history-variable)
Eli Zaretskii <eliz@gnu.org>
parents:
37832
diff
changeset
|
61 "History list to use for the TO argument of `query-replace' commands. |
20806
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
62 The value of this variable should be a symbol; that symbol |
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
63 is used as a variable to hold a history list for replacement |
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
64 strings or patterns." |
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
65 :group 'matching |
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21294
diff
changeset
|
66 :type 'symbol |
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21294
diff
changeset
|
67 :version "20.3") |
20806
24a1fcdc31d7
(query-replace-from-history-variable): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
20658
diff
changeset
|
68 |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
69 (defcustom query-replace-skip-read-only nil |
100171 | 70 "Non-nil means `query-replace' and friends ignore read-only matches." |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
71 :type 'boolean |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
72 :group 'matching |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59570
diff
changeset
|
73 :version "22.1") |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
74 |
86018
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
75 (defcustom query-replace-show-replacement t |
100171 | 76 "Non-nil means to show what actual replacement text will be." |
86018
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
77 :type 'boolean |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
78 :group 'matching |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
79 :version "23.1") |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
80 |
59479
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
81 (defcustom query-replace-highlight t |
100171 | 82 "Non-nil means to highlight matches during query replacement." |
59479
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
83 :type 'boolean |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
84 :group 'matching) |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
85 |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
86 (defcustom query-replace-lazy-highlight t |
100171 | 87 "Controls the lazy-highlighting during query replacements. |
59479
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
88 When non-nil, all text in the buffer matching the current match |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
89 is highlighted lazily using isearch lazy highlighting (see |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
90 `lazy-highlight-initial-delay' and `lazy-highlight-interval')." |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
91 :type 'boolean |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
92 :group 'lazy-highlight |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
93 :group 'matching |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59570
diff
changeset
|
94 :version "22.1") |
59479
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
95 |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
96 (defface query-replace |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
97 '((t (:inherit isearch))) |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
98 "Face for highlighting query replacement matches." |
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
99 :group 'matching |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59570
diff
changeset
|
100 :version "22.1") |
59479
fea2bcedb7bf
(query-replace-lazy-highlight): Add lazy-highlight group.
Juri Linkov <juri@jurta.org>
parents:
59341
diff
changeset
|
101 |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
102 (defun query-replace-descr (string) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
103 (mapconcat 'isearch-text-char-description string "")) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
104 |
64866
6f20cb2a3b72
(query-replace-read-from, query-replace-read-to)
Juri Linkov <juri@jurta.org>
parents:
64823
diff
changeset
|
105 (defun query-replace-read-from (prompt regexp-flag) |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
106 "Query and return the `from' argument of a query-replace operation. |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
107 The return value can also be a pair (FROM . TO) indicating that the user |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
108 wants to replace FROM with TO." |
56351
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
109 (if query-replace-interactive |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
110 (car (if regexp-flag regexp-search-ring search-ring)) |
71125
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
111 (let* ((history-add-new-input nil) |
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
112 (from |
56351
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
113 ;; The save-excursion here is in case the user marks and copies |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
114 ;; a region in order to specify the minibuffer input. |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
115 ;; That should not clobber the region for the query-replace itself. |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
116 (save-excursion |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
117 (read-from-minibuffer |
71025
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
118 (if query-replace-defaults |
64866
6f20cb2a3b72
(query-replace-read-from, query-replace-read-to)
Juri Linkov <juri@jurta.org>
parents:
64823
diff
changeset
|
119 (format "%s (default %s -> %s): " prompt |
71025
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
120 (query-replace-descr (car query-replace-defaults)) |
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
121 (query-replace-descr (cdr query-replace-defaults))) |
64866
6f20cb2a3b72
(query-replace-read-from, query-replace-read-to)
Juri Linkov <juri@jurta.org>
parents:
64823
diff
changeset
|
122 (format "%s: " prompt)) |
56351
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
123 nil nil nil |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
124 query-replace-from-history-variable |
70936
83ce2ddffd16
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
70349
diff
changeset
|
125 nil t)))) |
71025
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
126 (if (and (zerop (length from)) query-replace-defaults) |
71026 | 127 (cons (car query-replace-defaults) |
128 (query-replace-compile-replacement | |
129 (cdr query-replace-defaults) regexp-flag)) | |
71125
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
130 (add-to-history query-replace-from-history-variable from nil t) |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
131 ;; Warn if user types \n or \t, but don't reject the input. |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
132 (and regexp-flag |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
133 (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
134 (let ((match (match-string 3 from))) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
135 (cond |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
136 ((string= match "\\n") |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
137 (message "Note: `\\n' here doesn't match a newline; to do that, type C-q C-j instead")) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
138 ((string= match "\\t") |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
139 (message "Note: `\\t' here doesn't match a tab; to do that, just type TAB"))) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
140 (sit-for 2))) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
141 from)))) |
41761
878a3e2e7cfa
(query-replace-read-args): Display message if FROM contains `\n' or `\t'.
Richard M. Stallman <rms@gnu.org>
parents:
41329
diff
changeset
|
142 |
56581
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
143 (defun query-replace-compile-replacement (to regexp-flag) |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
144 "Maybe convert a regexp replacement TO to Lisp. |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
145 Returns a list suitable for `perform-replace' if necessary, |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
146 the original string if not." |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
147 (if (and regexp-flag |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
148 (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\\\[,#]" to)) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
149 (let (pos list char) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
150 (while |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
151 (progn |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
152 (setq pos (match-end 0)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
153 (push (substring to 0 (- pos 2)) list) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
154 (setq char (aref to (1- pos)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
155 to (substring to pos)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
156 (cond ((eq char ?\#) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
157 (push '(number-to-string replace-count) list)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
158 ((eq char ?\,) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
159 (setq pos (read-from-string to)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
160 (push `(replace-quote ,(car pos)) list) |
56325
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
161 (let ((end |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
162 ;; Swallow a space after a symbol |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
163 ;; if there is a space. |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
164 (if (and (or (symbolp (car pos)) |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
165 ;; Swallow a space after 'foo |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
166 ;; but not after (quote foo). |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
167 (and (eq (car-safe (car pos)) 'quote) |
56328
cc1deb864ed6
(query-replace-read-args): Swallow space after 'foo,
Juri Linkov <juri@jurta.org>
parents:
56325
diff
changeset
|
168 (not (= ?\( (aref to 0))))) |
cc1deb864ed6
(query-replace-read-args): Swallow space after 'foo,
Juri Linkov <juri@jurta.org>
parents:
56325
diff
changeset
|
169 (eq (string-match " " to (cdr pos)) |
cc1deb864ed6
(query-replace-read-args): Swallow space after 'foo,
Juri Linkov <juri@jurta.org>
parents:
56325
diff
changeset
|
170 (cdr pos))) |
56325
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
171 (1+ (cdr pos)) |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
172 (cdr pos)))) |
06c785c5e655
(query-replace-read-args): Swallow space after symbols, not after
Richard M. Stallman <rms@gnu.org>
parents:
56304
diff
changeset
|
173 (setq to (substring to end))))) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
174 (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\\\[,#]" to))) |
56581
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
175 (setq to (nreverse (delete "" (cons to list)))) |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
176 (replace-match-string-symbols to) |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
177 (cons 'replace-eval-replacement |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
178 (if (cdr to) |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
179 (cons 'concat to) |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
180 (car to)))) |
56351
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
181 to)) |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
182 |
56581
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
183 |
64866
6f20cb2a3b72
(query-replace-read-from, query-replace-read-to)
Juri Linkov <juri@jurta.org>
parents:
64823
diff
changeset
|
184 (defun query-replace-read-to (from prompt regexp-flag) |
56581
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
185 "Query and return the `to' argument of a query-replace operation." |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
186 (query-replace-compile-replacement |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
187 (save-excursion |
71125
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
188 (let* ((history-add-new-input nil) |
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
189 (to (read-from-minibuffer |
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
190 (format "%s %s with: " prompt (query-replace-descr from)) |
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
191 nil nil nil |
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
192 query-replace-to-history-variable from t))) |
21306dd42b3c
(query-replace-read-from, query-replace-read-to):
Juri Linkov <juri@jurta.org>
parents:
71026
diff
changeset
|
193 (add-to-history query-replace-to-history-variable to nil t) |
71025
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
194 (setq query-replace-defaults (cons from to)) |
82d1f472baee
* replace.el (query-replace-defaults): New variable.
Chong Yidong <cyd@stupidchicken.com>
parents:
70936
diff
changeset
|
195 to)) |
56581
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
196 regexp-flag)) |
6cfb1ef9200f
(query-replace-read-from): Use
David Kastrup <dak@gnu.org>
parents:
56520
diff
changeset
|
197 |
64866
6f20cb2a3b72
(query-replace-read-from, query-replace-read-to)
Juri Linkov <juri@jurta.org>
parents:
64823
diff
changeset
|
198 (defun query-replace-read-args (prompt regexp-flag &optional noerror) |
56351
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
199 (unless noerror |
d073da76f0a5
(query-replace-read-from, query-replace-read-to): New funs extracted
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56350
diff
changeset
|
200 (barf-if-buffer-read-only)) |
64866
6f20cb2a3b72
(query-replace-read-from, query-replace-read-to)
Juri Linkov <juri@jurta.org>
parents:
64823
diff
changeset
|
201 (let* ((from (query-replace-read-from prompt regexp-flag)) |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
202 (to (if (consp from) (prog1 (cdr from) (setq from (car from))) |
64866
6f20cb2a3b72
(query-replace-read-from, query-replace-read-to)
Juri Linkov <juri@jurta.org>
parents:
64823
diff
changeset
|
203 (query-replace-read-to from prompt regexp-flag)))) |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
204 (list from to current-prefix-arg))) |
864
fe5f6b7c9727
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
862
diff
changeset
|
205 |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
206 (defun query-replace (from-string to-string &optional delimited start end) |
260 | 207 "Replace some occurrences of FROM-STRING with TO-STRING. |
208 As each match is found, the user must type a character saying | |
209 what to do with it. For directions, type \\[help-command] at that time. | |
210 | |
20248
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
211 In Transient Mark mode, if the mark is active, operate on the contents |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
212 of the region. Otherwise, operate from point to the end of the buffer. |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
213 |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
214 If `query-replace-interactive' is non-nil, the last incremental search |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
215 string is used as FROM-STRING--you don't have to specify it with the |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
216 minibuffer. |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
217 |
48173
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
218 Matching is independent of case if `case-fold-search' is non-nil and |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
219 FROM-STRING has no uppercase letters. Replacement transfers the case |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
220 pattern of the old text to the new text, if `case-replace' and |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
221 `case-fold-search' are non-nil and FROM-STRING has no uppercase |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
222 letters. \(Transferring the case pattern means that if the old text |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
223 matched is all caps, or capitalized, then its replacement is upcased |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
224 or capitalized.) |
10104
8a04af3511c1
(replace-string, query-replace): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
10069
diff
changeset
|
225 |
6707 | 226 Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace |
2080
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
227 only matches surrounded by word boundaries. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
228 Fourth and fifth arg START and END specify the region to operate on. |
2080
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
229 |
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
230 To customize possible responses, change the \"bindings\" in `query-replace-map'." |
98913
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
231 (interactive |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
232 (let ((common |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
233 (query-replace-read-args |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
234 (concat "Query replace" |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
235 (if current-prefix-arg " word" "") |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
236 (if (and transient-mark-mode mark-active) " in region" "")) |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
237 nil))) |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
238 (list (nth 0 common) (nth 1 common) (nth 2 common) |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
239 ;; These are done separately here |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
240 ;; so that command-history will record these expressions |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
241 ;; rather than the values they had this time. |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
242 (if (and transient-mark-mode mark-active) |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
243 (region-beginning)) |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
244 (if (and transient-mark-mode mark-active) |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
245 (region-end))))) |
40254
51c9985454e3
(perform-replace): Move START and END parameters
Gerd Moellmann <gerd@gnu.org>
parents:
38986
diff
changeset
|
246 (perform-replace from-string to-string t nil delimited nil nil start end)) |
20248
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
247 |
268 | 248 (define-key esc-map "%" 'query-replace) |
260 | 249 |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
250 (defun query-replace-regexp (regexp to-string &optional delimited start end) |
260 | 251 "Replace some things after point matching REGEXP with TO-STRING. |
252 As each match is found, the user must type a character saying | |
253 what to do with it. For directions, type \\[help-command] at that time. | |
254 | |
20248
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
255 In Transient Mark mode, if the mark is active, operate on the contents |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
256 of the region. Otherwise, operate from point to the end of the buffer. |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
257 |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
258 If `query-replace-interactive' is non-nil, the last incremental search |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
259 regexp is used as REGEXP--you don't have to specify it with the |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
260 minibuffer. |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
261 |
48173
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
262 Matching is independent of case if `case-fold-search' is non-nil and |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
263 REGEXP has no uppercase letters. Replacement transfers the case |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
264 pattern of the old text to the new text, if `case-replace' and |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
265 `case-fold-search' are non-nil and REGEXP has no uppercase letters. |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
266 \(Transferring the case pattern means that if the old text matched is |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
267 all caps, or capitalized, then its replacement is upcased or |
b0db4f794e73
(query-replace, query-replace-regexp): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
47593
diff
changeset
|
268 capitalized.) |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
269 |
6707 | 270 Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace |
260 | 271 only matches surrounded by word boundaries. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
272 Fourth and fifth arg START and END specify the region to operate on. |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
273 |
6707 | 274 In TO-STRING, `\\&' stands for whatever matched the whole of REGEXP, |
275 and `\\=\\N' (where N is a digit) stands for | |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
276 whatever what matched the Nth `\\(...\\)' in REGEXP. |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
277 `\\?' lets you edit the replacement text in the minibuffer |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
278 at the given position for each replacement. |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
279 |
56245
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
280 In interactive calls, the replacement text can contain `\\,' |
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
281 followed by a Lisp expression. Each |
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
282 replacement evaluates that expression to compute the replacement |
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
283 string. Inside of that expression, `\\&' is a string denoting the |
56328
cc1deb864ed6
(query-replace-read-args): Swallow space after 'foo,
Juri Linkov <juri@jurta.org>
parents:
56325
diff
changeset
|
284 whole match as a string, `\\N' for a partial match, `\\#&' and `\\#N' |
56245
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
285 for the whole or a partial match converted to a number with |
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
286 `string-to-number', and `\\#' itself for the number of replacements |
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
287 done so far (starting with zero). |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
288 |
56245
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
289 If the replacement expression is a symbol, write a space after it |
93e88c0fb51c
(query-replace-read-args): Swallow space after \,SYMBOL.
Richard M. Stallman <rms@gnu.org>
parents:
56228
diff
changeset
|
290 to terminate it. One space there, if any, will be discarded. |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
291 |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
292 When using those Lisp features interactively in the replacement |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
293 text, TO-STRING is actually made a list instead of a string. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
294 Use \\[repeat-complex-command] after this command for details." |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
295 (interactive |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
296 (let ((common |
63150
571afd8b238a
(replace-match-data): Pass RESEAT arg `t' to
Kim F. Storm <storm@cua.dk>
parents:
62737
diff
changeset
|
297 (query-replace-read-args |
98913
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
298 (concat "Query replace" |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
299 (if current-prefix-arg " word" "") |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
300 " regexp" |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
301 (if (and transient-mark-mode mark-active) " in region" "")) |
60174
85f04f438e03
(query-replace, query-replace-regexp)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
60159
diff
changeset
|
302 t))) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
303 (list (nth 0 common) (nth 1 common) (nth 2 common) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
304 ;; These are done separately here |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
305 ;; so that command-history will record these expressions |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
306 ;; rather than the values they had this time. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
307 (if (and transient-mark-mode mark-active) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
308 (region-beginning)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
309 (if (and transient-mark-mode mark-active) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
310 (region-end))))) |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
311 (perform-replace regexp to-string t t delimited nil nil start end)) |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
312 |
22353
402ebb81ae84
(esc-map): Bind C-M-% to query-replace-regexp.
Karl Heuer <kwzh@gnu.org>
parents:
21669
diff
changeset
|
313 (define-key esc-map [?\C-%] 'query-replace-regexp) |
260 | 314 |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
315 (defun query-replace-regexp-eval (regexp to-expr &optional delimited start end) |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
316 "Replace some things after point matching REGEXP with the result of TO-EXPR. |
77286
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
317 |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
318 Interactive use of this function is deprecated in favor of the |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
319 `\\,' feature of `query-replace-regexp'. For non-interactive use, a loop |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
320 using `search-forward-regexp' and `replace-match' is preferred. |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
321 |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
322 As each match is found, the user must type a character saying |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
323 what to do with it. For directions, type \\[help-command] at that time. |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
324 |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
325 TO-EXPR is a Lisp expression evaluated to compute each replacement. It may |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
326 reference `replace-count' to get the number of replacements already made. |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
327 If the result of TO-EXPR is not a string, it is converted to one using |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
328 `prin1-to-string' with the NOESCAPE argument (which see). |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
329 |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
330 For convenience, when entering TO-EXPR interactively, you can use `\\&' or |
43406
f39dfc11dc58
(query-replace-regexp-eval): Doc fix.
Andreas Schwab <schwab@suse.de>
parents:
43405
diff
changeset
|
331 `\\0' to stand for whatever matched the whole of REGEXP, and `\\N' (where |
f39dfc11dc58
(query-replace-regexp-eval): Doc fix.
Andreas Schwab <schwab@suse.de>
parents:
43405
diff
changeset
|
332 N is a digit) to stand for whatever matched the Nth `\\(...\\)' in REGEXP. |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
333 Use `\\#&' or `\\#N' if you want a number instead of a string. |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
334 In interactive use, `\\#' in itself stands for `replace-count'. |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
335 |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
336 In Transient Mark mode, if the mark is active, operate on the contents |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
337 of the region. Otherwise, operate from point to the end of the buffer. |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
338 |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
339 If `query-replace-interactive' is non-nil, the last incremental search |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
340 regexp is used as REGEXP--you don't have to specify it with the |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
341 minibuffer. |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
342 |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
343 Preserves case in each replacement if `case-replace' and `case-fold-search' |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
344 are non-nil and REGEXP has no uppercase letters. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
345 |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
346 Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace |
37536
0e883854b9fc
(query-replace-regexp-eval): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents:
36076
diff
changeset
|
347 only matches that are surrounded by word boundaries. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
348 Fourth and fifth arg START and END specify the region to operate on." |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
349 (interactive |
56360
a9b695d281d4
(query-replace-regexp-eval): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56355
diff
changeset
|
350 (progn |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
351 (barf-if-buffer-read-only) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
352 (let* ((from |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
353 ;; Let-bind the history var to disable the "foo -> bar" default. |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
354 ;; Maybe we shouldn't disable this default, but for now I'll |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
355 ;; leave it off. --Stef |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
356 (let ((query-replace-to-history-variable nil)) |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
357 (query-replace-read-from "Query replace regexp" t))) |
56350
cae4ae1c68a9
(query-replace-interactive, query-replace-read-args):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56328
diff
changeset
|
358 (to (list (read-from-minibuffer |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
359 (format "Query replace regexp %s with eval: " |
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
360 (query-replace-descr from)) |
56350
cae4ae1c68a9
(query-replace-interactive, query-replace-read-args):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56328
diff
changeset
|
361 nil nil t query-replace-to-history-variable from t)))) |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
362 ;; We make TO a list because replace-match-string-symbols requires one, |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
363 ;; and the user might enter a single token. |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
364 (replace-match-string-symbols to) |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
365 (list from (car to) current-prefix-arg |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
366 (if (and transient-mark-mode mark-active) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
367 (region-beginning)) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
368 (if (and transient-mark-mode mark-active) |
56360
a9b695d281d4
(query-replace-regexp-eval): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56355
diff
changeset
|
369 (region-end)))))) |
27391
abaa4ac29f51
(query-replace): Rename last arg to DELIMITED.
Richard M. Stallman <rms@gnu.org>
parents:
25167
diff
changeset
|
370 (perform-replace regexp (cons 'replace-eval-replacement to-expr) |
53778
7898852aa054
(perform-replace): Allow 'literal argument in
David Kastrup <dak@gnu.org>
parents:
52401
diff
changeset
|
371 t 'literal delimited nil nil start end)) |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
372 |
77286
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
373 (make-obsolete 'query-replace-regexp-eval |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
374 "for interactive use, use the special `\\,' feature of |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
375 `query-replace-regexp' instead. Non-interactively, a loop |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
376 using `search-forward-regexp' and `replace-match' is preferred." "22.1") |
0f67bcedb447
* NEWS: Mention `query-replace-regexp-eval' being deprecated.
David Kastrup <dak@gnu.org>
parents:
76749
diff
changeset
|
377 |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
378 (defun map-query-replace-regexp (regexp to-strings &optional n start end) |
260 | 379 "Replace some matches for REGEXP with various strings, in rotation. |
79449
d326128c6b13
(map-query-replace-regexp): Doc fix (revert part of revision 1.104,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
380 The second argument TO-STRINGS contains the replacement strings, separated |
d326128c6b13
(map-query-replace-regexp): Doc fix (revert part of revision 1.104,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
381 by spaces. This command works like `query-replace-regexp' except that |
d326128c6b13
(map-query-replace-regexp): Doc fix (revert part of revision 1.104,
Juanma Barranquero <lekktu@gmail.com>
parents:
78236
diff
changeset
|
382 each successive replacement uses the next successive replacement string, |
260 | 383 wrapping around from the last such string to the first. |
384 | |
20248
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
385 In Transient Mark mode, if the mark is active, operate on the contents |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
386 of the region. Otherwise, operate from point to the end of the buffer. |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
387 |
260 | 388 Non-interactively, TO-STRINGS may be a list of replacement strings. |
389 | |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
390 If `query-replace-interactive' is non-nil, the last incremental search |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
391 regexp is used as REGEXP--you don't have to specify it with the minibuffer. |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
392 |
260 | 393 A prefix argument N says to use each replacement string N times |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
394 before rotating to the next. |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
395 Fourth and fifth arg START and END specify the region to operate on." |
864
fe5f6b7c9727
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
862
diff
changeset
|
396 (interactive |
56350
cae4ae1c68a9
(query-replace-interactive, query-replace-read-args):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56328
diff
changeset
|
397 (let* ((from (if query-replace-interactive |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
398 (car regexp-search-ring) |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
399 (read-from-minibuffer "Map query replace (regexp): " |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
400 nil nil nil |
107417
a24389e7f686
Use query-replace-{from,to}-history-variable in more places.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
401 query-replace-from-history-variable |
a24389e7f686
Use query-replace-{from,to}-history-variable in more places.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
402 nil t))) |
56350
cae4ae1c68a9
(query-replace-interactive, query-replace-read-args):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56328
diff
changeset
|
403 (to (read-from-minibuffer |
864
fe5f6b7c9727
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
862
diff
changeset
|
404 (format "Query replace %s with (space-separated strings): " |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
405 (query-replace-descr from)) |
864
fe5f6b7c9727
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
862
diff
changeset
|
406 nil nil nil |
107417
a24389e7f686
Use query-replace-{from,to}-history-variable in more places.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
407 query-replace-to-history-variable from t))) |
50030
1ec92786c9eb
(query-replace-read-args): Use save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
49958
diff
changeset
|
408 (list from to |
1ec92786c9eb
(query-replace-read-args): Use save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
49958
diff
changeset
|
409 (and current-prefix-arg |
1ec92786c9eb
(query-replace-read-args): Use save-excursion.
Richard M. Stallman <rms@gnu.org>
parents:
49958
diff
changeset
|
410 (prefix-numeric-value current-prefix-arg)) |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
411 (if (and transient-mark-mode mark-active) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
412 (region-beginning)) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
413 (if (and transient-mark-mode mark-active) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
414 (region-end))))) |
260 | 415 (let (replacements) |
416 (if (listp to-strings) | |
417 (setq replacements to-strings) | |
418 (while (/= (length to-strings) 0) | |
419 (if (string-match " " to-strings) | |
420 (setq replacements | |
421 (append replacements | |
422 (list (substring to-strings 0 | |
423 (string-match " " to-strings)))) | |
424 to-strings (substring to-strings | |
425 (1+ (string-match " " to-strings)))) | |
426 (setq replacements (append replacements (list to-strings)) | |
427 to-strings "")))) | |
40254
51c9985454e3
(perform-replace): Move START and END parameters
Gerd Moellmann <gerd@gnu.org>
parents:
38986
diff
changeset
|
428 (perform-replace regexp replacements t t nil n nil start end))) |
260 | 429 |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
430 (defun replace-string (from-string to-string &optional delimited start end) |
260 | 431 "Replace occurrences of FROM-STRING with TO-STRING. |
432 Preserve case in each match if `case-replace' and `case-fold-search' | |
433 are non-nil and FROM-STRING has no uppercase letters. | |
10104
8a04af3511c1
(replace-string, query-replace): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
10069
diff
changeset
|
434 \(Preserving case means that if the string matched is all caps, or capitalized, |
8a04af3511c1
(replace-string, query-replace): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
10069
diff
changeset
|
435 then its replacement is upcased or capitalized.) |
8a04af3511c1
(replace-string, query-replace): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
10069
diff
changeset
|
436 |
20248
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
437 In Transient Mark mode, if the mark is active, operate on the contents |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
438 of the region. Otherwise, operate from point to the end of the buffer. |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
439 |
6707 | 440 Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace |
260 | 441 only matches surrounded by word boundaries. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
442 Fourth and fifth arg START and END specify the region to operate on. |
260 | 443 |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
444 If `query-replace-interactive' is non-nil, the last incremental search |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
445 string is used as FROM-STRING--you don't have to specify it with the |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
446 minibuffer. |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
447 |
260 | 448 This function is usually the wrong thing to use in a Lisp program. |
449 What you probably want is a loop like this: | |
6707 | 450 (while (search-forward FROM-STRING nil t) |
451 (replace-match TO-STRING nil t)) | |
17211
ecf78b4eb138
(replace-string): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17010
diff
changeset
|
452 which will run faster and will not set the mark or print anything. |
ecf78b4eb138
(replace-string): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17010
diff
changeset
|
453 \(You may need a more complex loop if FROM-STRING can match the null string |
ecf78b4eb138
(replace-string): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17010
diff
changeset
|
454 and TO-STRING is also null.)" |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
455 (interactive |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
456 (let ((common |
63150
571afd8b238a
(replace-match-data): Pass RESEAT arg `t' to
Kim F. Storm <storm@cua.dk>
parents:
62737
diff
changeset
|
457 (query-replace-read-args |
98913
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
458 (concat "Replace" |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
459 (if current-prefix-arg " word" "") |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
460 " string" |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
461 (if (and transient-mark-mode mark-active) " in region" "")) |
60174
85f04f438e03
(query-replace, query-replace-regexp)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
60159
diff
changeset
|
462 nil))) |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
463 (list (nth 0 common) (nth 1 common) (nth 2 common) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
464 (if (and transient-mark-mode mark-active) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
465 (region-beginning)) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
466 (if (and transient-mark-mode mark-active) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
467 (region-end))))) |
40254
51c9985454e3
(perform-replace): Move START and END parameters
Gerd Moellmann <gerd@gnu.org>
parents:
38986
diff
changeset
|
468 (perform-replace from-string to-string nil nil delimited nil nil start end)) |
260 | 469 |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
470 (defun replace-regexp (regexp to-string &optional delimited start end) |
260 | 471 "Replace things after point matching REGEXP with TO-STRING. |
6707 | 472 Preserve case in each match if `case-replace' and `case-fold-search' |
260 | 473 are non-nil and REGEXP has no uppercase letters. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
474 |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
475 In Transient Mark mode, if the mark is active, operate on the contents |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
476 of the region. Otherwise, operate from point to the end of the buffer. |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
477 |
6707 | 478 Third arg DELIMITED (prefix arg if interactive), if non-nil, means replace |
260 | 479 only matches surrounded by word boundaries. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
480 Fourth and fifth arg START and END specify the region to operate on. |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
481 |
6707 | 482 In TO-STRING, `\\&' stands for whatever matched the whole of REGEXP, |
483 and `\\=\\N' (where N is a digit) stands for | |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
484 whatever what matched the Nth `\\(...\\)' in REGEXP. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
485 `\\?' lets you edit the replacement text in the minibuffer |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
486 at the given position for each replacement. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
487 |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
488 In interactive calls, the replacement text may contain `\\,' |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
489 followed by a Lisp expression used as part of the replacement |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
490 text. Inside of that expression, `\\&' is a string denoting the |
75131
61dcb71f259c
(replace-regexp): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
74578
diff
changeset
|
491 whole match, `\\N' a partial match, `\\#&' and `\\#N' the respective |
61dcb71f259c
(replace-regexp): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
74578
diff
changeset
|
492 numeric values from `string-to-number', and `\\#' itself for |
61dcb71f259c
(replace-regexp): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
74578
diff
changeset
|
493 `replace-count', the number of replacements occurred so far. |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
494 |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
495 If your Lisp expression is an identifier and the next letter in |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
496 the replacement string would be interpreted as part of it, you |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
497 can wrap it with an expression like `\\,(or \\#)'. Incidentally, |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
498 for this particular case you may also enter `\\#' in the |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
499 replacement text directly. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
500 |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
501 When using those Lisp features interactively in the replacement |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
502 text, TO-STRING is actually made a list instead of a string. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
503 Use \\[repeat-complex-command] after this command for details. |
260 | 504 |
8935
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
505 If `query-replace-interactive' is non-nil, the last incremental search |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
506 regexp is used as REGEXP--you don't have to specify it with the minibuffer. |
0e9e6ff083e8
(query-replace-interactive): New user option.
Richard M. Stallman <rms@gnu.org>
parents:
8664
diff
changeset
|
507 |
260 | 508 This function is usually the wrong thing to use in a Lisp program. |
509 What you probably want is a loop like this: | |
510 (while (re-search-forward REGEXP nil t) | |
6707 | 511 (replace-match TO-STRING nil nil)) |
260 | 512 which will run faster and will not set the mark or print anything." |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
513 (interactive |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
514 (let ((common |
63150
571afd8b238a
(replace-match-data): Pass RESEAT arg `t' to
Kim F. Storm <storm@cua.dk>
parents:
62737
diff
changeset
|
515 (query-replace-read-args |
98913
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
516 (concat "Replace" |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
517 (if current-prefix-arg " word" "") |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
518 " regexp" |
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
519 (if (and transient-mark-mode mark-active) " in region" "")) |
60174
85f04f438e03
(query-replace, query-replace-regexp)
Dan Nicolaescu <dann@ics.uci.edu>
parents:
60159
diff
changeset
|
520 t))) |
49958
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
521 (list (nth 0 common) (nth 1 common) (nth 2 common) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
522 (if (and transient-mark-mode mark-active) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
523 (region-beginning)) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
524 (if (and transient-mark-mode mark-active) |
4b86a185b11d
(query-replace-read-args): Return just 3 values.
Richard M. Stallman <rms@gnu.org>
parents:
49597
diff
changeset
|
525 (region-end))))) |
40254
51c9985454e3
(perform-replace): Move START and END parameters
Gerd Moellmann <gerd@gnu.org>
parents:
38986
diff
changeset
|
526 (perform-replace regexp to-string nil t delimited nil nil start end)) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
527 |
2408
a9c05a12b615
(regexp-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents:
2327
diff
changeset
|
528 |
a9c05a12b615
(regexp-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents:
2327
diff
changeset
|
529 (defvar regexp-history nil |
79596
b55facd69022
(regexp-history): Add reference to `history-length' in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
79449
diff
changeset
|
530 "History list for some commands that read regular expressions. |
b55facd69022
(regexp-history): Add reference to `history-length' in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
79449
diff
changeset
|
531 |
b55facd69022
(regexp-history): Add reference to `history-length' in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
79449
diff
changeset
|
532 Maximum length of the history list is determined by the value |
b55facd69022
(regexp-history): Add reference to `history-length' in the doc string.
Eli Zaretskii <eliz@gnu.org>
parents:
79449
diff
changeset
|
533 of `history-length', which see.") |
260 | 534 |
98909
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
535 (defun read-regexp (prompt &optional default-value) |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
536 "Read regexp as a string using the regexp history and some useful defaults. |
97082
922b39c63813
(read-regexp): Add second arg `default'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
96908
diff
changeset
|
537 Prompt for a regular expression with PROMPT (without a colon and |
98909
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
538 space) in the minibuffer. The optional argument DEFAULT-VALUE |
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
539 provides the value to display in the minibuffer prompt that is |
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
540 returned if the user just types RET. |
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
541 Values available via M-n are the string at point, the last isearch |
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
542 regexp, the last isearch string, and the last replacement regexp." |
97082
922b39c63813
(read-regexp): Add second arg `default'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
96908
diff
changeset
|
543 (let* ((defaults |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
544 (list (regexp-quote |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
545 (or (funcall (or find-tag-default-function |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
546 (get major-mode 'find-tag-default-function) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
547 'find-tag-default)) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
548 "")) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
549 (car regexp-search-ring) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
550 (regexp-quote (or (car search-ring) "")) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
551 (car (symbol-value |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
552 query-replace-from-history-variable)))) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
553 (defaults (delete-dups (delq nil (delete "" defaults)))) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
554 ;; Don't add automatically the car of defaults for empty input |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
555 (history-add-new-input nil) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
556 (input |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
557 (read-from-minibuffer |
98909
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
558 (if default-value |
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
559 (format "%s (default %s): " prompt |
5574362352ff
(read-regexp): Rename arg `default' to `default-value'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
98145
diff
changeset
|
560 (query-replace-descr default-value)) |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
561 (format "%s: " prompt)) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
562 nil nil nil 'regexp-history defaults t))) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
563 (if (equal input "") |
104244
97bc7c2be2d0
(read-regexp): Return empty string when `default-value' is nil.
Juri Linkov <juri@jurta.org>
parents:
102314
diff
changeset
|
564 (or default-value input) |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
565 (prog1 input |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
566 (add-to-history 'regexp-history input))))) |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
567 |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
568 |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2408
diff
changeset
|
569 (defalias 'delete-non-matching-lines 'keep-lines) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
570 (defalias 'delete-matching-lines 'flush-lines) |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
571 (defalias 'count-matches 'how-many) |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
572 |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
573 |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
574 (defun keep-lines-read-args (prompt) |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
575 "Read arguments for `keep-lines' and friends. |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
576 Prompt for a regexp with PROMPT. |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
577 Value is a list, (REGEXP)." |
104244
97bc7c2be2d0
(read-regexp): Return empty string when `default-value' is nil.
Juri Linkov <juri@jurta.org>
parents:
102314
diff
changeset
|
578 (list (read-regexp prompt) nil nil t)) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
579 |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
580 (defun keep-lines (regexp &optional rstart rend interactive) |
61 | 581 "Delete all lines except those containing matches for REGEXP. |
582 A match split across lines preserves all the lines it lies in. | |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
583 When called from Lisp (and usually interactively as well, see below) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
584 applies to all lines starting after point. |
23457
3ca22a873859
(keep-lines, flush-lines, how-many):
Richard M. Stallman <rms@gnu.org>
parents:
23384
diff
changeset
|
585 |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
586 If REGEXP contains upper case characters (excluding those preceded by `\\') |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
587 and `search-upper-case' is non-nil, the matching is case-sensitive. |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
588 |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
589 Second and third arg RSTART and REND specify the region to operate on. |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
590 This command operates on (the accessible part of) all lines whose |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
591 accessible part is entirely contained in the region determined by RSTART |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
592 and REND. (A newline ending a line counts as part of that line.) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
593 |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
594 Interactively, in Transient Mark mode when the mark is active, operate |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
595 on all lines whose accessible part is entirely contained in the region. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
596 Otherwise, the command applies to all lines starting after point. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
597 When calling this function from Lisp, you can pretend that it was |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
598 called interactively by passing a non-nil INTERACTIVE argument. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
599 |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
600 This function starts looking for the next match from the end of |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
601 the previous match. Hence, it ignores matches that overlap |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
602 a previously found match." |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
603 |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
604 (interactive |
46519
6de9114ee49a
(keep-lines, flush-lines): Interactively report
Richard M. Stallman <rms@gnu.org>
parents:
46335
diff
changeset
|
605 (progn |
6de9114ee49a
(keep-lines, flush-lines): Interactively report
Richard M. Stallman <rms@gnu.org>
parents:
46335
diff
changeset
|
606 (barf-if-buffer-read-only) |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
607 (keep-lines-read-args "Keep lines containing match for regexp"))) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
608 (if rstart |
46335
b4e553fa1fa8
(flush-lines, keep-lines): Convert REND to a marker.
Richard M. Stallman <rms@gnu.org>
parents:
46004
diff
changeset
|
609 (progn |
b4e553fa1fa8
(flush-lines, keep-lines): Convert REND to a marker.
Richard M. Stallman <rms@gnu.org>
parents:
46004
diff
changeset
|
610 (goto-char (min rstart rend)) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
611 (setq rend |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
612 (progn |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
613 (save-excursion |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
614 (goto-char (max rstart rend)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
615 (unless (or (bolp) (eobp)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
616 (forward-line 0)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
617 (point-marker))))) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
618 (if (and interactive transient-mark-mode mark-active) |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
619 (setq rstart (region-beginning) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
620 rend (progn |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
621 (goto-char (region-end)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
622 (unless (or (bolp) (eobp)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
623 (forward-line 0)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
624 (point-marker))) |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
625 (setq rstart (point) |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
626 rend (point-max-marker))) |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
627 (goto-char rstart)) |
61 | 628 (save-excursion |
629 (or (bolp) (forward-line 1)) | |
23457
3ca22a873859
(keep-lines, flush-lines, how-many):
Richard M. Stallman <rms@gnu.org>
parents:
23384
diff
changeset
|
630 (let ((start (point)) |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
631 (case-fold-search |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
632 (if (and case-fold-search search-upper-case) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
633 (isearch-no-upper-case-p regexp t) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
634 case-fold-search))) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
635 (while (< (point) rend) |
61 | 636 ;; Start is first char not preserved by previous match. |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
637 (if (not (re-search-forward regexp rend 'move)) |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
638 (delete-region start rend) |
61 | 639 (let ((end (save-excursion (goto-char (match-beginning 0)) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
640 (forward-line 0) |
61 | 641 (point)))) |
642 ;; Now end is first char preserved by the new match. | |
643 (if (< start end) | |
644 (delete-region start end)))) | |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
645 |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
646 (setq start (save-excursion (forward-line 1) (point))) |
61 | 647 ;; If the match was empty, avoid matching again at same place. |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
648 (and (< (point) rend) |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
649 (= (match-beginning 0) (match-end 0)) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
650 (forward-char 1))))) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
651 (set-marker rend nil) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
652 nil) |
61 | 653 |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
654 |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
655 (defun flush-lines (regexp &optional rstart rend interactive) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
656 "Delete lines containing matches for REGEXP. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
657 When called from Lisp (and usually when called interactively as |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
658 well, see below), applies to the part of the buffer after point. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
659 The line point is in is deleted if and only if it contains a |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
660 match for regexp starting after point. |
23457
3ca22a873859
(keep-lines, flush-lines, how-many):
Richard M. Stallman <rms@gnu.org>
parents:
23384
diff
changeset
|
661 |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
662 If REGEXP contains upper case characters (excluding those preceded by `\\') |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
663 and `search-upper-case' is non-nil, the matching is case-sensitive. |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
664 |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
665 Second and third arg RSTART and REND specify the region to operate on. |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
666 Lines partially contained in this region are deleted if and only if |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
667 they contain a match entirely contained in it. |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
668 |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
669 Interactively, in Transient Mark mode when the mark is active, operate |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
670 on the contents of the region. Otherwise, operate from point to the |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
671 end of (the accessible portion of) the buffer. When calling this function |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
672 from Lisp, you can pretend that it was called interactively by passing |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
673 a non-nil INTERACTIVE argument. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
674 |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
675 If a match is split across lines, all the lines it lies in are deleted. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
676 They are deleted _before_ looking for the next match. Hence, a match |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
677 starting on the same line at which another match ended is ignored." |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
678 |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
679 (interactive |
46519
6de9114ee49a
(keep-lines, flush-lines): Interactively report
Richard M. Stallman <rms@gnu.org>
parents:
46335
diff
changeset
|
680 (progn |
6de9114ee49a
(keep-lines, flush-lines): Interactively report
Richard M. Stallman <rms@gnu.org>
parents:
46335
diff
changeset
|
681 (barf-if-buffer-read-only) |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
682 (keep-lines-read-args "Flush lines containing match for regexp"))) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
683 (if rstart |
46335
b4e553fa1fa8
(flush-lines, keep-lines): Convert REND to a marker.
Richard M. Stallman <rms@gnu.org>
parents:
46004
diff
changeset
|
684 (progn |
b4e553fa1fa8
(flush-lines, keep-lines): Convert REND to a marker.
Richard M. Stallman <rms@gnu.org>
parents:
46004
diff
changeset
|
685 (goto-char (min rstart rend)) |
b4e553fa1fa8
(flush-lines, keep-lines): Convert REND to a marker.
Richard M. Stallman <rms@gnu.org>
parents:
46004
diff
changeset
|
686 (setq rend (copy-marker (max rstart rend)))) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
687 (if (and interactive transient-mark-mode mark-active) |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
688 (setq rstart (region-beginning) |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
689 rend (copy-marker (region-end))) |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
690 (setq rstart (point) |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
691 rend (point-max-marker))) |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
692 (goto-char rstart)) |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
693 (let ((case-fold-search |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
694 (if (and case-fold-search search-upper-case) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
695 (isearch-no-upper-case-p regexp t) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
696 case-fold-search))) |
23457
3ca22a873859
(keep-lines, flush-lines, how-many):
Richard M. Stallman <rms@gnu.org>
parents:
23384
diff
changeset
|
697 (save-excursion |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
698 (while (and (< (point) rend) |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
699 (re-search-forward regexp rend t)) |
23457
3ca22a873859
(keep-lines, flush-lines, how-many):
Richard M. Stallman <rms@gnu.org>
parents:
23384
diff
changeset
|
700 (delete-region (save-excursion (goto-char (match-beginning 0)) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
701 (forward-line 0) |
23457
3ca22a873859
(keep-lines, flush-lines, how-many):
Richard M. Stallman <rms@gnu.org>
parents:
23384
diff
changeset
|
702 (point)) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
703 (progn (forward-line 1) (point)))))) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
704 (set-marker rend nil) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
705 nil) |
61 | 706 |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
707 |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
708 (defun how-many (regexp &optional rstart rend interactive) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
709 "Print and return number of matches for REGEXP following point. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
710 When called from Lisp and INTERACTIVE is omitted or nil, just return |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
711 the number, do not print it; if INTERACTIVE is t, the function behaves |
99025
1a60a0445cab
* replace.el (how-many): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
98913
diff
changeset
|
712 in all respects as if it had been called interactively. |
23457
3ca22a873859
(keep-lines, flush-lines, how-many):
Richard M. Stallman <rms@gnu.org>
parents:
23384
diff
changeset
|
713 |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
714 If REGEXP contains upper case characters (excluding those preceded by `\\') |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
715 and `search-upper-case' is non-nil, the matching is case-sensitive. |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
716 |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
717 Second and third arg RSTART and REND specify the region to operate on. |
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
718 |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
719 Interactively, in Transient Mark mode when the mark is active, operate |
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
720 on the contents of the region. Otherwise, operate from point to the |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
721 end of (the accessible portion of) the buffer. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
722 |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
723 This function starts looking for the next match from the end of |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
724 the previous match. Hence, it ignores matches that overlap |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
725 a previously found match." |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
726 |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
727 (interactive |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
728 (keep-lines-read-args "How many matches for regexp")) |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
729 (save-excursion |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
730 (if rstart |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
731 (progn |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
732 (goto-char (min rstart rend)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
733 (setq rend (max rstart rend))) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
734 (if (and interactive transient-mark-mode mark-active) |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
735 (setq rstart (region-beginning) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
736 rend (region-end)) |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
737 (setq rstart (point) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
738 rend (point-max))) |
38040
79be85ef3a31
(keep-lines-read-args): Return just a regexp.
Richard M. Stallman <rms@gnu.org>
parents:
38036
diff
changeset
|
739 (goto-char rstart)) |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
740 (let ((count 0) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
741 opoint |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
742 (case-fold-search |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
743 (if (and case-fold-search search-upper-case) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
744 (isearch-no-upper-case-p regexp t) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
745 case-fold-search))) |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
746 (while (and (< (point) rend) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
747 (progn (setq opoint (point)) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
748 (re-search-forward regexp rend t))) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
749 (if (= opoint (point)) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
750 (forward-char 1) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
751 (setq count (1+ count)))) |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
752 (when interactive (message "%d occurrence%s" |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
753 count |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
754 (if (= count 1) "" "s"))) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
755 count))) |
32036
29b572780dea
(keep-lines-read-args): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
30562
diff
changeset
|
756 |
2408
a9c05a12b615
(regexp-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents:
2327
diff
changeset
|
757 |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
758 (defvar occur-mode-map |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
759 (let ((map (make-sparse-keymap))) |
67187
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
760 ;; We use this alternative name, so we can use \\[occur-mode-mouse-goto]. |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
761 (define-key map [mouse-2] 'occur-mode-mouse-goto) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
762 (define-key map "\C-c\C-c" 'occur-mode-goto-occurrence) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
763 (define-key map "\C-m" 'occur-mode-goto-occurrence) |
45444
84e0e49bfb75
(occur-engine): Increment globalcount all at once after searching a buffer.
Colin Walters <walters@gnu.org>
parents:
45308
diff
changeset
|
764 (define-key map "o" 'occur-mode-goto-occurrence-other-window) |
42294
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
765 (define-key map "\C-o" 'occur-mode-display-occurrence) |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
766 (define-key map "\M-n" 'occur-next) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
767 (define-key map "\M-p" 'occur-prev) |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
768 (define-key map "r" 'occur-rename-buffer) |
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
769 (define-key map "c" 'clone-buffer) |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
770 (define-key map "g" 'revert-buffer) |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
771 (define-key map "q" 'quit-window) |
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
772 (define-key map "z" 'kill-this-buffer) |
57023
cf85be0f7afa
(perform-replace): Use `query-replace-descr'.
Juri Linkov <juri@jurta.org>
parents:
56922
diff
changeset
|
773 (define-key map "\C-c\C-f" 'next-error-follow-minor-mode) |
86291
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
774 (define-key map [menu-bar] (make-sparse-keymap)) |
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
775 (define-key map [menu-bar occur] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
776 `(cons ,(purecopy "Occur") map)) |
86291
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
777 (define-key map [next-error-follow-minor-mode] |
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
778 (menu-bar-make-mm-toggle next-error-follow-minor-mode |
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
779 "Auto Occurrence Display" |
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
780 "Display another occurrence when moving the cursor")) |
105965
3f64b8380468
* textmodes/ispell.el (ispell-skip-region-alist):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105940
diff
changeset
|
781 (define-key map [separator-1] menu-bar-separator) |
100171 | 782 (define-key map [kill-this-buffer] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
783 `(menu-item ,(purecopy "Kill occur buffer") kill-this-buffer |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
784 :help ,(purecopy "Kill the current *Occur* buffer"))) |
100171 | 785 (define-key map [quit-window] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
786 `(menu-item ,(purecopy "Quit occur window") quit-window |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
787 :help ,(purecopy "Quit the current *Occur* buffer. Bury it, and maybe delete the selected frame"))) |
100171 | 788 (define-key map [revert-buffer] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
789 `(menu-item ,(purecopy "Revert occur buffer") revert-buffer |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
790 :help ,(purecopy "Replace the text in the *Occur* buffer with the results of rerunning occur"))) |
100171 | 791 (define-key map [clone-buffer] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
792 `(menu-item ,(purecopy "Clone occur buffer") clone-buffer |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
793 :help ,(purecopy "Create and return a twin copy of the current *Occur* buffer"))) |
100171 | 794 (define-key map [occur-rename-buffer] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
795 `(menu-item ,(purecopy "Rename occur buffer") occur-rename-buffer |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
796 :help ,(purecopy "Rename the current *Occur* buffer to *Occur: original-buffer-name*."))) |
105940
f7147d70f6ef
* subr.el (menu-bar-separator): New defconst.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105715
diff
changeset
|
797 (define-key map [separator-2] menu-bar-separator) |
86291
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
798 (define-key map [occur-mode-goto-occurrence-other-window] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
799 `(menu-item ,(purecopy "Go To Occurrence Other Window") occur-mode-goto-occurrence-other-window |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
800 :help ,(purecopy "Go to the occurrence the current line describes, in another window"))) |
86291
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
801 (define-key map [occur-mode-goto-occurrence] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
802 `(menu-item ,(purecopy "Go To Occurrence") occur-mode-goto-occurrence |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
803 :help ,(purecopy "Go to the occurrence the current line describes"))) |
86291
c92242b4fd11
(occur-mode-map): Add a major mode menu with entries
Dan Nicolaescu <dann@ics.uci.edu>
parents:
86238
diff
changeset
|
804 (define-key map [occur-mode-display-occurrence] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
805 `(menu-item ,(purecopy "Display Occurrence") occur-mode-display-occurrence |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
806 :help ,(purecopy "Display in another window the occurrence the current line describes"))) |
100171 | 807 (define-key map [occur-next] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
808 `(menu-item ,(purecopy "Move to next match") occur-next |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
809 :help ,(purecopy "Move to the Nth (default 1) next match in an Occur mode buffer"))) |
100171 | 810 (define-key map [occur-prev] |
105715
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
811 `(menu-item ,(purecopy "Move to previous match") occur-prev |
6b8dce5c4461
* puresize.h (BASE_PURESIZE): Increase to 1430000.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
104244
diff
changeset
|
812 :help ,(purecopy "Move to the Nth (default 1) previous match in an Occur mode buffer"))) |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
813 map) |
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
814 "Keymap for `occur-mode'.") |
61 | 815 |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
816 (defvar occur-revert-arguments nil |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
817 "Arguments to pass to `occur-1' to revert an Occur mode buffer. |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
818 See `occur-revert-function'.") |
61 | 819 |
47111
356bbdda5f67
(occur-mode-hook): New hook.
Juanma Barranquero <lekktu@gmail.com>
parents:
47087
diff
changeset
|
820 (defcustom occur-mode-hook '(turn-on-font-lock) |
356bbdda5f67
(occur-mode-hook): New hook.
Juanma Barranquero <lekktu@gmail.com>
parents:
47087
diff
changeset
|
821 "Hook run when entering Occur mode." |
356bbdda5f67
(occur-mode-hook): New hook.
Juanma Barranquero <lekktu@gmail.com>
parents:
47087
diff
changeset
|
822 :type 'hook |
356bbdda5f67
(occur-mode-hook): New hook.
Juanma Barranquero <lekktu@gmail.com>
parents:
47087
diff
changeset
|
823 :group 'matching) |
356bbdda5f67
(occur-mode-hook): New hook.
Juanma Barranquero <lekktu@gmail.com>
parents:
47087
diff
changeset
|
824 |
356bbdda5f67
(occur-mode-hook): New hook.
Juanma Barranquero <lekktu@gmail.com>
parents:
47087
diff
changeset
|
825 (defcustom occur-hook nil |
63970
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
826 "Hook run by Occur when there are any matches." |
45444
84e0e49bfb75
(occur-engine): Increment globalcount all at once after searching a buffer.
Colin Walters <walters@gnu.org>
parents:
45308
diff
changeset
|
827 :type 'hook |
84e0e49bfb75
(occur-engine): Increment globalcount all at once after searching a buffer.
Colin Walters <walters@gnu.org>
parents:
45308
diff
changeset
|
828 :group 'matching) |
84e0e49bfb75
(occur-engine): Increment globalcount all at once after searching a buffer.
Colin Walters <walters@gnu.org>
parents:
45308
diff
changeset
|
829 |
87919
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
830 (defcustom occur-mode-find-occurrence-hook nil |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
831 "Hook run by Occur after locating an occurrence. |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
832 This will be called with the cursor position at the occurrence. An application |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
833 for this is to reveal context in an outline-mode when the occurrence is hidden." |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
834 :type 'hook |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
835 :group 'matching) |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
836 |
17655
8e35bb3ec2e2
(occur-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17638
diff
changeset
|
837 (put 'occur-mode 'mode-class 'special) |
41329
040cb763bd64
(occur-mode): Undo 2001-5-20 change.
Richard M. Stallman <rms@gnu.org>
parents:
40925
diff
changeset
|
838 (defun occur-mode () |
61 | 839 "Major mode for output from \\[occur]. |
10266
a44beb55d3e1
(occur-mode-map): Bind C-m and `return' to occur-mode-goto-occurrence.
Richard M. Stallman <rms@gnu.org>
parents:
10157
diff
changeset
|
840 \\<occur-mode-map>Move point to one of the items in this buffer, then use |
a44beb55d3e1
(occur-mode-map): Bind C-m and `return' to occur-mode-goto-occurrence.
Richard M. Stallman <rms@gnu.org>
parents:
10157
diff
changeset
|
841 \\[occur-mode-goto-occurrence] to go to the occurrence that the item refers to. |
a44beb55d3e1
(occur-mode-map): Bind C-m and `return' to occur-mode-goto-occurrence.
Richard M. Stallman <rms@gnu.org>
parents:
10157
diff
changeset
|
842 Alternatively, click \\[occur-mode-mouse-goto] on an item to go to it. |
a44beb55d3e1
(occur-mode-map): Bind C-m and `return' to occur-mode-goto-occurrence.
Richard M. Stallman <rms@gnu.org>
parents:
10157
diff
changeset
|
843 |
61 | 844 \\{occur-mode-map}" |
47130
454f46344502
(occur-mode): Add interactive declaration.
Juanma Barranquero <lekktu@gmail.com>
parents:
47111
diff
changeset
|
845 (interactive) |
41329
040cb763bd64
(occur-mode): Undo 2001-5-20 change.
Richard M. Stallman <rms@gnu.org>
parents:
40925
diff
changeset
|
846 (kill-all-local-variables) |
040cb763bd64
(occur-mode): Undo 2001-5-20 change.
Richard M. Stallman <rms@gnu.org>
parents:
40925
diff
changeset
|
847 (use-local-map occur-mode-map) |
040cb763bd64
(occur-mode): Undo 2001-5-20 change.
Richard M. Stallman <rms@gnu.org>
parents:
40925
diff
changeset
|
848 (setq major-mode 'occur-mode) |
040cb763bd64
(occur-mode): Undo 2001-5-20 change.
Richard M. Stallman <rms@gnu.org>
parents:
40925
diff
changeset
|
849 (setq mode-name "Occur") |
37832
dd9ddcbf2b5f
(keep-lines-read-args): Use `copy-marker'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
37536
diff
changeset
|
850 (set (make-local-variable 'revert-buffer-function) 'occur-revert-function) |
47111
356bbdda5f67
(occur-mode-hook): New hook.
Juanma Barranquero <lekktu@gmail.com>
parents:
47087
diff
changeset
|
851 (make-local-variable 'occur-revert-arguments) |
47375
fe8ca2be9fde
(occur-mode): Add font-lock-defontify to change-major-mode-hook.
Richard M. Stallman <rms@gnu.org>
parents:
47204
diff
changeset
|
852 (add-hook 'change-major-mode-hook 'font-lock-defontify nil t) |
55067
b335edb455ad
From: Teodor Zlatanov <tzz@lifelogs.com>
Kim F. Storm <storm@cua.dk>
parents:
54778
diff
changeset
|
853 (setq next-error-function 'occur-next-error) |
62737
f5aef2123438
(occur-mode): Use run-mode-hooks.
Lute Kamstra <lute@gnu.org>
parents:
62458
diff
changeset
|
854 (run-mode-hooks 'occur-mode-hook)) |
61 | 855 |
16864
59ed508195a4
(occur-mode-map): Bind g to revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
16819
diff
changeset
|
856 (defun occur-revert-function (ignore1 ignore2) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
857 "Handle `revert-buffer' for Occur mode buffers." |
45265
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
858 (apply 'occur-1 (append occur-revert-arguments (list (buffer-name))))) |
16864
59ed508195a4
(occur-mode-map): Bind g to revert-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
16819
diff
changeset
|
859 |
6596
80df3b456672
(occur-mode-find-occurrence): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents:
6410
diff
changeset
|
860 (defun occur-mode-find-occurrence () |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
861 (let ((pos (get-text-property (point) 'occur-target))) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
862 (unless pos |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
863 (error "No occurrence on this line")) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
864 (unless (buffer-live-p (marker-buffer pos)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
865 (error "Buffer for this occurrence was killed")) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
866 pos)) |
6596
80df3b456672
(occur-mode-find-occurrence): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents:
6410
diff
changeset
|
867 |
67187
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
868 (defalias 'occur-mode-mouse-goto 'occur-mode-goto-occurrence) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
869 (defun occur-mode-goto-occurrence (&optional event) |
6596
80df3b456672
(occur-mode-find-occurrence): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents:
6410
diff
changeset
|
870 "Go to the occurrence the current line describes." |
67187
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
871 (interactive (list last-nonmenu-event)) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
872 (let ((pos |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
873 (if (null event) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
874 ;; Actually `event-end' works correctly with a nil argument as |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
875 ;; well, so we could dispense with this test, but let's not |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
876 ;; rely on this undocumented behavior. |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
877 (occur-mode-find-occurrence) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
878 (with-current-buffer (window-buffer (posn-window (event-end event))) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
879 (save-excursion |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
880 (goto-char (posn-point (event-end event))) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
881 (occur-mode-find-occurrence))))) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
882 same-window-buffer-names |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
883 same-window-regexps) |
67179
cfc0110bc143
* replace.el (occur-mode-goto-occurrence): Pop, don't switch.
Chong Yidong <cyd@stupidchicken.com>
parents:
66756
diff
changeset
|
884 (pop-to-buffer (marker-buffer pos)) |
87919
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
885 (goto-char pos) |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
886 (run-hooks 'occur-mode-find-occurrence-hook))) |
18918
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
887 |
42604
a49b37e22b38
(occur-mode-goto-occurrence-other-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
42430
diff
changeset
|
888 (defun occur-mode-goto-occurrence-other-window () |
a49b37e22b38
(occur-mode-goto-occurrence-other-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
42430
diff
changeset
|
889 "Go to the occurrence the current line describes, in another window." |
a49b37e22b38
(occur-mode-goto-occurrence-other-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
42430
diff
changeset
|
890 (interactive) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
891 (let ((pos (occur-mode-find-occurrence))) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
892 (switch-to-buffer-other-window (marker-buffer pos)) |
87919
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
893 (goto-char pos) |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
894 (run-hooks 'occur-mode-find-occurrence-hook))) |
42604
a49b37e22b38
(occur-mode-goto-occurrence-other-window): New command.
Richard M. Stallman <rms@gnu.org>
parents:
42430
diff
changeset
|
895 |
42294
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
896 (defun occur-mode-display-occurrence () |
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
897 "Display in another window the occurrence the current line describes." |
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
898 (interactive) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
899 (let ((pos (occur-mode-find-occurrence)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
900 window |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
901 ;; Bind these to ensure `display-buffer' puts it in another window. |
42294
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
902 same-window-buffer-names |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
903 same-window-regexps) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
904 (setq window (display-buffer (marker-buffer pos))) |
42294
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
905 ;; This is the way to set point in the proper window. |
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
906 (save-selected-window |
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
907 (select-window window) |
87919
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
908 (goto-char pos) |
5e627a8698d8
* replace.el (occur-mode-find-occurrence-hook): New hook that can
Carsten Dominik <dominik@science.uva.nl>
parents:
87649
diff
changeset
|
909 (run-hooks 'occur-mode-find-occurrence-hook)))) |
42294
d1c81a1250f2
(occur-mode-display-occurrence): New function.
Richard M. Stallman <rms@gnu.org>
parents:
41761
diff
changeset
|
910 |
47593
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
911 (defun occur-find-match (n search message) |
18918
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
912 (if (not n) (setq n 1)) |
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
913 (let ((r)) |
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
914 (while (> n 0) |
47593
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
915 (setq r (funcall search (point) 'occur-match)) |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
916 (and r |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
917 (get-text-property r 'occur-match) |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
918 (setq r (funcall search r 'occur-match))) |
18918
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
919 (if r |
47593
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
920 (goto-char r) |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
921 (error message)) |
18918
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
922 (setq n (1- n))))) |
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
923 |
47593
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
924 (defun occur-next (&optional n) |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
925 "Move to the Nth (default 1) next match in an Occur mode buffer." |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
926 (interactive "p") |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
927 (occur-find-match n #'next-single-property-change "No more matches")) |
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
928 |
18918
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
929 (defun occur-prev (&optional n) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
930 "Move to the Nth (default 1) previous match in an Occur mode buffer." |
18918
0e0935f23d39
(occur): Use text property `occur' to store the
Richard M. Stallman <rms@gnu.org>
parents:
18443
diff
changeset
|
931 (interactive "p") |
47593
b052c0d51fd4
(occur-find-match): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
47532
diff
changeset
|
932 (occur-find-match n #'previous-single-property-change "No earlier matches")) |
55067
b335edb455ad
From: Teodor Zlatanov <tzz@lifelogs.com>
Kim F. Storm <storm@cua.dk>
parents:
54778
diff
changeset
|
933 |
b335edb455ad
From: Teodor Zlatanov <tzz@lifelogs.com>
Kim F. Storm <storm@cua.dk>
parents:
54778
diff
changeset
|
934 (defun occur-next-error (&optional argp reset) |
b335edb455ad
From: Teodor Zlatanov <tzz@lifelogs.com>
Kim F. Storm <storm@cua.dk>
parents:
54778
diff
changeset
|
935 "Move to the Nth (default 1) next match in an Occur mode buffer. |
b335edb455ad
From: Teodor Zlatanov <tzz@lifelogs.com>
Kim F. Storm <storm@cua.dk>
parents:
54778
diff
changeset
|
936 Compatibility function for \\[next-error] invocations." |
b335edb455ad
From: Teodor Zlatanov <tzz@lifelogs.com>
Kim F. Storm <storm@cua.dk>
parents:
54778
diff
changeset
|
937 (interactive "p") |
58625
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
938 ;; we need to run occur-find-match from within the Occur buffer |
58995
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
939 (with-current-buffer |
59290
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
940 ;; Choose the buffer and make it current. |
58625
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
941 (if (next-error-buffer-p (current-buffer)) |
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
942 (current-buffer) |
59290
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
943 (next-error-find-buffer nil nil |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
944 (lambda () |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
945 (eq major-mode 'occur-mode)))) |
58995
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
946 |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
947 (goto-char (cond (reset (point-min)) |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
948 ((< argp 0) (line-beginning-position)) |
67180
8d028f859146
(occur-mode-mouse-goto): Pop, don't switch.
Juri Linkov <juri@jurta.org>
parents:
67179
diff
changeset
|
949 ((> argp 0) (line-end-position)) |
8d028f859146
(occur-mode-mouse-goto): Pop, don't switch.
Juri Linkov <juri@jurta.org>
parents:
67179
diff
changeset
|
950 ((point)))) |
58625
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
951 (occur-find-match |
58995
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
952 (abs argp) |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
953 (if (> 0 argp) |
58625
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
954 #'previous-single-property-change |
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
955 #'next-single-property-change) |
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
956 "No more matches") |
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
957 ;; In case the *Occur* buffer is visible in a nonselected window. |
76749
6a1a4e97079e
(occur-next-error): *Occur* might not be displayed in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
76466
diff
changeset
|
958 (let ((win (get-buffer-window (current-buffer) t))) |
6a1a4e97079e
(occur-next-error): *Occur* might not be displayed in the
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
76466
diff
changeset
|
959 (if win (set-window-point win (point)))) |
58625
31d0b9422d7b
simple.el (next-error-buffer-p): allow for inclusive and
Teodor Zlatanov <tzz@lifelogs.com>
parents:
58362
diff
changeset
|
960 (occur-mode-goto-occurrence))) |
2408
a9c05a12b615
(regexp-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents:
2327
diff
changeset
|
961 |
58987 | 962 (defface match |
963 '((((class color) (min-colors 88) (background light)) | |
78112
6ad309ee5f4e
* replace.el (match): Use yellow1 instead of yellow.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
77286
diff
changeset
|
964 :background "yellow1") |
58987 | 965 (((class color) (min-colors 88) (background dark)) |
64503
791fa2059b5e
(match): Use slightly more light RoyalBlue3 instead of dark RoyalBlue4.
Juri Linkov <juri@jurta.org>
parents:
64135
diff
changeset
|
966 :background "RoyalBlue3") |
76466
08ea848cd1f3
(match): Use yellow background on light-bg terminals.
Richard M. Stallman <rms@gnu.org>
parents:
76392
diff
changeset
|
967 (((class color) (min-colors 8) (background light)) |
08ea848cd1f3
(match): Use yellow background on light-bg terminals.
Richard M. Stallman <rms@gnu.org>
parents:
76392
diff
changeset
|
968 :background "yellow" :foreground "black") |
08ea848cd1f3
(match): Use yellow background on light-bg terminals.
Richard M. Stallman <rms@gnu.org>
parents:
76392
diff
changeset
|
969 (((class color) (min-colors 8) (background dark)) |
58987 | 970 :background "blue" :foreground "white") |
971 (((type tty) (class mono)) | |
972 :inverse-video t) | |
973 (t :background "gray")) | |
974 "Face used to highlight matches permanently." | |
975 :group 'matching | |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59570
diff
changeset
|
976 :version "22.1") |
58987 | 977 |
17664
d8cb277f0ce8
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17655
diff
changeset
|
978 (defcustom list-matching-lines-default-context-lines 0 |
100171 | 979 "Default number of context lines included around `list-matching-lines' matches. |
29051 | 980 A negative number means to include that many lines before the match. |
17664
d8cb277f0ce8
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17655
diff
changeset
|
981 A positive number means to include that many lines both before and after." |
d8cb277f0ce8
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17655
diff
changeset
|
982 :type 'integer |
d8cb277f0ce8
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17655
diff
changeset
|
983 :group 'matching) |
61 | 984 |
2571
b65cf676a09b
All fsets changed to defaliases.
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2408
diff
changeset
|
985 (defalias 'list-matching-lines 'occur) |
61 | 986 |
58987 | 987 (defcustom list-matching-lines-face 'match |
100171 | 988 "Face used by \\[list-matching-lines] to show the text that matches. |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
989 If the value is nil, don't highlight the matching portions specially." |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
990 :type 'face |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
991 :group 'matching) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
992 |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
993 (defcustom list-matching-lines-buffer-name-face 'underline |
100171 | 994 "Face used by \\[list-matching-lines] to show the names of buffers. |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
995 If the value is nil, don't highlight the buffer names specially." |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
996 :type 'face |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
997 :group 'matching) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
998 |
66756
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
999 (defcustom occur-excluded-properties |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1000 '(read-only invisible intangible field mouse-face help-echo local-map keymap |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1001 yank-handler follow-link) |
100171 | 1002 "Text properties to discard when copying lines to the *Occur* buffer. |
66756
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1003 The value should be a list of text properties to discard or t, |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1004 which means to discard all text properties." |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1005 :type '(choice (const :tag "All" t) (repeat symbol)) |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1006 :group 'matching |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1007 :version "22.1") |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1008 |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1009 (defun occur-read-primary-args () |
97082
922b39c63813
(read-regexp): Add second arg `default'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
96908
diff
changeset
|
1010 (list (read-regexp "List lines matching regexp" |
922b39c63813
(read-regexp): Add second arg `default'. Doc fix.
Juri Linkov <juri@jurta.org>
parents:
96908
diff
changeset
|
1011 (car regexp-history)) |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
1012 (when current-prefix-arg |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
1013 (prefix-numeric-value current-prefix-arg)))) |
16818
6de559d0b20f
(list-matching-lines-face): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16758
diff
changeset
|
1014 |
64135
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1015 (defun occur-rename-buffer (&optional unique-p interactive-p) |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1016 "Rename the current *Occur* buffer to *Occur: original-buffer-name*. |
107652
861199fb7574
* replace.el (occur-accumulate-lines): Fix a bug where the first
Juri Linkov <juri@jurta.org>
parents:
107476
diff
changeset
|
1017 Here `original-buffer-name' is the buffer name where Occur was originally run. |
64135
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1018 When given the prefix argument, or called non-interactively, the renaming |
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1019 will not clobber the existing buffer(s) of that name, but use |
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1020 `generate-new-buffer-name' instead. You can add this to `occur-hook' |
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1021 if you always want a separate *Occur* buffer for each buffer where you |
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1022 invoke `occur'." |
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1023 (interactive "P\np") |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1024 (with-current-buffer |
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1025 (if (eq major-mode 'occur-mode) (current-buffer) (get-buffer "*Occur*")) |
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1026 (rename-buffer (concat "*Occur: " |
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1027 (mapconcat #'buffer-name |
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1028 (car (cddr occur-revert-arguments)) "/") |
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1029 "*") |
64135
fe83c61c82da
(occur-rename-buffer): Use `generate-new-buffer' also when called
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1030 (or unique-p (not interactive-p))))) |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1031 |
61 | 1032 (defun occur (regexp &optional nlines) |
1427
c49077849583
(occur): Always search entire buffer.
Richard M. Stallman <rms@gnu.org>
parents:
866
diff
changeset
|
1033 "Show all lines in the current buffer containing a match for REGEXP. |
107476
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1034 If a match spreads across multiple lines, all those lines are shown. |
260 | 1035 |
1036 Each line is displayed with NLINES lines before and after, or -NLINES | |
1037 before if NLINES is negative. | |
1038 NLINES defaults to `list-matching-lines-default-context-lines'. | |
61 | 1039 Interactively it is the prefix arg. |
1040 | |
2408
a9c05a12b615
(regexp-history): New history list.
Richard M. Stallman <rms@gnu.org>
parents:
2327
diff
changeset
|
1041 The lines are shown in a buffer named `*Occur*'. |
61 | 1042 It serves as a menu to find any of the occurrences in this buffer. |
17655
8e35bb3ec2e2
(occur-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17638
diff
changeset
|
1043 \\<occur-mode-map>\\[describe-mode] in that buffer will explain how. |
17638
9ece72836276
(occur): If regexp has uppercase in it, match it case-sensitively.
Richard M. Stallman <rms@gnu.org>
parents:
17211
diff
changeset
|
1044 |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1045 If REGEXP contains upper case characters (excluding those preceded by `\\') |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1046 and `search-upper-case' is non-nil, the matching is case-sensitive." |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1047 (interactive (occur-read-primary-args)) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1048 (occur-1 regexp nlines (list (current-buffer)))) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1049 |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1050 (defun multi-occur (bufs regexp &optional nlines) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1051 "Show all lines in buffers BUFS containing a match for REGEXP. |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1052 This function acts on multiple buffers; otherwise, it is exactly like |
68504
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1053 `occur'. When you invoke this command interactively, you must specify |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1054 the buffer names that you want, one by one." |
15040
04f81516b6e0
(occur): Fix up interactive code.
Richard M. Stallman <rms@gnu.org>
parents:
14819
diff
changeset
|
1055 (interactive |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1056 (cons |
47204
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1057 (let* ((bufs (list (read-buffer "First buffer to search: " |
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1058 (current-buffer) t))) |
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1059 (buf nil) |
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1060 (ido-ignore-item-temp-list bufs)) |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1061 (while (not (string-equal |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48276
diff
changeset
|
1062 (setq buf (read-buffer |
47204
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1063 (if (eq read-buffer-function 'ido-read-buffer) |
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1064 "Next buffer to search (C-j to end): " |
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1065 "Next buffer to search (RET to end): ") |
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1066 nil t)) |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1067 "")) |
47204
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1068 (add-to-list 'bufs buf) |
539aabdebd62
(multi-occur): Made "ido-aware":
Kim F. Storm <storm@cua.dk>
parents:
47130
diff
changeset
|
1069 (setq ido-ignore-item-temp-list bufs)) |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1070 (nreverse (mapcar #'get-buffer bufs))) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1071 (occur-read-primary-args))) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1072 (occur-1 regexp nlines bufs)) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1073 |
68504
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1074 (defun multi-occur-in-matching-buffers (bufregexp regexp &optional allbufs) |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1075 "Show all lines matching REGEXP in buffers specified by BUFREGEXP. |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1076 Normally BUFREGEXP matches against each buffer's visited file name, |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1077 but if you specify a prefix argument, it matches against the buffer name. |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1078 See also `multi-occur'." |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1079 (interactive |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1080 (cons |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1081 (let* ((default (car regexp-history)) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1082 (input |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1083 (read-from-minibuffer |
68536
4bad00cd1b68
(multi-occur-in-matching-buffers): Fix prev change.
Richard M. Stallman <rms@gnu.org>
parents:
68504
diff
changeset
|
1084 (if current-prefix-arg |
68504
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1085 "List lines in buffers whose names match regexp: " |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1086 "List lines in buffers whose filenames match regexp: ") |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1087 nil |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1088 nil |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1089 nil |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1090 'regexp-history))) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1091 (if (equal input "") |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1092 default |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1093 input)) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1094 (occur-read-primary-args))) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1095 (when bufregexp |
68536
4bad00cd1b68
(multi-occur-in-matching-buffers): Fix prev change.
Richard M. Stallman <rms@gnu.org>
parents:
68504
diff
changeset
|
1096 (occur-1 regexp nil |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1097 (delq nil |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1098 (mapcar (lambda (buf) |
68504
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1099 (when (if allbufs |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1100 (string-match bufregexp |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1101 (buffer-name buf)) |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1102 (and (buffer-file-name buf) |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1103 (string-match bufregexp |
5e010e843834
(multi-occur): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
67839
diff
changeset
|
1104 (buffer-file-name buf)))) |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1105 buf)) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1106 (buffer-list)))))) |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1107 |
45265
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
1108 (defun occur-1 (regexp nlines bufs &optional buf-name) |
94525
dea0b823c8e2
(occur-read-primary-args): Set default to the car of
Juri Linkov <juri@jurta.org>
parents:
93121
diff
changeset
|
1109 (unless (and regexp (not (equal regexp ""))) |
dea0b823c8e2
(occur-read-primary-args): Set default to the car of
Juri Linkov <juri@jurta.org>
parents:
93121
diff
changeset
|
1110 (error "Occur doesn't work with the empty regexp")) |
45265
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
1111 (unless buf-name |
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
1112 (setq buf-name "*Occur*")) |
59290
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1113 (let (occur-buf |
45079
bf76420e3297
(occur-mode-map): Bind "q" to `delete-window'.
Colin Walters <walters@gnu.org>
parents:
45078
diff
changeset
|
1114 (active-bufs (delq nil (mapcar #'(lambda (buf) |
bf76420e3297
(occur-mode-map): Bind "q" to `delete-window'.
Colin Walters <walters@gnu.org>
parents:
45078
diff
changeset
|
1115 (when (buffer-live-p buf) buf)) |
bf76420e3297
(occur-mode-map): Bind "q" to `delete-window'.
Colin Walters <walters@gnu.org>
parents:
45078
diff
changeset
|
1116 bufs)))) |
bf76420e3297
(occur-mode-map): Bind "q" to `delete-window'.
Colin Walters <walters@gnu.org>
parents:
45078
diff
changeset
|
1117 ;; Handle the case where one of the buffers we're searching is the |
59290
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1118 ;; output buffer. Just rename it. |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1119 (when (member buf-name (mapcar 'buffer-name active-bufs)) |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1120 (with-current-buffer (get-buffer buf-name) |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1121 (rename-uniquely))) |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1122 |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1123 ;; Now find or create the output buffer. |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1124 ;; If we just renamed that buffer, we will make a new one here. |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1125 (setq occur-buf (get-buffer-create buf-name)) |
285e069cecd2
(occur-1): If the output buffer is also an input, don't kill it, rename it.
Richard M. Stallman <rms@gnu.org>
parents:
59029
diff
changeset
|
1126 |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1127 (with-current-buffer occur-buf |
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1128 (occur-mode) |
76392
8d2b12834458
(occur-engine): buffer-undo-list binding moved...
Chong Yidong <cyd@stupidchicken.com>
parents:
76252
diff
changeset
|
1129 (let ((inhibit-read-only t) |
8d2b12834458
(occur-engine): buffer-undo-list binding moved...
Chong Yidong <cyd@stupidchicken.com>
parents:
76252
diff
changeset
|
1130 ;; Don't generate undo entries for creation of the initial contents. |
8d2b12834458
(occur-engine): buffer-undo-list binding moved...
Chong Yidong <cyd@stupidchicken.com>
parents:
76252
diff
changeset
|
1131 (buffer-undo-list t)) |
62147
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1132 (erase-buffer) |
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1133 (let ((count (occur-engine |
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1134 regexp active-bufs occur-buf |
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1135 (or nlines list-matching-lines-default-context-lines) |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1136 (if (and case-fold-search search-upper-case) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1137 (isearch-no-upper-case-p regexp t) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1138 case-fold-search) |
62147
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1139 list-matching-lines-buffer-name-face |
66756
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1140 nil list-matching-lines-face |
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1141 (not (eq occur-excluded-properties t))))) |
62147
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1142 (let* ((bufcount (length active-bufs)) |
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1143 (diff (- (length bufs) bufcount))) |
107449
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1144 (message "Searched %d buffer%s%s; %s match%s%s" |
62147
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1145 bufcount (if (= bufcount 1) "" "s") |
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1146 (if (zerop diff) "" (format " (%d killed)" diff)) |
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1147 (if (zerop count) "no" (format "%d" count)) |
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1148 (if (= count 1) "" "es") |
107449
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1149 ;; Don't display regexp if with remaining text |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1150 ;; it is longer than window-width. |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1151 (if (> (+ (length regexp) 42) (window-width)) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1152 "" (format " for `%s'" (query-replace-descr regexp))))) |
62147
94214f10d9c4
(occur-1): Bind inhibit-read-only so that erase-buffer doesn't barf
Eli Zaretskii <eliz@gnu.org>
parents:
60713
diff
changeset
|
1153 (setq occur-revert-arguments (list regexp nlines bufs)) |
63970
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
1154 (if (= count 0) |
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
1155 (kill-buffer occur-buf) |
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
1156 (display-buffer occur-buf) |
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
1157 (setq next-error-last-buffer occur-buf) |
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
1158 (setq buffer-read-only t) |
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
1159 (set-buffer-modified-p nil) |
01120e702316
(occur-hook): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
63919
diff
changeset
|
1160 (run-hooks 'occur-hook))))))) |
18991
2cf48aa123b8
(occur): Local variable line-start redundant.
Richard M. Stallman <rms@gnu.org>
parents:
18918
diff
changeset
|
1161 |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1162 (defun occur-engine (regexp buffers out-buf nlines case-fold-search |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1163 title-face prefix-face match-face keep-props) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1164 (with-current-buffer out-buf |
48276
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1165 (let ((globalcount 0) |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1166 (coding nil)) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1167 ;; Map over all the buffers |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1168 (dolist (buf buffers) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1169 (when (buffer-live-p buf) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1170 (let ((matches 0) ;; count of matched lines |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1171 (lines 1) ;; line count |
107653
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1172 (prev-after-lines nil) ;; context lines of prev match |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1173 (prev-lines nil) ;; line number of prev match endpt |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1174 (matchbeg 0) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1175 (origpt nil) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1176 (begpt nil) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1177 (endpt nil) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1178 (marker nil) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1179 (curstring "") |
107653
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1180 (ret nil) |
70349
71e8fc4fc523
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-261
Miles Bader <miles@gnu.org>
parents:
68651
diff
changeset
|
1181 (inhibit-field-text-motion t) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1182 (headerpt (with-current-buffer out-buf (point)))) |
67187
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1183 (with-current-buffer buf |
48276
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1184 (or coding |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1185 ;; Set CODING only if the current buffer locally |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1186 ;; binds buffer-file-coding-system. |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1187 (not (local-variable-p 'buffer-file-coding-system)) |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1188 (setq coding buffer-file-coding-system)) |
44794
3b95c81de514
(toplevel): Require `cl' while compiling.
Colin Walters <walters@gnu.org>
parents:
44138
diff
changeset
|
1189 (save-excursion |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1190 (goto-char (point-min)) ;; begin searching in the buffer |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1191 (while (not (eobp)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1192 (setq origpt (point)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1193 (when (setq endpt (re-search-forward regexp nil t)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1194 (setq matches (1+ matches)) ;; increment match count |
56350
cae4ae1c68a9
(query-replace-interactive, query-replace-read-args):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56328
diff
changeset
|
1195 (setq matchbeg (match-beginning 0)) |
107476
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1196 ;; Get beginning of first match line and end of the last. |
58995
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1197 (save-excursion |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1198 (goto-char matchbeg) |
107476
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1199 (setq begpt (line-beginning-position)) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1200 (goto-char endpt) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1201 (setq endpt (line-end-position))) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1202 ;; Sum line numbers up to the first match line. |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1203 (setq lines (+ lines (count-lines origpt begpt))) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1204 (setq marker (make-marker)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1205 (set-marker marker matchbeg) |
107475
7913a8c227bd
* replace.el (occur-engine-line): Add optional arg `keep-props'.
Juri Linkov <juri@jurta.org>
parents:
107468
diff
changeset
|
1206 (setq curstring (occur-engine-line begpt endpt keep-props)) |
66756
670149b47c39
(occur-excluded-properties): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
66720
diff
changeset
|
1207 ;; Highlight the matches |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1208 (let ((len (length curstring)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1209 (start 0)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1210 (while (and (< start len) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1211 (string-match regexp curstring start)) |
58995
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1212 (add-text-properties |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1213 (match-beginning 0) (match-end 0) |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1214 (append |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1215 `(occur-match t) |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1216 (when match-face |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1217 ;; Use `face' rather than `font-lock-face' here |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1218 ;; so as to override faces copied from the buffer. |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1219 `(face ,match-face))) |
feb3eb61d019
(occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
58987
diff
changeset
|
1220 curstring) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1221 (setq start (match-end 0)))) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1222 ;; Generate the string to insert for this match |
107476
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1223 (let* ((match-prefix |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1224 ;; Using 7 digits aligns tabs properly. |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1225 (apply #'propertize (format "%7d:" lines) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1226 (append |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1227 (when prefix-face |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1228 `(font-lock-face prefix-face)) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1229 `(occur-prefix t mouse-face (highlight) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1230 occur-target ,marker follow-link t |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1231 help-echo "mouse-2: go to this occurrence")))) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1232 (match-str |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1233 ;; We don't put `mouse-face' on the newline, |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1234 ;; because that loses. And don't put it |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1235 ;; on context lines to reduce flicker. |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1236 (propertize curstring 'mouse-face (list 'highlight) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1237 'occur-target marker |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1238 'follow-link t |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1239 'help-echo |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1240 "mouse-2: go to this occurrence")) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1241 (out-line |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1242 (concat |
107476
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1243 match-prefix |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1244 ;; Add non-numeric prefix to all non-first lines |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1245 ;; of multi-line matches. |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1246 (replace-regexp-in-string |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1247 "\n" |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1248 "\n :" |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1249 match-str) |
66720
f41b7662a7a5
(occur-engine): Add marker at end of line, too.
Romain Francoise <romain@orebokech.com>
parents:
66537
diff
changeset
|
1250 ;; Add marker at eol, but no mouse props. |
f41b7662a7a5
(occur-engine): Add marker at end of line, too.
Romain Francoise <romain@orebokech.com>
parents:
66537
diff
changeset
|
1251 (propertize "\n" 'occur-target marker))) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1252 (data |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1253 (if (= nlines 0) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1254 ;; The simple display style |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1255 out-line |
87529
56186447f050
(occur-context-lines): New subroutine, broken out of occur-engine.
Richard M. Stallman <rms@gnu.org>
parents:
87453
diff
changeset
|
1256 ;; The complex multi-line display style. |
107653
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1257 (setq ret (occur-context-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1258 out-line nlines keep-props begpt endpt |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1259 lines prev-lines prev-after-lines)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1260 ;; Set first elem of the returned list to `data', |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1261 ;; and the second elem to `prev-after-lines'. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1262 (setq prev-after-lines (nth 1 ret)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1263 (nth 0 ret)))) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1264 ;; Actually insert the match display data |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1265 (with-current-buffer out-buf |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1266 (let ((beg (point)) |
107653
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1267 (end (progn (insert data) (point))))))) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1268 (goto-char endpt)) |
45265
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
1269 (if endpt |
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
1270 (progn |
107476
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1271 ;; Sum line numbers between first and last match lines. |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1272 (setq lines (+ lines (count-lines begpt endpt) |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1273 ;; Add 1 for empty last match line since |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1274 ;; count-lines returns 1 line less. |
dc9e20df2b90
Implement Occur multi-line matches.
Juri Linkov <juri@jurta.org>
parents:
107475
diff
changeset
|
1275 (if (and (bolp) (eolp)) 1 0))) |
45265
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
1276 ;; On to the next match... |
06efd7086835
(occur-1): New optional argument `buf-name'.
Colin Walters <walters@gnu.org>
parents:
45255
diff
changeset
|
1277 (forward-line 1)) |
107653
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1278 (goto-char (point-max))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1279 (setq prev-lines (1- lines))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1280 ;; Flush remaining context after-lines. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1281 (when prev-after-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1282 (with-current-buffer out-buf |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1283 (insert (apply #'concat (occur-engine-add-prefix |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1284 prev-after-lines))))))) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1285 (when (not (zerop matches)) ;; is the count zero? |
45444
84e0e49bfb75
(occur-engine): Increment globalcount all at once after searching a buffer.
Colin Walters <walters@gnu.org>
parents:
45308
diff
changeset
|
1286 (setq globalcount (+ globalcount matches)) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1287 (with-current-buffer out-buf |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1288 (goto-char headerpt) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1289 (let ((beg (point)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1290 end) |
107449
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1291 (insert (format "%d match%s%s in buffer: %s\n" |
54778
edec41928fc8
* replace.el (occur-engine): Distinguish between one and several
John Paul Wallington <jpw@pobox.com>
parents:
54375
diff
changeset
|
1292 matches (if (= matches 1) "" "es") |
107449
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1293 ;; Don't display regexp for multi-buffer. |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1294 (if (> (length buffers) 1) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1295 "" (format " for \"%s\"" |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1296 (query-replace-descr regexp))) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1297 (buffer-name buf))) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1298 (setq end (point)) |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1299 (add-text-properties beg end |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1300 (append |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1301 (when title-face |
45689
01fbc1331841
(occur-mode): Don't set up categories.
Colin Walters <walters@gnu.org>
parents:
45529
diff
changeset
|
1302 `(font-lock-face ,title-face)) |
01fbc1331841
(occur-mode): Don't set up categories.
Colin Walters <walters@gnu.org>
parents:
45529
diff
changeset
|
1303 `(occur-title ,buf)))) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1304 (goto-char (point-min))))))) |
107449
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1305 ;; Display total match count and regexp for multi-buffer. |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1306 (when (and (not (zerop globalcount)) (> (length buffers) 1)) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1307 (goto-char (point-min)) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1308 (let ((beg (point)) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1309 end) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1310 (insert (format "%d match%s total for \"%s\":\n" |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1311 globalcount (if (= globalcount 1) "" "es") |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1312 (query-replace-descr regexp))) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1313 (setq end (point)) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1314 (add-text-properties beg end (when title-face |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1315 `(font-lock-face ,title-face)))) |
e64817c0ab40
Fix message of multi-line occur regexps and multi-buffer header lines.
Juri Linkov <juri@jurta.org>
parents:
107417
diff
changeset
|
1316 (goto-char (point-min))) |
48276
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1317 (if coding |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1318 ;; CODING is buffer-file-coding-system of the first buffer |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1319 ;; that locally binds it. Let's use it also for the output |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1320 ;; buffer. |
3a5bc7e171a5
(occur-engine): Set buffer-file-coding-system of
Kenichi Handa <handa@m17n.org>
parents:
48173
diff
changeset
|
1321 (set-buffer-file-coding-system coding)) |
44924
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1322 ;; Return the number of matches |
4a1d60fe2473
(occur-accumulate-lines): Avoid incf and decf.
Richard M. Stallman <rms@gnu.org>
parents:
44865
diff
changeset
|
1323 globalcount))) |
18991
2cf48aa123b8
(occur): Local variable line-start redundant.
Richard M. Stallman <rms@gnu.org>
parents:
18918
diff
changeset
|
1324 |
107475
7913a8c227bd
* replace.el (occur-engine-line): Add optional arg `keep-props'.
Juri Linkov <juri@jurta.org>
parents:
107468
diff
changeset
|
1325 (defun occur-engine-line (beg end &optional keep-props) |
107468
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1326 (if (and keep-props (if (boundp 'jit-lock-mode) jit-lock-mode) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1327 (text-property-not-all beg end 'fontified t)) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1328 (if (fboundp 'jit-lock-fontify-now) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1329 (jit-lock-fontify-now beg end))) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1330 (if (and keep-props (not (eq occur-excluded-properties t))) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1331 (let ((str (buffer-substring beg end))) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1332 (remove-list-of-text-properties |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1333 0 (length str) occur-excluded-properties str) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1334 str) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1335 (buffer-substring-no-properties beg end))) |
008c1c06812b
* replace.el (occur-accumulate-lines, occur-engine):
Juri Linkov <juri@jurta.org>
parents:
107449
diff
changeset
|
1336 |
107656
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1337 (defun occur-engine-add-prefix (lines) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1338 (mapcar |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1339 #'(lambda (line) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1340 (concat " :" line "\n")) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1341 lines)) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1342 |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1343 (defun occur-accumulate-lines (count &optional keep-props pt) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1344 (save-excursion |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1345 (when pt |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1346 (goto-char pt)) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1347 (let ((forwardp (> count 0)) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1348 result beg end moved) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1349 (while (not (or (zerop count) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1350 (if forwardp |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1351 (eobp) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1352 (and (bobp) (not moved))))) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1353 (setq count (+ count (if forwardp -1 1))) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1354 (setq beg (line-beginning-position) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1355 end (line-end-position)) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1356 (push (occur-engine-line beg end keep-props) result) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1357 (setq moved (= 0 (forward-line (if forwardp 1 -1))))) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1358 (nreverse result)))) |
a788d758fe0a
* replace.el (occur-accumulate-lines): Move occur-engine related
Juri Linkov <juri@jurta.org>
parents:
107653
diff
changeset
|
1359 |
87529
56186447f050
(occur-context-lines): New subroutine, broken out of occur-engine.
Richard M. Stallman <rms@gnu.org>
parents:
87453
diff
changeset
|
1360 ;; Generate context display for occur. |
56186447f050
(occur-context-lines): New subroutine, broken out of occur-engine.
Richard M. Stallman <rms@gnu.org>
parents:
87453
diff
changeset
|
1361 ;; OUT-LINE is the line where the match is. |
56186447f050
(occur-context-lines): New subroutine, broken out of occur-engine.
Richard M. Stallman <rms@gnu.org>
parents:
87453
diff
changeset
|
1362 ;; NLINES and KEEP-PROPS are args to occur-engine. |
107653
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1363 ;; LINES is line count of the current match, |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1364 ;; PREV-LINES is line count of the previous match, |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1365 ;; PREV-AFTER-LINES is a list of after-context lines of the previous match. |
87529
56186447f050
(occur-context-lines): New subroutine, broken out of occur-engine.
Richard M. Stallman <rms@gnu.org>
parents:
87453
diff
changeset
|
1366 ;; Generate a list of lines, add prefixes to all but OUT-LINE, |
56186447f050
(occur-context-lines): New subroutine, broken out of occur-engine.
Richard M. Stallman <rms@gnu.org>
parents:
87453
diff
changeset
|
1367 ;; then concatenate them all together. |
107653
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1368 (defun occur-context-lines (out-line nlines keep-props begpt endpt |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1369 lines prev-lines prev-after-lines) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1370 ;; Find after- and before-context lines of the current match. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1371 (let ((before-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1372 (nreverse (cdr (occur-accumulate-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1373 (- (1+ (abs nlines))) keep-props begpt)))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1374 (after-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1375 (cdr (occur-accumulate-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1376 (1+ nlines) keep-props endpt))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1377 separator) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1378 |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1379 ;; Combine after-lines of the previous match |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1380 ;; with before-lines of the current match. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1381 |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1382 (when prev-after-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1383 ;; Don't overlap prev after-lines with current before-lines. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1384 (if (>= (+ prev-lines (length prev-after-lines)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1385 (- lines (length before-lines))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1386 (setq prev-after-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1387 (butlast prev-after-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1388 (- (length prev-after-lines) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1389 (- lines prev-lines (length before-lines) 1)))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1390 ;; Separate non-overlapping context lines with a dashed line. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1391 (setq separator "-------\n"))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1392 |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1393 (when prev-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1394 ;; Don't overlap current before-lines with previous match line. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1395 (if (<= (- lines (length before-lines)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1396 prev-lines) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1397 (setq before-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1398 (nthcdr (- (length before-lines) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1399 (- lines prev-lines 1)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1400 before-lines)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1401 ;; Separate non-overlapping before-context lines. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1402 (unless (> nlines 0) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1403 (setq separator "-------\n")))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1404 |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1405 (list |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1406 ;; Return a list where the first element is the output line. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1407 (apply #'concat |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1408 (append |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1409 (and prev-after-lines |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1410 (occur-engine-add-prefix prev-after-lines)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1411 (and separator (list separator)) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1412 (occur-engine-add-prefix before-lines) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1413 (list out-line))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1414 ;; And the second element is the list of context after-lines. |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1415 (if (> nlines 0) after-lines)))) |
bfde3c2dbef5
Make occur handle multi-line matches cleanly with context.
Juri Linkov <juri@jurta.org>
parents:
107652
diff
changeset
|
1416 |
61 | 1417 |
2080
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1418 ;; It would be nice to use \\[...], but there is no reasonable way |
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1419 ;; to make that display both SPC and Y. |
61 | 1420 (defconst query-replace-help |
1421 "Type Space or `y' to replace one match, Delete or `n' to skip to next, | |
5337
0740b2a454d9
(query-replace-map): Don't bind ESC.
Richard M. Stallman <rms@gnu.org>
parents:
5298
diff
changeset
|
1422 RET or `q' to exit, Period to replace one match and exit, |
61 | 1423 Comma to replace but not move point immediately, |
1424 C-r to enter recursive edit (\\[exit-recursive-edit] to get out again), | |
1425 C-w to delete match and recursive edit, | |
1426 C-l to clear the screen, redisplay, and offer same replacement again, | |
1427 ! to replace all remaining matches with no more questions, | |
28801
be3f5fa41e90
(query-replace-map): Add binding for `E'.
Gerd Moellmann <gerd@gnu.org>
parents:
28706
diff
changeset
|
1428 ^ to move point back to previous match, |
be3f5fa41e90
(query-replace-map): Add binding for `E'.
Gerd Moellmann <gerd@gnu.org>
parents:
28706
diff
changeset
|
1429 E to edit the replacement string" |
38036
018637678f29
(case-replace, query-replace-from-history-variable)
Eli Zaretskii <eliz@gnu.org>
parents:
37832
diff
changeset
|
1430 "Help message while in `query-replace'.") |
61 | 1431 |
67187
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1432 (defvar query-replace-map |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1433 (let ((map (make-sparse-keymap))) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1434 (define-key map " " 'act) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1435 (define-key map "\d" 'skip) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1436 (define-key map [delete] 'skip) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1437 (define-key map [backspace] 'skip) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1438 (define-key map "y" 'act) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1439 (define-key map "n" 'skip) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1440 (define-key map "Y" 'act) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1441 (define-key map "N" 'skip) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1442 (define-key map "e" 'edit-replacement) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1443 (define-key map "E" 'edit-replacement) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1444 (define-key map "," 'act-and-show) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1445 (define-key map "q" 'exit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1446 (define-key map "\r" 'exit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1447 (define-key map [return] 'exit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1448 (define-key map "." 'act-and-exit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1449 (define-key map "\C-r" 'edit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1450 (define-key map "\C-w" 'delete-and-edit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1451 (define-key map "\C-l" 'recenter) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1452 (define-key map "!" 'automatic) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1453 (define-key map "^" 'backup) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1454 (define-key map "\C-h" 'help) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1455 (define-key map [f1] 'help) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1456 (define-key map [help] 'help) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1457 (define-key map "?" 'help) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1458 (define-key map "\C-g" 'quit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1459 (define-key map "\C-]" 'quit) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1460 (define-key map "\e" 'exit-prefix) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1461 (define-key map [escape] 'exit-prefix) |
805356939662
(query-replace-map): Move initialization into declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
67180
diff
changeset
|
1462 map) |
2080
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1463 "Keymap that defines the responses to questions in `query-replace'. |
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1464 The \"bindings\" in this map are not commands; they are answers. |
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1465 The valid answers include `act', `skip', `act-and-show', |
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1466 `exit', `act-and-exit', `edit', `delete-and-edit', `recenter', |
10057
460fecc93446
(query-replace-map): Define \e and escape as exit-prefix.
Richard M. Stallman <rms@gnu.org>
parents:
9908
diff
changeset
|
1467 `automatic', `backup', `exit-prefix', and `help'.") |
2080
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1468 |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1469 (defvar multi-query-replace-map |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1470 (let ((map (make-sparse-keymap))) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1471 (set-keymap-parent map query-replace-map) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1472 (define-key map "Y" 'automatic-all) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1473 (define-key map "N" 'exit-current) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1474 map) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1475 "Keymap that defines additional bindings for multi-buffer replacements. |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1476 It extends its parent map `query-replace-map' with new bindings to |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1477 operate on a set of buffers/files. The difference with its parent map |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1478 is the additional answers `automatic-all' to replace all remaining |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1479 matches in all remaining buffers with no more questions, and |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1480 `exit-current' to skip remaining matches in the current buffer |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1481 and to continue with the next buffer in the sequence.") |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1482 |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1483 (defun replace-match-string-symbols (n) |
29051 | 1484 "Process a list (and any sub-lists), expanding certain symbols. |
1485 Symbol Expands To | |
1486 N (match-string N) (where N is a string of digits) | |
1487 #N (string-to-number (match-string N)) | |
1488 & (match-string 0) | |
1489 #& (string-to-number (match-string 0)) | |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1490 # replace-count |
29051 | 1491 |
1492 Note that these symbols must be preceeded by a backslash in order to | |
72095
2a66d3b6c808
(replace-match-string-symbols): Handle dotted lists.
Richard M. Stallman <rms@gnu.org>
parents:
71125
diff
changeset
|
1493 type them using Lisp syntax." |
2a66d3b6c808
(replace-match-string-symbols): Handle dotted lists.
Richard M. Stallman <rms@gnu.org>
parents:
71125
diff
changeset
|
1494 (while (consp n) |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1495 (cond |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1496 ((consp (car n)) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1497 (replace-match-string-symbols (car n))) ;Process sub-list |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1498 ((symbolp (car n)) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1499 (let ((name (symbol-name (car n)))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1500 (cond |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1501 ((string-match "^[0-9]+$" name) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1502 (setcar n (list 'match-string (string-to-number name)))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1503 ((string-match "^#[0-9]+$" name) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1504 (setcar n (list 'string-to-number |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1505 (list 'match-string |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1506 (string-to-number (substring name 1)))))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1507 ((string= "&" name) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1508 (setcar n '(match-string 0))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1509 ((string= "#&" name) |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1510 (setcar n '(string-to-number (match-string 0)))) |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1511 ((string= "#" name) |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1512 (setcar n 'replace-count)))))) |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1513 (setq n (cdr n)))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1514 |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1515 (defun replace-eval-replacement (expression replace-count) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1516 (let ((replacement (eval expression))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1517 (if (stringp replacement) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1518 replacement |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1519 (prin1-to-string replacement t)))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1520 |
56148
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1521 (defun replace-quote (replacement) |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1522 "Quote a replacement string. |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1523 This just doubles all backslashes in REPLACEMENT and |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1524 returns the resulting string. If REPLACEMENT is not |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1525 a string, it is first passed through `prin1-to-string' |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1526 with the `noescape' argument set. |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1527 |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1528 `match-data' is preserved across the call." |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1529 (save-match-data |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1530 (replace-regexp-in-string "\\\\" "\\\\" |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1531 (if (stringp replacement) |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1532 replacement |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1533 (prin1-to-string replacement t)) |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1534 t t))) |
dbab365230eb
(query-replace-read-args): Only warn about use of \n
David Kastrup <dak@gnu.org>
parents:
56006
diff
changeset
|
1535 |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1536 (defun replace-loop-through-replacements (data replace-count) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1537 ;; DATA is a vector contaning the following values: |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1538 ;; 0 next-rotate-count |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1539 ;; 1 repeat-count |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1540 ;; 2 next-replacement |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1541 ;; 3 replacements |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1542 (if (= (aref data 0) replace-count) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1543 (progn |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1544 (aset data 0 (+ replace-count (aref data 1))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1545 (let ((next (cdr (aref data 2)))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1546 (aset data 2 (if (consp next) next (aref data 3)))))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1547 (car (aref data 2))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1548 |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1549 (defun replace-match-data (integers reuse &optional new) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1550 "Like `match-data', but markers in REUSE get invalidated. |
74578
34b20acf743f
(replace-match-data, replace-match-maybe-edit): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
72095
diff
changeset
|
1551 If NEW is non-nil, it is set and returned instead of fresh data, |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1552 but coerced to the correct value of INTEGERS." |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1553 (or (and new |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1554 (progn |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1555 (set-match-data new) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1556 (and (eq new reuse) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1557 (eq (null integers) (markerp (car reuse))) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1558 new))) |
63150
571afd8b238a
(replace-match-data): Pass RESEAT arg `t' to
Kim F. Storm <storm@cua.dk>
parents:
62737
diff
changeset
|
1559 (match-data integers reuse t))) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1560 |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1561 (defun replace-match-maybe-edit (newtext fixedcase literal noedit match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1562 "Make a replacement with `replace-match', editing `\\?'. |
58913
0b183affb969
(replace-match-maybe-edit): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
58741
diff
changeset
|
1563 NEWTEXT, FIXEDCASE, LITERAL are just passed on. If NOEDIT is true, no |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1564 check for `\\?' is made to save time. MATCH-DATA is used for the |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1565 replacement. In case editing is done, it is changed to use markers. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1566 |
74578
34b20acf743f
(replace-match-data, replace-match-maybe-edit): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
72095
diff
changeset
|
1567 The return value is non-nil if there has been no `\\?' or NOEDIT was |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1568 passed in. If LITERAL is set, no checking is done, anyway." |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1569 (unless (or literal noedit) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1570 (setq noedit t) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1571 (while (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\?\\)" |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1572 newtext) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1573 (setq newtext |
62458
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1574 (read-string "Edit replacement string: " |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1575 (prog1 |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1576 (cons |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1577 (replace-match "" t t newtext 3) |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1578 (1+ (match-beginning 3))) |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1579 (setq match-data |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1580 (replace-match-data |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1581 nil match-data match-data)))) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1582 noedit nil))) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1583 (set-match-data match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1584 (replace-match newtext fixedcase literal) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1585 noedit) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1586 |
95604
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1587 (defvar replace-search-function 'search-forward |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1588 "Function to use when searching for strings to replace. |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1589 It is used by `query-replace' and `replace-string', and is called |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1590 with three arguments, as if it were `search-forward'.") |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1591 |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1592 (defvar replace-re-search-function 're-search-forward |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1593 "Function to use when searching for regexps to replace. |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1594 It is used by `query-replace-regexp', `replace-regexp', |
96419
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
1595 `query-replace-regexp-eval', and `map-query-replace-regexp'. |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
1596 It is called with three arguments, as if it were |
b5e89d359b84
(read-regexp): New function.
Juri Linkov <juri@jurta.org>
parents:
95604
diff
changeset
|
1597 `re-search-forward'.") |
95604
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1598 |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1599 (defun perform-replace (from-string replacements |
61 | 1600 query-flag regexp-flag delimited-flag |
40254
51c9985454e3
(perform-replace): Move START and END parameters
Gerd Moellmann <gerd@gnu.org>
parents:
38986
diff
changeset
|
1601 &optional repeat-count map start end) |
61 | 1602 "Subroutine of `query-replace'. Its complexity handles interactive queries. |
1603 Don't use this in your own program unless you want to query and set the mark | |
1604 just as `query-replace' does. Instead, write a simple loop like this: | |
38675
a7b1d283fe97
(perform-replace): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents:
38414
diff
changeset
|
1605 |
a7b1d283fe97
(perform-replace): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents:
38414
diff
changeset
|
1606 (while (re-search-forward \"foo[ \\t]+bar\" nil t) |
61 | 1607 (replace-match \"foobar\" nil nil)) |
38675
a7b1d283fe97
(perform-replace): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents:
38414
diff
changeset
|
1608 |
a7b1d283fe97
(perform-replace): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents:
38414
diff
changeset
|
1609 which will run faster and probably do exactly what you want. Please |
a7b1d283fe97
(perform-replace): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents:
38414
diff
changeset
|
1610 see the documentation of `replace-match' to find out how to simulate |
45529
45014630aeb2
(perform-replace): Document return value. Use `pop'.
Colin Walters <walters@gnu.org>
parents:
45490
diff
changeset
|
1611 `case-replace'. |
45014630aeb2
(perform-replace): Document return value. Use `pop'.
Colin Walters <walters@gnu.org>
parents:
45490
diff
changeset
|
1612 |
45014630aeb2
(perform-replace): Document return value. Use `pop'.
Colin Walters <walters@gnu.org>
parents:
45490
diff
changeset
|
1613 This function returns nil if and only if there were no matches to |
45014630aeb2
(perform-replace): Document return value. Use `pop'.
Colin Walters <walters@gnu.org>
parents:
45490
diff
changeset
|
1614 make, or the user didn't cancel the call." |
2080
6ee99287dbc6
(query-replace-map): New keymap.
Richard M. Stallman <rms@gnu.org>
parents:
1820
diff
changeset
|
1615 (or map (setq map query-replace-map)) |
16631
024d3847af99
(perform-replace): Obey minibuffer-auto-raise.
Richard M. Stallman <rms@gnu.org>
parents:
16129
diff
changeset
|
1616 (and query-flag minibuffer-auto-raise |
024d3847af99
(perform-replace): Obey minibuffer-auto-raise.
Richard M. Stallman <rms@gnu.org>
parents:
16129
diff
changeset
|
1617 (raise-frame (window-frame (minibuffer-window)))) |
82072
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1618 (let* ((case-fold-search |
87211
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1619 (if (and case-fold-search search-upper-case) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1620 (isearch-no-upper-case-p from-string regexp-flag) |
c2b1300a87e5
(keep-lines, flush-lines, how-many): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
86291
diff
changeset
|
1621 case-fold-search)) |
82072
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1622 (nocasify (not (and case-replace case-fold-search))) |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1623 (literal (or (not regexp-flag) (eq regexp-flag 'literal))) |
95604
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1624 (search-function |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1625 (if regexp-flag |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1626 replace-re-search-function |
664723b81c00
(replace-search-function, replace-re-search-function): New vars.
Chong Yidong <cyd@stupidchicken.com>
parents:
94678
diff
changeset
|
1627 replace-search-function)) |
82072
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1628 (search-string from-string) |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1629 (real-match-data nil) ; The match data for the current match. |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1630 (next-replacement nil) |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1631 ;; This is non-nil if we know there is nothing for the user |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1632 ;; to edit in the replacement. |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1633 (noedit nil) |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1634 (keep-going t) |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1635 (stack nil) |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1636 (replace-count 0) |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1637 (nonempty-match nil) |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1638 (multi-buffer nil) |
106325
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1639 (recenter-last-op nil) ; Start cycling order with initial position. |
18433
1de7cef26431
(perform-replace): When matching regexps, if the next match is
Paul Eggert <eggert@twinsun.com>
parents:
17933
diff
changeset
|
1640 |
82072
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1641 ;; If non-nil, it is marker saying where in the buffer to stop. |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1642 (limit nil) |
20248
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
1643 |
82072
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1644 ;; Data for the next match. If a cons, it has the same format as |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1645 ;; (match-data); otherwise it is t if a match is possible at point. |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1646 (match-again t) |
18433
1de7cef26431
(perform-replace): When matching regexps, if the next match is
Paul Eggert <eggert@twinsun.com>
parents:
17933
diff
changeset
|
1647 |
82072
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1648 (message |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1649 (if query-flag |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1650 (apply 'propertize |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1651 (substitute-command-keys |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1652 "Query replacing %s with %s: (\\<query-replace-map>\\[help] for help) ") |
7894e62e5b10
(perform-replace): Use isearch-no-upper-case-p.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
78112
diff
changeset
|
1653 minibuffer-prompt-properties)))) |
20248
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
1654 |
b87f3ba0e1d7
(perform-replace): In Transient Mark mode, if
Karl Heuer <kwzh@gnu.org>
parents:
20244
diff
changeset
|
1655 ;; If region is active, in Transient Mark mode, operate on region. |
28706
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
1656 (when start |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
1657 (setq limit (copy-marker (max start end))) |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
1658 (goto-char (min start end)) |
29790e97da09
(perform-replace): Add parameters START and END. Use
Gerd Moellmann <gerd@gnu.org>
parents:
28502
diff
changeset
|
1659 (deactivate-mark)) |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1660 |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1661 ;; If last typed key in previous call of multi-buffer perform-replace |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1662 ;; was `automatic-all', don't ask more questions in next files |
101013
dbe70c3aa01d
Replace last-input-char with last-input-event.
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
1663 (when (eq (lookup-key map (vector last-input-event)) 'automatic-all) |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1664 (setq query-flag nil multi-buffer t)) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1665 |
25167
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1666 ;; REPLACEMENTS is either a string, a list of strings, or a cons cell |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1667 ;; containing a function and its first argument. The function is |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1668 ;; called to generate each replacement like this: |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1669 ;; (funcall (car replacements) (cdr replacements) replace-count) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1670 ;; It must return a string. |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1671 (cond |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1672 ((stringp replacements) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1673 (setq next-replacement replacements |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1674 replacements nil)) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1675 ((stringp (car replacements)) ; If it isn't a string, it must be a cons |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1676 (or repeat-count (setq repeat-count 1)) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1677 (setq replacements (cons 'replace-loop-through-replacements |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1678 (vector repeat-count repeat-count |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1679 replacements replacements))))) |
8a881b02ea7b
(query-replace-regexp-eval)
Richard M. Stallman <rms@gnu.org>
parents:
25039
diff
changeset
|
1680 |
61 | 1681 (if delimited-flag |
1682 (setq search-function 're-search-forward | |
1683 search-string (concat "\\b" | |
1684 (if regexp-flag from-string | |
1685 (regexp-quote from-string)) | |
1686 "\\b"))) | |
58973
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1687 (when query-replace-lazy-highlight |
60713
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1688 (setq isearch-lazy-highlight-last-string nil)) |
58914
f55019d052ed
* replace.el (query-replace-highlight): Add new value `isearch'
Juri Linkov <juri@jurta.org>
parents:
58913
diff
changeset
|
1689 |
61 | 1690 (push-mark) |
1691 (undo-boundary) | |
5393
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1692 (unwind-protect |
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1693 ;; Loop finding occurrences that perhaps should be replaced. |
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1694 (while (and keep-going |
56006
21eb4b5cef9a
(perform-replace): Use `limit' to terminate the while-loop explicitly.
Juri Linkov <juri@jurta.org>
parents:
55868
diff
changeset
|
1695 (not (or (eobp) (and limit (>= (point) limit)))) |
18433
1de7cef26431
(perform-replace): When matching regexps, if the next match is
Paul Eggert <eggert@twinsun.com>
parents:
17933
diff
changeset
|
1696 ;; Use the next match if it is already known; |
1de7cef26431
(perform-replace): When matching regexps, if the next match is
Paul Eggert <eggert@twinsun.com>
parents:
17933
diff
changeset
|
1697 ;; otherwise, search for a match after moving forward |
1de7cef26431
(perform-replace): When matching regexps, if the next match is
Paul Eggert <eggert@twinsun.com>
parents:
17933
diff
changeset
|
1698 ;; one char if progress is required. |
1de7cef26431
(perform-replace): When matching regexps, if the next match is
Paul Eggert <eggert@twinsun.com>
parents:
17933
diff
changeset
|
1699 (setq real-match-data |
76236
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1700 (cond ((consp match-again) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1701 (goto-char (nth 1 match-again)) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1702 (replace-match-data |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1703 t real-match-data match-again)) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1704 ;; MATCH-AGAIN non-nil means accept an |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1705 ;; adjacent match. |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1706 (match-again |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1707 (and |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1708 (funcall search-function search-string |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1709 limit t) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1710 ;; For speed, use only integers and |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1711 ;; reuse the list used last time. |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1712 (replace-match-data t real-match-data))) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1713 ((and (< (1+ (point)) (point-max)) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1714 (or (null limit) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1715 (< (1+ (point)) limit))) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1716 ;; If not accepting adjacent matches, |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1717 ;; move one char to the right before |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1718 ;; searching again. Undo the motion |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1719 ;; if the search fails. |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1720 (let ((opoint (point))) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1721 (forward-char 1) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1722 (if (funcall |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1723 search-function search-string |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1724 limit t) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1725 (replace-match-data |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1726 t real-match-data) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1727 (goto-char opoint) |
91de64a1c05e
(perform-replace): Undo forward-char immediately if non-adjacent
Chong Yidong <cyd@stupidchicken.com>
parents:
75921
diff
changeset
|
1728 nil)))))) |
74578
34b20acf743f
(replace-match-data, replace-match-maybe-edit): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
72095
diff
changeset
|
1729 |
67839
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1730 ;; Record whether the match is nonempty, to avoid an infinite loop |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1731 ;; repeatedly matching the same empty string. |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1732 (setq nonempty-match |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1733 (/= (nth 0 real-match-data) (nth 1 real-match-data))) |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1734 |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1735 ;; If the match is empty, record that the next one can't be |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1736 ;; adjacent. |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1737 |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1738 ;; Otherwise, if matching a regular expression, do the next |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1739 ;; match now, since the replacement for this match may |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1740 ;; affect whether the next match is adjacent to this one. |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1741 ;; If that match is empty, don't use it. |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1742 (setq match-again |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1743 (and nonempty-match |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1744 (or (not regexp-flag) |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1745 (and (looking-at search-string) |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1746 (let ((match (match-data))) |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1747 (and (/= (nth 0 match) (nth 1 match)) |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1748 match)))))) |
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1749 |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1750 ;; Optionally ignore matches that have a read-only property. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1751 (unless (and query-replace-skip-read-only |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1752 (text-property-not-all |
67839
33258a660650
(perform-replace): Calculate match-again
Richard M. Stallman <rms@gnu.org>
parents:
67426
diff
changeset
|
1753 (nth 0 real-match-data) (nth 1 real-match-data) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1754 'read-only nil)) |
732 | 1755 |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1756 ;; Calculate the replacement string, if necessary. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1757 (when replacements |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1758 (set-match-data real-match-data) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1759 (setq next-replacement |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1760 (funcall (car replacements) (cdr replacements) |
75212
dbdc8c2aae7f
(perform-replace): Remove leftover code.
Juanma Barranquero <lekktu@gmail.com>
parents:
75208
diff
changeset
|
1761 replace-count))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1762 (if (not query-flag) |
98145
9d5c120a08ec
(perform-replace): Don't set inhibit-read-only using
Chong Yidong <cyd@stupidchicken.com>
parents:
97082
diff
changeset
|
1763 (progn |
58913
0b183affb969
(replace-match-maybe-edit): Doc fix.
Juri Linkov <juri@jurta.org>
parents:
58741
diff
changeset
|
1764 (unless (or literal noedit) |
60713
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1765 (replace-highlight |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1766 (nth 0 real-match-data) (nth 1 real-match-data) |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1767 start end search-string |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1768 (or delimited-flag regexp-flag) case-fold-search)) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1769 (setq noedit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1770 (replace-match-maybe-edit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1771 next-replacement nocasify literal |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1772 noedit real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1773 replace-count (1+ replace-count))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1774 (undo-boundary) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1775 (let (done replaced key def) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1776 ;; Loop reading commands until one of them sets done, |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1777 ;; which means it has finished handling this |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1778 ;; occurrence. Any command that sets `done' should |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1779 ;; leave behind proper match data for the stack. |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1780 ;; Commands not setting `done' need to adjust |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1781 ;; `real-match-data'. |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1782 (while (not done) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1783 (set-match-data real-match-data) |
60713
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1784 (replace-highlight |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1785 (match-beginning 0) (match-end 0) |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1786 start end search-string |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1787 (or delimited-flag regexp-flag) case-fold-search) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1788 ;; Bind message-log-max so we don't fill up the message log |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1789 ;; with a bunch of identical messages. |
86018
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1790 (let ((message-log-max nil) |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1791 (replacement-presentation |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1792 (if query-replace-show-replacement |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1793 (save-match-data |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1794 (set-match-data real-match-data) |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1795 (match-substitute-replacement next-replacement |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1796 nocasify literal)) |
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1797 next-replacement))) |
57023
cf85be0f7afa
(perform-replace): Use `query-replace-descr'.
Juri Linkov <juri@jurta.org>
parents:
56922
diff
changeset
|
1798 (message message |
cf85be0f7afa
(perform-replace): Use `query-replace-descr'.
Juri Linkov <juri@jurta.org>
parents:
56922
diff
changeset
|
1799 (query-replace-descr from-string) |
86018
2c176c668b7a
(query-replace-show-replacement): New defcustom.
Juri Linkov <juri@jurta.org>
parents:
82140
diff
changeset
|
1800 (query-replace-descr replacement-presentation))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1801 (setq key (read-event)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1802 ;; Necessary in case something happens during read-event |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1803 ;; that clobbers the match data. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1804 (set-match-data real-match-data) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1805 (setq key (vector key)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1806 (setq def (lookup-key map key)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1807 ;; Restore the match data while we process the command. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1808 (cond ((eq def 'help) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1809 (with-output-to-temp-buffer "*Help*" |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1810 (princ |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1811 (concat "Query replacing " |
98913
f989303f1963
(query-replace, query-replace-regexp)
Juri Linkov <juri@jurta.org>
parents:
98909
diff
changeset
|
1812 (if delimited-flag "word " "") |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1813 (if regexp-flag "regexp " "") |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1814 from-string " with " |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1815 next-replacement ".\n\n" |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1816 (substitute-command-keys |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1817 query-replace-help))) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1818 (with-current-buffer standard-output |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1819 (help-mode)))) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1820 ((eq def 'exit) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1821 (setq keep-going nil) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1822 (setq done t)) |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1823 ((eq def 'exit-current) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1824 (setq multi-buffer t keep-going nil done t)) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1825 ((eq def 'backup) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1826 (if stack |
45529
45014630aeb2
(perform-replace): Document return value. Use `pop'.
Colin Walters <walters@gnu.org>
parents:
45490
diff
changeset
|
1827 (let ((elt (pop stack))) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1828 (goto-char (nth 0 elt)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1829 (setq replaced (nth 1 elt) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1830 real-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1831 (replace-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1832 t real-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1833 (nth 2 elt)))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1834 (message "No previous match") |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1835 (ding 'no-terminate) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1836 (sit-for 1))) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1837 ((eq def 'act) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1838 (or replaced |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1839 (setq noedit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1840 (replace-match-maybe-edit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1841 next-replacement nocasify literal |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1842 noedit real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1843 replace-count (1+ replace-count))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1844 (setq done t replaced t)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1845 ((eq def 'act-and-exit) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1846 (or replaced |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1847 (setq noedit |
56273
610a9a9c39d0
(query-replace-read-args): Swallow a space after
Juri Linkov <juri@jurta.org>
parents:
56262
diff
changeset
|
1848 (replace-match-maybe-edit |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1849 next-replacement nocasify literal |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1850 noedit real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1851 replace-count (1+ replace-count))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1852 (setq keep-going nil) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1853 (setq done t replaced t)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1854 ((eq def 'act-and-show) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1855 (if (not replaced) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1856 (setq noedit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1857 (replace-match-maybe-edit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1858 next-replacement nocasify literal |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1859 noedit real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1860 replace-count (1+ replace-count) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1861 real-match-data (replace-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1862 t real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1863 replaced t))) |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1864 ((or (eq def 'automatic) (eq def 'automatic-all)) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1865 (or replaced |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1866 (setq noedit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1867 (replace-match-maybe-edit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1868 next-replacement nocasify literal |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1869 noedit real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1870 replace-count (1+ replace-count))) |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1871 (setq done t query-flag nil replaced t) |
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1872 (if (eq def 'automatic-all) (setq multi-buffer t))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1873 ((eq def 'skip) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1874 (setq done t)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1875 ((eq def 'recenter) |
106325
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1876 ;; `this-command' has the value `query-replace', |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1877 ;; so we need to bind it to `recenter-top-bottom' |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1878 ;; to allow it to detect a sequence of `C-l'. |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1879 (let ((this-command 'recenter-top-bottom) |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1880 (last-command 'recenter-top-bottom)) |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1881 (recenter-top-bottom))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1882 ((eq def 'edit) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1883 (let ((opos (point-marker))) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1884 (setq real-match-data (replace-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1885 nil real-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1886 real-match-data)) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1887 (goto-char (match-beginning 0)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1888 (save-excursion |
44138
f1d7c706f7f7
(query-replace-read-args): New optional arg NOERROR.
Richard M. Stallman <rms@gnu.org>
parents:
43406
diff
changeset
|
1889 (save-window-excursion |
f1d7c706f7f7
(query-replace-read-args): New optional arg NOERROR.
Richard M. Stallman <rms@gnu.org>
parents:
43406
diff
changeset
|
1890 (recursive-edit))) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1891 (goto-char opos) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1892 (set-marker opos nil)) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1893 ;; Before we make the replacement, |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1894 ;; decide whether the search string |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1895 ;; can match again just after this match. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1896 (if (and regexp-flag nonempty-match) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1897 (setq match-again (and (looking-at search-string) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1898 (match-data))))) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1899 ;; Edit replacement. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1900 ((eq def 'edit-replacement) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1901 (setq real-match-data (replace-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1902 nil real-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1903 real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1904 next-replacement |
62458
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1905 (read-string "Edit replacement string: " |
2c228409c44d
Replace `read-input' by `read-string'.
Juanma Barranquero <lekktu@gmail.com>
parents:
62147
diff
changeset
|
1906 next-replacement) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1907 noedit nil) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1908 (if replaced |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1909 (set-match-data real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1910 (setq noedit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1911 (replace-match-maybe-edit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1912 next-replacement nocasify literal noedit |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1913 real-match-data) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1914 replaced t)) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1915 (setq done t)) |
46693
4ed23f64c88c
(occur-rename-buffer): New command.
Sam Steingold <sds@gnu.org>
parents:
46519
diff
changeset
|
1916 |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1917 ((eq def 'delete-and-edit) |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1918 (replace-match "" t t) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1919 (setq real-match-data (replace-match-data |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1920 nil real-match-data)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1921 (replace-dehighlight) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1922 (save-excursion (recursive-edit)) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1923 (setq replaced t)) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1924 ;; Note: we do not need to treat `exit-prefix' |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1925 ;; specially here, since we reread |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1926 ;; any unrecognized character. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1927 (t |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1928 (setq this-command 'mode-exited) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1929 (setq keep-going nil) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1930 (setq unread-command-events |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1931 (append (listify-key-sequence key) |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1932 unread-command-events)) |
58914
f55019d052ed
* replace.el (query-replace-highlight): Add new value `isearch'
Juri Linkov <juri@jurta.org>
parents:
58913
diff
changeset
|
1933 (setq done t))) |
58973
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1934 (when query-replace-lazy-highlight |
106325
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1935 ;; Force lazy rehighlighting only after replacements. |
58914
f55019d052ed
* replace.el (query-replace-highlight): Add new value `isearch'
Juri Linkov <juri@jurta.org>
parents:
58913
diff
changeset
|
1936 (if (not (memq def '(skip backup))) |
106325
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1937 (setq isearch-lazy-highlight-last-string nil))) |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1938 (unless (eq def 'recenter) |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1939 ;; Reset recenter cycling order to initial position. |
d1953939048b
(perform-replace): Let-bind recenter-last-op to nil.
Juri Linkov <juri@jurta.org>
parents:
105965
diff
changeset
|
1940 (setq recenter-last-op nil))) |
40925
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1941 ;; Record previous position for ^ when we move on. |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1942 ;; Change markers to numbers in the match data |
8733f6312f8a
(query-replace-skip-read-only): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
40254
diff
changeset
|
1943 ;; since lots of markers slow down editing. |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1944 (push (list (point) replaced |
63779
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1945 ;;; If the replacement has already happened, all we need is the |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1946 ;;; current match start and end. We could get this with a trivial |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1947 ;;; match like |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1948 ;;; (save-excursion (goto-char (match-beginning 0)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1949 ;;; (search-forward (match-string 0)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1950 ;;; (match-data t)) |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1951 ;;; if we really wanted to avoid manually constructing match data. |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1952 ;;; Adding current-buffer is necessary so that match-data calls can |
98208dd356b4
(keep-lines-read-args): Add INTERACTIVE arg.
Luc Teirlinck <teirllm@auburn.edu>
parents:
63736
diff
changeset
|
1953 ;;; return markers which are appropriate for editing. |
56228
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1954 (if replaced |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1955 (list |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1956 (match-beginning 0) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1957 (match-end 0) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1958 (current-buffer)) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1959 (match-data t))) |
4e0ea2b75232
(query-replace-read-args): Implement `\,' and `\#'
David Kastrup <dak@gnu.org>
parents:
56148
diff
changeset
|
1960 stack))))) |
29952
3e2589e69a8a
(perform-replace): Undo change of 2000-04-04.
Gerd Moellmann <gerd@gnu.org>
parents:
29051
diff
changeset
|
1961 |
5393
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1962 (replace-dehighlight)) |
10157
7953cde9d951
(perform-replace): Report number of replacements when done.
Richard M. Stallman <rms@gnu.org>
parents:
10155
diff
changeset
|
1963 (or unread-command-events |
7953cde9d951
(perform-replace): Report number of replacements when done.
Richard M. Stallman <rms@gnu.org>
parents:
10155
diff
changeset
|
1964 (message "Replaced %d occurrence%s" |
7953cde9d951
(perform-replace): Report number of replacements when done.
Richard M. Stallman <rms@gnu.org>
parents:
10155
diff
changeset
|
1965 replace-count |
7953cde9d951
(perform-replace): Report number of replacements when done.
Richard M. Stallman <rms@gnu.org>
parents:
10155
diff
changeset
|
1966 (if (= replace-count 1) "" "s"))) |
96908
531d21ce5cca
(multi-query-replace-map): New variable.
Juri Linkov <juri@jurta.org>
parents:
96419
diff
changeset
|
1967 (or (and keep-going stack) multi-buffer))) |
61 | 1968 |
5393
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1969 (defvar replace-overlay nil) |
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1970 |
60713
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1971 (defun replace-highlight (match-beg match-end range-beg range-end |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1972 string regexp case-fold) |
58973
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1973 (if query-replace-highlight |
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1974 (if replace-overlay |
60101
aa148fbcec2e
(perform-replace): Pass new args to replace-highlight.
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
1975 (move-overlay replace-overlay match-beg match-end (current-buffer)) |
aa148fbcec2e
(perform-replace): Pass new args to replace-highlight.
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
1976 (setq replace-overlay (make-overlay match-beg match-end)) |
67426
eac49762e6b9
(replace-highlight): Change overlay priority from 1 to 1001.
Juri Linkov <juri@jurta.org>
parents:
67187
diff
changeset
|
1977 (overlay-put replace-overlay 'priority 1001) ;higher than lazy overlays |
58973
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1978 (overlay-put replace-overlay 'face 'query-replace))) |
60713
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1979 (if query-replace-lazy-highlight |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1980 (let ((isearch-string string) |
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1981 (isearch-regexp regexp) |
75921
1c3c5aeeb934
(replace-highlight): Bind search-whitespace-regexp to nil.
Chong Yidong <cyd@stupidchicken.com>
parents:
75347
diff
changeset
|
1982 (search-whitespace-regexp nil) |
109715
843bffdd92eb
Fix query-replace-regexp incomplete highlighting (Bug#6808).
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
1983 (isearch-case-fold-search case-fold) |
843bffdd92eb
Fix query-replace-regexp incomplete highlighting (Bug#6808).
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
1984 (isearch-forward t) |
843bffdd92eb
Fix query-replace-regexp incomplete highlighting (Bug#6808).
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
1985 (isearch-error nil)) |
108721
c465f7b92264
* replace.el (replace-highlight): Fix lazy-highlighting
Juri Linkov <juri@jurta.org>
parents:
107656
diff
changeset
|
1986 ;; Set isearch-word to nil because word-replace is regexp-based, |
c465f7b92264
* replace.el (replace-highlight): Fix lazy-highlighting
Juri Linkov <juri@jurta.org>
parents:
107656
diff
changeset
|
1987 ;; so `isearch-search-fun' should not use `word-search-forward'. |
c465f7b92264
* replace.el (replace-highlight): Fix lazy-highlighting
Juri Linkov <juri@jurta.org>
parents:
107656
diff
changeset
|
1988 (if (and isearch-word isearch-regexp) (setq isearch-word nil)) |
60713
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1989 (isearch-lazy-highlight-new-loop range-beg range-end)))) |
5393
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1990 |
58973
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1991 (defun replace-dehighlight () |
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1992 (when replace-overlay |
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1993 (delete-overlay replace-overlay)) |
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1994 (when query-replace-lazy-highlight |
60713
77391bae98f1
(perform-replace): Remove bindings of global
Juri Linkov <juri@jurta.org>
parents:
60240
diff
changeset
|
1995 (lazy-highlight-cleanup lazy-highlight-cleanup) |
58973
7fed010105d9
(perform-replace): Add isearch-case-fold-search.
Juri Linkov <juri@jurta.org>
parents:
58914
diff
changeset
|
1996 (setq isearch-lazy-highlight-last-string nil))) |
5393
cfd16a1af914
(query-replace-highlight): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
5337
diff
changeset
|
1997 |
56355
ac4a6e4361cf
(query-replace-descr): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56351
diff
changeset
|
1998 ;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4 |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
324
diff
changeset
|
1999 ;;; replace.el ends here |