all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: David Kastrup <dak@gnu.org>
Cc: Juri Linkov <juri@jurta.org>, Andreas Schwab <schwab@suse.de>,
	rms@gnu.org, emacs-devel@gnu.org
Subject: Re: query-replace-interactive not documented
Date: 16 Jun 2004 03:16:26 +0200	[thread overview]
Message-ID: <x5fz8w480l.fsf@lola.goethe.zz> (raw)
In-Reply-To: <x5llio4dq8.fsf@lola.goethe.zz>

[-- Attachment #1: Type: text/plain, Size: 1171 bytes --]

David Kastrup <dak@gnu.org> writes:

> Another option may be
> \`read-expression optionally followed by ' which gives us
> 
> \\footnote{\\label{fn:\`replace-count'}}
> 
> as well as
> 
> \\footnote{\\label{fn:\`(or replace-count)}}
> 
> \` has somewhat more of a "will be evaluated later" scent and it has
> the advantage that it is somewhat natural to match it up with ' in
> case we need to explicitly end the read expression.

Ok, here is the whole ugly thing: it certainly won't interfere with
programming since it does all the work in the interactive spec (see
C-x ESC ESC for the show.  BTW, can anybody tell me how the command
history manages to record the last two arguments unevaluated?  I can't
for the life of me figure out how this works), so certainly no
security risk.

You can use all the special symbols that are available in
query-replace-regexp-eval, too, like \& \#1 and so on.

If somebody has a good suggestion how one could get rid of
replace-requote in the command history, it would be nice to hear.
But I really think that \`"\\3"' should deliver a _verbatim_ \3, or
we could have written \`\3' in the first place.

Docstring missing as to yet.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 2501 bytes --]

--- replace.el	10 Jun 2004 09:36:09 +0200	1.172
+++ replace.el	16 Jun 2004 03:01:16 +0200	
@@ -165,16 +165,44 @@
   (interactive
    (let ((common
 	  (query-replace-read-args "Query replace regexp" t)))
-     (list (nth 0 common) (nth 1 common) (nth 2 common)
-	   ;; These are done separately here
-	   ;; so that command-history will record these expressions
-	   ;; rather than the values they had this time.
-	   (if (and transient-mark-mode mark-active)
-	       (region-beginning))
-	   (if (and transient-mark-mode mark-active)
-	       (region-end)))))
-
+     (list
+      (nth 0 common)
+      (if (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\\\`"
+			(nth 1 common))
+	  (let ((to-string (nth 1 common)) (pos (match-end 0)) to-expr)
+	    (while pos
+	      (when (> pos 2)
+		(push (substring to-string 0 (- pos 2)) to-expr))
+	      (setq pos (read-from-string to-string pos))
+	      (push `(replace-requote ,(pop pos)) to-expr)
+	      (setq to-string (and (< pos (length to-string))
+				   (substring to-string
+					      (if (eq (aref to-string pos) ?')
+						  (1+ pos)
+						pos)))
+		    pos (and
+			 to-string
+			 (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\\\`"
+				       to-string)
+			 (match-end 0))))
+	    (unless (zerop (length to-string))
+	      (push to-string to-expr))
+	    (replace-match-string-symbols to-expr)
+	    (cons 'replace-eval-replacement 
+		  (if (> (length to-expr) 1)
+		      (cons 'concat (nreverse to-expr))
+		    (car to-expr))))
+	(nth 1 common))
+      (nth 2 common)
+      ;; These are done separately here
+      ;; so that command-history will record these expressions
+      ;; rather than the values they had this time.
+      (if (and transient-mark-mode mark-active)
+	  (region-beginning))
+      (if (and transient-mark-mode mark-active)
+	  (region-end)))))
   (perform-replace regexp to-string t t delimited nil nil start end))
+
 (define-key esc-map [?\C-%] 'query-replace-regexp)
 
 (defun query-replace-regexp-eval (regexp to-expr &optional delimited start end)
@@ -1040,6 +1068,14 @@
         replacement
       (prin1-to-string replacement t))))
 
+(defun replace-requote (replacement)
+  (save-match-data
+    (replace-regexp-in-string "\\\\" "\\\\"
+			      (if (stringp replacement)
+				  replacement
+				(prin1-to-string replacement t))
+			      t t)))
+
 (defun replace-loop-through-replacements (data replace-count)
   ;; DATA is a vector contaning the following values:
   ;;   0 next-rotate-count

[-- Attachment #3: Type: text/plain, Size: 52 bytes --]



-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

[-- Attachment #4: Type: text/plain, Size: 142 bytes --]

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

  reply	other threads:[~2004-06-16  1:16 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
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 [this message]
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=x5fz8w480l.fsf@lola.goethe.zz \
    --to=dak@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=juri@jurta.org \
    --cc=rms@gnu.org \
    --cc=schwab@suse.de \
    /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.