[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [patch] Re: regexp repacement, how to present replacement to user?
From: |
Paul Pogonyshev |
Subject: |
Re: [patch] Re: regexp repacement, how to present replacement to user? |
Date: |
Wed, 31 Oct 2007 23:39:07 +0200 |
User-agent: |
KMail/1.7.2 |
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 <address@hidden>
* 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 <address@hidden>
* 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.
- Re: [patch] Re: regexp repacement, how to present replacement to user?, (continued)
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Richard Stallman, 2007/10/21
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Paul Pogonyshev, 2007/10/21
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Juri Linkov, 2007/10/21
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Paul Pogonyshev, 2007/10/21
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Stefan Monnier, 2007/10/21
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Richard Stallman, 2007/10/25
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Paul Pogonyshev, 2007/10/28
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Richard Stallman, 2007/10/29
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Juri Linkov, 2007/10/30
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Richard Stallman, 2007/10/31
- Re: [patch] Re: regexp repacement, how to present replacement to user?,
Paul Pogonyshev <=
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Richard Stallman, 2007/10/23
- Re: [patch] Re: regexp repacement, how to present replacement to user?, David Kastrup, 2007/10/23
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Richard Stallman, 2007/10/23
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Lennart Borgman (gmail), 2007/10/23
- Re: [patch] Re: regexp repacement, how to present replacement to user?, Richard Stallman, 2007/10/24