From: Paul Pogonyshev <pogonyshev@gmx.net>
To: emacs-devel@gnu.org, rms@gnu.org
Cc: Juri Linkov <juri@jurta.org>
Subject: Re: [patch] Re: regexp repacement, how to present replacement to user?
Date: Wed, 31 Oct 2007 23:39:07 +0200 [thread overview]
Message-ID: <200710312339.07601.pogonyshev@gmx.net> (raw)
In-Reply-To: <E1In8Hu-0000IM-UB@fencepost.gnu.org>
Richard Stallman wrote:
> I agree that a key to toggle between the two modes is not necessary,
> but we should have an option to turn this feature off for users who
> like the old behavior.
>
> I have no objection to that option.
OK, here is a stab at making a patch. I'm ommiting doc changes, since
this is most likely not going to be final version anyway.
I changed the new function to accept all arguments `replace-match'
does and removed the `-no-properties' variant, as Juri Linkov suggested.
It probably makes sense to make the replacement text in the
`query-regexp-replace' prompt stand out, by using quotes or a text
property. However, I didn't implement this as current implementation
doesn't.
Paul
2007-10-31 Paul Pogonyshev <pogonyshev@gmx.net>
* replace.el (query-replace-substitute-replacement): New
defcustom.
(perform-replace): Use `match-substitute-replacement' if
`query-replace-substitute-replacement' is non-nil.
2007-10-31 David Kastrup <dak@gnu.org>
* subr.el (match-substitute-replacement): New functions.
Index: lisp/replace.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/replace.el,v
retrieving revision 1.259
diff -u -r1.259 replace.el
--- lisp/replace.el 26 Jul 2007 05:26:32 -0000 1.259
+++ lisp/replace.el 31 Oct 2007 21:17:37 -0000
@@ -69,6 +69,12 @@
:group 'matching
:version "22.1")
+(defcustom query-replace-substitute-replacement t
+ "*Non-nil means to show what actual replacement text will be."
+ :type 'boolean
+ :group 'matching
+ :version "23.1")
+
(defcustom query-replace-highlight t
"*Non-nil means to highlight matches during query replacement."
:type 'boolean
@@ -1570,10 +1576,17 @@
(or delimited-flag regexp-flag) case-fold-search)
;; Bind message-log-max so we don't fill up the message log
;; with a bunch of identical messages.
- (let ((message-log-max nil))
+ (let ((message-log-max nil)
+ (replacement-presentation
+ (if query-replace-substitute-replacement
+ (save-match-data
+ (set-match-data real-match-data)
+ (match-substitute-replacement next-replacement
+ nocasify literal))
+ next-replacement)))
(message message
(query-replace-descr from-string)
- (query-replace-descr next-replacement)))
+ (query-replace-descr replacement-presentation)))
(setq key (read-event))
;; Necessary in case something happens during read-event
;; that clobbers the match data.
Index: lisp/subr.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/subr.el,v
retrieving revision 1.565
diff -u -r1.565 subr.el
--- lisp/subr.el 27 Oct 2007 09:07:15 -0000 1.565
+++ lisp/subr.el 31 Oct 2007 21:17:37 -0000
@@ -2709,6 +2709,24 @@
(buffer-substring-no-properties (match-beginning num)
(match-end num)))))
+
+(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'
+are substituted with actual strings matched by the last search.
+Optional FIXEDCASE, LITERAL, STRING and SUBEXP have the same
+meaning as for `replace-match'."
+ (let ((match (match-string 0 string)))
+ (save-match-data
+ (set-match-data (mapcar (lambda (x)
+ (if (numberp x)
+ (- x (match-beginning 0))
+ x))
+ (match-data t)))
+ (replace-match replacement fixedcase literal match subexp))))
+
+
(defun looking-back (regexp &optional limit greedy)
"Return non-nil if text before point matches regular expression REGEXP.
Like `looking-at' except matches before point, and is slower.
next prev parent reply other threads:[~2007-10-31 21:39 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-13 14:00 regexp repacement, how to present replacement to user? Paul Pogonyshev
2007-10-14 22:50 ` Juri Linkov
2007-10-15 3:20 ` Stefan Monnier
2007-10-15 5:57 ` David Kastrup
2007-10-15 20:28 ` Paul Pogonyshev
2007-10-16 23:54 ` Juri Linkov
2007-10-17 6:06 ` David Kastrup
2007-10-17 19:25 ` Paul Pogonyshev
2007-10-20 13:53 ` [patch] " Paul Pogonyshev
2007-10-21 16:26 ` Richard Stallman
2007-10-21 19:00 ` Paul Pogonyshev
2007-10-21 20:43 ` Juri Linkov
2007-10-21 21:15 ` Paul Pogonyshev
2007-10-22 1:22 ` Stefan Monnier
2007-10-26 3:48 ` Richard Stallman
2007-10-28 14:41 ` Paul Pogonyshev
2007-10-29 9:22 ` Richard Stallman
2007-10-30 14:16 ` Juri Linkov
2007-10-31 7:46 ` Richard Stallman
2007-10-31 21:39 ` Paul Pogonyshev [this message]
2007-11-01 7:32 ` Richard Stallman
2007-11-02 20:58 ` Paul Pogonyshev
2007-11-10 15:01 ` Paul Pogonyshev
2007-11-11 5:21 ` Richard Stallman
2007-11-10 21:54 ` Juri Linkov
2007-10-23 7:12 ` Richard Stallman
2007-10-23 8:16 ` David Kastrup
2007-10-23 17:53 ` Richard Stallman
2007-10-23 19:03 ` Lennart Borgman (gmail)
2007-10-24 8:32 ` Richard Stallman
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=200710312339.07601.pogonyshev@gmx.net \
--to=pogonyshev@gmx.net \
--cc=emacs-devel@gnu.org \
--cc=juri@jurta.org \
--cc=rms@gnu.org \
/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.