From d32e47aff6cc01e3ccdfdf5e8f163f8a52285a75 Mon Sep 17 00:00:00 2001 From: Lawrence Mitchell Date: Sun, 5 Aug 2012 21:30:15 +0800 Subject: [PATCH] * search.c (Freplace_match): Treat \? in the replacement text literally. Fixes: debbugs:8161 --- etc/NEWS | 4 ++++ src/ChangeLog | 5 +++++ src/search.c | 5 ++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index b7fb10881ff..e95ce5ac155 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -482,6 +482,10 @@ inefficiency, and not namespace-clean. * Incompatible Lisp Changes in Emacs 24.2 +** If the NEWTEXT arg to `replace-match' contains a substring "\?", +that substring is inserted literally even if the LITERAL arg is +non-nil, instead of causing an error to be signaled. + +++ ** Docstrings starting with `*' no longer indicate user options. Only variables defined using `defcustom' are considered user options. diff --git a/src/ChangeLog b/src/ChangeLog index 8d13944b633..d760dd1df78 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-08-05 Lawrence Mitchell + + * search.c (Freplace_match): Treat \? in the replacement text + literally (Bug#8161). + 2012-08-05 Chong Yidong * term.c (Vsuspend_tty_functions, Vresume_tty_functions): diff --git a/src/search.c b/src/search.c index 480d0b75c70..004e599be9c 100644 --- a/src/search.c +++ b/src/search.c @@ -2226,6 +2226,9 @@ Otherwise treat `\\' as special: `\\N' means substitute what matched the Nth `\\(...\\)'. If Nth parens didn't match, substitute nothing. `\\\\' means insert one `\\'. + `\\?' is treated literally + (for compatibility with `query-replace-regexp'). + Any other character following `\\' signals an error. Case conversion does not apply to these substitutions. FIXEDCASE and LITERAL are optional arguments. @@ -2428,7 +2431,7 @@ since only regular expressions have distinguished subexpressions. */) } else if (c == '\\') delbackslash = 1; - else + else if (c != '?') error ("Invalid use of `\\' in replacement text"); } if (substart >= 0) -- 2.39.2