From: Juri Linkov <juri@jurta.org>
Cc: emacs-devel@gnu.org, rms@gnu.org, storm@cua.dk
Subject: Re: query-replace-interactive not documented
Date: Tue, 15 Jun 2004 21:17:02 +0300 [thread overview]
Message-ID: <878yeoadpd.fsf@mail.jurta.org> (raw)
In-Reply-To: <x5y8mog72f.fsf@lola.goethe.zz> (David Kastrup's message of "15 Jun 2004 17:43:52 +0200")
David Kastrup <dak@gnu.org> writes:
> Anyway, since it appears that we can hardly avoid using non-escaped
> parens if we want to make use of the Lisp reader as well as paren
> matching, one might as well use the original proposal allowing a
> variable name directly.
Yes, I think paren matching is needed for editing Lisp expressions
in the minibuffer.
> How about using \'? After all, we have an unevaled expression
> following.
In regexps \' is used to match the empty string at the end of the
buffer. But perhaps in the replacement string this symbol is free
to use. Also in some pattern-matching languages like Perl $' is
an alias for $POSTMATCH. But I don't see what it could mean in the
context of `query-replace-regexp'. So unless a potential meaning for
\' in `query-replace-regexp' will be proposed, I think \' is a good
symbol which would have mnemonics of quoting Lisp expression.
> First you are matching against !( not against \!( or similar.
OK, this is the easiest part. I tried different prefixes and messed up
the latest one.
> Then you are not replacing any \1 \2 or similar sequences as far as
> I can see. It will probably not be easy to do this right: have the
> \( replacement not being interpreted afterwards, but the non-evalled
> ones still being interpreted. Probably one needs to explicitly
> double any \ returned from the evaluation, and then call
> perform-replace with "t" instead of 'literal.
Replacing backreferences in expressions is easy: it is just one call
to `replace-match-string-symbols'. Replacing them in strings is easy
as well: just using t instead of `literal'. However, this has one
side-effect: when evaluation returns a string in the form \D, then it
is substituted later for the Dth occurrence. But I think this is right:
it allows to construct replacement strings by Lisp expressions (though,
it is not very needed).
Anyway, with the current implementation all three expressions below
produce the same replacement for the entire string:
\& = \'\& = \'"\\&"
Here is the newest version. I tested it a little, and it seems
it works in all mentioned cases.
Index: replace.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/replace.el,v
retrieving revision 1.172
diff -c -r1.172 replace.el
*** replace.el 10 Jun 2004 04:21:14 -0000 1.172
--- replace.el 15 Jun 2004 17:57:28 -0000
***************
*** 174,179 ****
--- 183,199 ----
(if (and transient-mark-mode mark-active)
(region-end)))))
+ (if (string-match "\\\\'" to-string)
+ (let (to expr)
+ (while (string-match "\\\\'" to-string)
+ (setq to (cons (substring to-string 0 (match-beginning 0)) to)
+ to-string (substring to-string (match-end 0))
+ expr (read-from-string to-string)
+ to (cons `(format "%s" ,(car expr)) to)
+ to-string (substring to-string (cdr expr))))
+ (setq to (nreverse (cons to-string to)))
+ (replace-match-string-symbols to)
+ (setq to-string `(replace-eval-replacement concat ,@to))))
(perform-replace regexp to-string t t delimited nil nil start end))
(define-key esc-map [?\C-%] 'query-replace-regexp)
--
Juri Linkov
http://www.jurta.org/emacs/
next prev parent reply other threads:[~2004-06-15 18:17 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-28 16:16 query-replace-interactive not documented Werner LEMBERG
2004-05-29 17:02 ` Richard Stallman
2004-05-29 17:37 ` Luc Teirlinck
2004-05-29 20:33 ` Juri Linkov
2004-06-11 8:19 ` Juri Linkov
2004-06-11 8:39 ` Kim F. Storm
2004-06-11 9:00 ` David Kastrup
2004-06-12 8:21 ` Juri Linkov
2004-06-12 1:50 ` Richard Stallman
2004-06-12 8:16 ` Juri Linkov
2004-06-13 0:01 ` Richard Stallman
2004-06-13 0:46 ` Miles Bader
2004-06-13 9:03 ` David Kastrup
2004-06-14 18:50 ` Richard Stallman
2004-06-14 20:49 ` Kim F. Storm
2004-06-14 21:20 ` David Kastrup
2004-06-15 14:29 ` Juri Linkov
2004-06-15 15:43 ` David Kastrup
2004-06-15 18:17 ` Juri Linkov [this message]
2004-06-15 20:23 ` David Kastrup
2004-06-15 22:30 ` Andreas Schwab
2004-06-15 22:36 ` David Kastrup
2004-06-15 22:43 ` Kim F. Storm
2004-06-15 23:13 ` David Kastrup
2004-06-16 1:16 ` David Kastrup
2004-06-16 8:08 ` Juri Linkov
2004-06-16 9:23 ` David Kastrup
2004-06-16 8:02 ` Juri Linkov
2004-06-17 5:06 ` Richard Stallman
2004-06-16 8:17 ` Juri Linkov
2004-06-16 9:01 ` David Kastrup
2004-06-16 17:06 ` Kevin Rodgers
2004-06-16 9:02 ` Andreas Schwab
2004-06-16 1:41 ` Miles Bader
2004-06-16 2:01 ` David Kastrup
2004-06-16 2:11 ` Miles Bader
2004-06-16 16:57 ` Richard Stallman
2004-06-15 22:25 ` Andreas Schwab
2004-06-15 22:28 ` Kim F. Storm
2004-06-16 9:00 ` Juri Linkov
2004-06-16 9:25 ` Andreas Schwab
2004-06-16 9:32 ` David Kastrup
2004-06-16 11:30 ` Kim F. Storm
2004-06-16 12:15 ` David Kastrup
2004-06-16 14:35 ` David Kastrup
2004-06-16 15:23 ` Juri Linkov
2004-06-16 21:15 ` David Kastrup
2004-06-16 22:26 ` Kim F. Storm
2004-06-17 0:56 ` David Kastrup
2004-06-17 12:14 ` David Kastrup
2004-06-17 13:05 ` Kim F. Storm
2004-06-17 13:29 ` David Kastrup
2004-06-17 14:10 ` Kim F. Storm
2004-06-17 14:56 ` David Kastrup
2004-06-17 15:33 ` Juri Linkov
2004-06-17 17:03 ` David Kastrup
2004-06-18 6:43 ` Juri Linkov
2004-06-18 7:13 ` David Kastrup
2004-06-16 15:27 ` Kim F. Storm
2004-06-16 17:28 ` Juri Linkov
2004-06-16 21:07 ` David Kastrup
2004-06-17 0:47 ` David Kastrup
2004-06-17 23:05 ` Richard Stallman
2004-06-18 6:55 ` Juri Linkov
2004-06-19 3:19 ` Richard Stallman
2004-06-19 7:00 ` David Kastrup
2004-06-20 19:18 ` Richard Stallman
2004-06-20 21:05 ` David Kastrup
2004-06-21 9:31 ` Richard Stallman
2004-06-21 9:50 ` David Kastrup
2004-06-22 23:16 ` Richard Stallman
2004-06-25 23:12 ` Juri Linkov
2004-06-26 7:34 ` David Kastrup
2004-06-26 16:18 ` Juri Linkov
2004-06-27 17:41 ` Richard Stallman
2004-06-21 9:31 ` Richard Stallman
2004-06-21 9:38 ` David Kastrup
2004-06-22 23:17 ` Richard Stallman
2004-06-22 23:20 ` David Kastrup
2004-06-17 5:07 ` Richard Stallman
2004-06-14 16:59 ` Juri Linkov
2004-06-12 8:21 ` David Kastrup
2004-05-30 19:41 ` Richard Stallman
2004-05-30 22:00 ` Luc Teirlinck
2004-06-08 6:55 ` Juri Linkov
2004-06-11 8:22 ` Juri Linkov
2004-06-12 1:50 ` Richard Stallman
2004-06-18 20:00 ` isearch hooks (was: query-replace-interactive not documented) Juri Linkov
2004-06-19 1:10 ` Miles Bader
2004-06-19 18:09 ` isearch hooks Juri Linkov
2004-06-19 3:19 ` isearch hooks (was: query-replace-interactive not documented) Richard Stallman
2004-06-19 18:36 ` isearch hooks Juri Linkov
2004-06-20 19:18 ` Richard Stallman
2004-06-21 21:56 ` Juri Linkov
2004-06-22 23:17 ` Richard Stallman
2004-06-25 18:07 ` Juri Linkov
2004-06-27 17:41 ` Richard Stallman
2004-06-27 22:34 ` Juri Linkov
2004-06-28 14:57 ` Richard Stallman
2004-06-29 0:25 ` isearch hooks (was: query-replace-interactive not documented) Stefan
2004-06-29 1:17 ` isearch hooks 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878yeoadpd.fsf@mail.jurta.org \
--to=juri@jurta.org \
--cc=emacs-devel@gnu.org \
--cc=rms@gnu.org \
--cc=storm@cua.dk \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.