From: zhanghj <netjunegg@gmail.com>
To: Tino Calancha <tino.calancha@gmail.com>
Cc: netjune@qq.com, Emacs developers <emacs-devel@gnu.org>
Subject: Re: query-replace-regexp: Can't use \0 in TO-STRING
Date: Sun, 07 May 2017 11:55:15 +0800 [thread overview]
Message-ID: <87bmr5micc.fsf@gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1705062134410.29811@calancha-pc> (Tino Calancha's message of "Sat, 6 May 2017 21:39:25 +0900 (JST)")
Tino Calancha <tino.calancha@gmail.com> writes:
>> Why not \0? I think \0 is more intuitive and also used in vim.
> I agree is more intuitive, and it works in `replace-match', or instance:
> (mapcar
> (lambda (group)
> (let ((str "foo123"))
> (when (string-match "[a-z]+\\([1-9]+\\)" str)
> (replace-match "bar" nil nil str group))))
> (list 0 1))
> => ("bar" "foobar")
>
> Are you willing to write a patch to implement it?
The following patch works on my machine for regexp replacing. But I
don't known if \0 should be supported in other places such as
sort-regexp-fields, occur.
diff --git a/lisp/subr.el b/lisp/subr.el
index 02e7993..c182128 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -3634,7 +3634,7 @@ match-string-no-properties
(defun match-substitute-replacement (replacement
&optional fixedcase literal string subexp)
"Return REPLACEMENT as it will be inserted by `replace-match'.
-In other words, all back-references in the form `\\&' and `\\N'
+In other words, all back-references in the form `\\&', `\\0' and `\\N'
are substituted with actual strings matched by the last search.
Optional FIXEDCASE, LITERAL, STRING and SUBEXP have the same
meaning as for `replace-match'."
diff --git a/src/search.c b/src/search.c
index 1223cbf..86255f0 100644
--- a/src/search.c
+++ b/src/search.c
@@ -2339,7 +2339,7 @@ in the replaced text, capitalize each word in NEWTEXT.
If optional third arg LITERAL is non-nil, insert NEWTEXT literally.
Otherwise treat `\\' as special:
- `\\&' in NEWTEXT means substitute original matched text.
+ `\\&' or `\\0' in NEWTEXT means substitute original matched text.
`\\N' means substitute what matched the Nth `\\(...\\)'.
If Nth parens didn't match, substitute nothing.
`\\\\' means insert one `\\'.
@@ -2523,7 +2523,7 @@ since only regular expressions have distinguished subexpressions. */)
{
FETCH_STRING_CHAR_ADVANCE (c, newtext, pos, pos_byte);
- if (c == '&')
+ if (c == '&' || c == '0')
{
substart = search_regs.start[sub];
subend = search_regs.end[sub];
@@ -2668,7 +2668,7 @@ since only regular expressions have distinguished subexpressions. */)
MAKE_CHAR_MULTIBYTE (c);
}
- if (c == '&')
+ if (c == '&' || c == '0')
idx = sub;
else if (c >= '1' && c <= '9' && c - '0' < search_regs.num_regs)
{
next prev parent reply other threads:[~2017-05-07 3:55 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-06 0:48 query-replace-regexp: Can't use \0 in TO-STRING zhanghj
2017-05-06 5:04 ` Tino Calancha
2017-05-06 8:09 ` Eli Zaretskii
2017-05-06 10:34 ` Tino Calancha
2017-05-07 3:48 ` zhanghj
2017-05-19 8:13 ` Eli Zaretskii
2017-05-06 12:28 ` zhanghj
2017-05-06 12:39 ` Tino Calancha
2017-05-07 3:55 ` zhanghj [this message]
2017-05-07 14:48 ` Eli Zaretskii
2017-05-09 22:02 ` Juri Linkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87bmr5micc.fsf@gmail.com \
--to=netjunegg@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=netjune@qq.com \
--cc=tino.calancha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).