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)))
next prev parent 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.