all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: wl@gnu.org, emacs-devel@gnu.org, rms@gnu.org,
	Miles Bader <miles@gnu.org>
Subject: Re: improving query-replace and query-replace-regexp
Date: 01 Jun 2004 19:48:23 -0400	[thread overview]
Message-ID: <m1oeo296xv.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <873c5hd35q.fsf@mail.jurta.org>

> I tried Stefan's implementation and it works fine.  I have only one remark:
> if the last history item contains newlines, it may confuse users because
> it displays only the closing square bracket at the minibuffer prompt.

Good point.  How about the version below instead?


        Stefan


--- orig/lisp/replace.el
+++ mod/lisp/replace.el
@@ -1,6 +1,6 @@
 ;;; replace.el --- replace commands for Emacs
 
-;; Copyright (C) 1985, 86, 87, 92, 94, 96, 1997, 2000, 2001, 2002
+;; Copyright (C) 1985, 86, 87, 92, 94, 96, 1997, 2000, 2001, 02, 03, 2004
 ;;  Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
@@ -69,17 +69,32 @@
 (defun query-replace-read-args (string regexp-flag &optional noerror)
   (unless noerror
     (barf-if-buffer-read-only))
-  (let (from to)
+  (let ((lastfrom (car (symbol-value query-replace-from-history-variable)))
+	(lastto (car (symbol-value query-replace-to-history-variable)))
+	from to)
     (if query-replace-interactive
 	(setq from (car (if regexp-flag regexp-search-ring search-ring)))
+      (if (equal lastfrom lastto)
+	  ;; Typically, this is because the two histlists are shared.
+	  (setq lastfrom
+		(cadr (symbol-value query-replace-from-history-variable))))
       ;; The save-excursion here is in case the user marks and copies
       ;; a region in order to specify the minibuffer input.
       ;; That should not clobber the region for the query-replace itself.
       (save-excursion
-	(setq from (read-from-minibuffer (format "%s: " string)
+	(setq from (read-from-minibuffer
+		    (if (null lastto)
+			(format "%s: " string)
+		      (format "%s [%s -> %s]: " string
+			      (mapconcat 'isearch-text-char-description
+					 lastfrom "")
+			      (mapconcat 'isearch-text-char-description
+					 lastto "")))
 					 nil nil nil
 					 query-replace-from-history-variable
 					 nil t)))
+      (if (and lastto (zerop (length from)))
+	  (setq from lastfrom to lastto)
       ;; Warn if user types \n or \t, but don't reject the input.
       (if (string-match "\\\\[nt]" from)
 	  (let ((match (match-string 0 from)))
@@ -88,12 +103,13 @@
 	      (message "Note: `\\n' here doesn't match a newline; to do that, type C-q C-j instead"))
 	     ((string= match "\\t")
 	      (message "Note: `\\t' here doesn't match a tab; to do that, just type TAB")))
-	    (sit-for 2))))
+	      (sit-for 2)))))
 
