emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: query-replace-regexp-eval is quite nice, but...


From: Andreas Schwab
Subject: Re: query-replace-regexp-eval is quite nice, but...
Date: Mon, 02 Feb 2004 11:24:34 +0100
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3.50 (gnu/linux)

David Kastrup <address@hidden> writes:

> The description tells us
>
> [...]
>
>     TO-EXPR is a Lisp expression evaluated to compute each
>     replacement.  It may reference `replace-count' to get the number
>     of replacements already made.  If the result of TO-EXPR is not a
>     string, it is converted to one using `prin1-to-string' with the
>     NOESCAPE argument (which see).
>
>     For convenience, when entering TO-EXPR interactively, you can use
>     `\&' or `\0' to stand for whatever matched the whole of REGEXP,
>     and `\N' (where N is a digit) to stand for whatever matched the
>     Nth `\(...\)' in REGEXP.  Use `\#&' or `\#N' if you want a number
>     instead of a string.
>
> So the idea is to build your replacement string with Lisp, and this
> is quite an excellent thing.  It is completely defeated because the
> replacement is then done non-literally.  Which means that if
> \0
> would have matched \footnote, replacing the string just with \0 (which
> one would expect to do nothing in effect) will barf because the
> regexp replacer will not know what \f is supposed to be.

I agree this is a bug.

> Is there anybody that would make a case for a non-literal
> replacement?  If not, is there anybody with enough of a clue to find
> out how to fix this?  I have taken a look at perform-replace, but it
> does not seem to offer an option for literal replacement for
> regexps.  Should we add one?

Currently, perform-replace uses literal replacement for all non-regexp
searches, and non-literal otherwise.  What we could do is offer a special
version of match-string that quotes backslashes and use that in
replace-match-string-symbols.

Andreas.

-- 
Andreas Schwab, SuSE Labs, address@hidden
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




reply via email to

[Prev in Thread] Current Thread [Next in Thread]