+    (unless to
     (save-excursion
       (setq to (read-from-minibuffer (format "%s %s with: " string from)
 				     nil nil nil
-				     query-replace-to-history-variable from t)))
+				       query-replace-to-history-variable from t))))
     (list from to current-prefix-arg)))
 
 (defun query-replace (from-string to-string &optional delimited start end)
@@ -842,7 +858,6 @@
 	  (let ((matches 0)	;; count of matched lines
 		(lines 1)	;; line count
 		(matchbeg 0)
-		(matchend 0)
 		(origpt nil)
 		(begpt nil)
 		(endpt nil)
@@ -862,8 +877,7 @@
 		  (setq origpt (point))
 		  (when (setq endpt (re-search-forward regexp nil t))
 		    (setq matches (1+ matches)) ;; increment match count
-		    (setq matchbeg (match-beginning 0)
-			  matchend (match-end 0))
+		    (setq matchbeg (match-beginning 0))
 		    (setq begpt (save-excursion
 				  (goto-char matchbeg)
 				  (line-beginning-position)))

  reply	other threads:[~2004-06-01 23:48 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-28 16:20 improving query-replace and query-replace-regexp Werner LEMBERG
2004-05-28 22:20 ` Stefan Monnier
2004-05-29 17:02   ` Richard Stallman
2004-05-29 17:05     ` Werner LEMBERG
2004-05-29 17:50       ` Miles Bader
2004-05-29 20:45         ` Werner LEMBERG
2004-05-29 21:15     ` Juri Linkov
2004-05-29 21:31       ` Miles Bader
2004-05-30 20:59         ` Juri Linkov
2004-06-01 23:48           ` Stefan Monnier [this message]
     [not found]             ` < 8765aadbgb.fsf@mail.jurta.org>
2004-06-02  0:04             ` Miles Bader
2004-06-02  0:10               ` Stefan Monnier
2004-06-02  0:17                 ` Miles Bader
2004-06-02 17:37                 ` Richard Stallman
2004-06-02 17:37               ` Richard Stallman
2004-06-02  0:56             ` Juri Linkov
2004-06-02  1:48               ` Miles Bader
2004-06-02  1:58                 ` minibuffer-eldef (was: improving query-replace and query-replace-regexp) Stefan Monnier
2004-06-02  2:15                   ` minibuffer-eldef Miles Bader
2004-06-02  3:25                     ` minibuffer-eldef Stefan Monnier
2004-06-02  3:42                       ` minibuffer-eldef Miles Bader
2004-06-02  7:01                         ` minibuffer-eldef David Kastrup
2004-06-02  7:15                           ` minibuffer-eldef Miles Bader
2004-06-02 22:55                             ` minibuffer-eldef Richard Stallman
2004-06-03  7:19                               ` minibuffer-eldef David Kastrup
2004-06-03  7:34                                 ` minibuffer-eldef Miles Bader
2004-06-03  8:13                                   ` minibuffer-eldef David Kastrup
2004-06-03 22:40                                     ` minibuffer-eldef Miles Bader
2004-06-03  7:39                                 ` minibuffer-eldef Stephan Stahl
2004-06-03  8:06                                   ` minibuffer-eldef David Kastrup
2004-06-03  8:43                                     ` minibuffer-eldef Stephan Stahl
2004-06-03 12:21                                 ` minibuffer-eldef Stefan Monnier
2004-06-03 12:35                                   ` minibuffer-eldef David Kastrup
2004-06-04  1:35                                 ` minibuffer-eldef Juri Linkov
2004-06-02  8:04                       ` minibuffer-eldef Kim F. Storm
2004-06-02  9:50                         ` minibuffer-eldef Miles Bader
2004-06-02  8:32                       ` minibuffer-eldef Werner LEMBERG
2004-06-02 17:37                 ` improving query-replace and query-replace-regexp Richard Stallman
2004-06-02 17:52                   ` David Kastrup
2004-06-03  1:28                   ` Miles Bader
2004-06-03  2:29                     ` Stefan Monnier
2004-06-03  4:52                       ` Miles Bader
2004-06-03  7:22                     ` David Kastrup
2004-06-04  2:03                       ` Richard Stallman
2004-06-07  4:28                         ` Miles Bader
2004-06-02  0:16         ` Kevin Rodgers
2004-06-02  0:32           ` Miles Bader
2004-06-03 18:35             ` Kevin Rodgers
2004-06-03 18:57               ` Stefan Monnier
2004-06-03 22:20                 ` Miles Bader
2004-06-04 17:33                   ` Richard Stallman
2004-06-02  0:59           ` Juri Linkov
2004-07-03  9:45   ` Juri Linkov
2004-07-04 17:03     ` Richard Stallman
2004-07-05 19:43       ` David Kastrup
2004-05-29 10:57 ` Miles Bader
2004-05-29 11:58   ` Kai Grossjohann
2004-05-29 12:03     ` Miles Bader
2004-05-30 14:30       ` Richard Stallman
2004-05-29 12:21     ` Werner LEMBERG
2004-05-29 15:51 ` Stefan Daschek

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=m1oeo296xv.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=emacs-devel@gnu.org \
    --cc=miles@gnu.org \
    --cc=rms@gnu.org \
    --cc=wl@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.