+2004-07-05 Stefan <monnier@iro.umontreal.ca>
+
+ * replace.el (query-replace-descr): New fun.
+ (query-replace-read-from, query-replace-read-args): Default to the
+ previous from&to.
+ (query-replace-read-to): Quote the `from' string when displaying it.
+ (query-replace-regexp-eval): Immediately check read-only status.
+ Use query-replace-read-from to get the \n checking.
+ Quote the `from' string when displaying it.
+ (map-query-replace-regexp, occur-read-primary-args):
+ Quote the `from' string when displaying it.
+
+ * isearch.el (isearch-query-replace): Pass the regexp-ness and
+ delimited-ness of the search to query-replace.
+
+ * replace.el (query-replace-read-from, query-replace-read-to):
+ New funs extracted from query-replace-read-args.
+ (query-replace-read-args): Use them.
+
+ * replace.el (query-replace-interactive, query-replace-read-args):
+ Remove the `initial' special value.
+ (query-replace-regexp-eval, map-query-replace-regexp): Simplify.
+ (occur-engine): Remove unused var `matchend'.
+
+ * isearch.el (isearch-query-replace, isearch-query-replace-regexp):
+ Use the search string without prompting.
+
2004-07-05 Kenichi Handa <handa@m17n.org>
- * international/mule.el (decode-coding-inserted-region): Set
- last-coding-system-used only when coding is nil.
+ * international/mule.el (decode-coding-inserted-region):
+ Set last-coding-system-used only when coding is nil.
2004-07-03 Eli Zaretskii <eliz@gnu.org>
2004-07-03 KOSEKI Yoshinori <kose@meadowy.org>
- * iimage.el (turn-on-iimage-mode, iimage-mode): Add autoload
- cookies.
+ * iimage.el (turn-on-iimage-mode, iimage-mode): Add autoload cookies.
(iimage-mode-image-search-path): New user option to search the
image file.
(iimage-locate-file): New funcion. Emacs21.3 or earlier does not
;;; replace.el --- replace commands for Emacs
-;; Copyright (C) 1985, 86, 87, 92, 94, 96, 1997, 2000, 2001, 2002,
-;; 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1987, 1992, 1994, 1996, 1997, 2000, 2001, 2002,
+;; 2003, 2004 Free Software Foundation, Inc.
;; Maintainer: FSF
:group 'matching
:version "21.4")
+(defun query-replace-descr (string)
+ (mapconcat 'isearch-text-char-description string ""))
+
(defun query-replace-read-from (string regexp-flag)
- "Query and return the `from' argument of a query-replace operation."
+ "Query and return the `from' argument of a query-replace operation.
+The return value can also be a pair (FROM . TO) indicating that the user
+wants to replace FROM with TO."
(if query-replace-interactive
(car (if regexp-flag regexp-search-ring search-ring))
- (let* ((from
+ (let* ((lastfrom (car (symbol-value query-replace-from-history-variable)))
+ (lastto (car (symbol-value query-replace-to-history-variable)))
+ (from
;; 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
+ (when (equal lastfrom lastto)
+ ;; Typically, this is because the two histlists are shared.
+ (setq lastfrom (cadr (symbol-value
+ query-replace-from-history-variable))))
(read-from-minibuffer
- (format "%s: " string)
+ (if (and lastto lastfrom)
+ (format "%s (default %s -> %s): " string
+ (query-replace-descr lastfrom)
+ (query-replace-descr lastto))
+ (format "%s: " string))
nil nil nil
query-replace-from-history-variable
nil t))))
- ;; Warn if user types \n or \t, but don't reject the input.
- (and regexp-flag
- (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from)
- (let ((match (match-string 3 from)))
- (cond
- ((string= match "\\n")
- (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)))
- from)))
+ (if (and (zerop (length from)) lastto lastfrom)
+ (cons lastfrom lastto)
+ ;; Warn if user types \n or \t, but don't reject the input.
+ (and regexp-flag
+ (string-match "\\(\\`\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\[nt]\\)" from)
+ (let ((match (match-string 3 from)))
+ (cond
+ ((string= match "\\n")
+ (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)))
+ from))))
(defun query-replace-read-to (from string regexp-flag)
"Query and return the `from' argument of a query-replace operation."
(let ((to (save-excursion
(read-from-minibuffer
- (format "%s %s with: " string from)
+ (format "%s %s with: " string (query-replace-descr from))
nil nil nil
query-replace-to-history-variable from t))))
(when (and regexp-flag
(unless noerror
(barf-if-buffer-read-only))
(let* ((from (query-replace-read-from string regexp-flag))
- (to (query-replace-read-to from string regexp-flag)))
+ (to (if (consp from) (prog1 (cdr from) (setq from (car from)))
+ (query-replace-read-to from string regexp-flag))))
(list from to current-prefix-arg)))
(defun query-replace (from-string to-string &optional delimited start end)
only matches that are surrounded by word boundaries.
Fourth and fifth arg START and END specify the region to operate on."
(interactive
- (let* ((from (if query-replace-interactive
- (car regexp-search-ring)
- (read-from-minibuffer "Query replace regexp: "
- nil nil nil
- query-replace-from-history-variable
- nil t)))
+ (barf-if-buffer-read-only)
+ (let* ((from
+ ;; Let-bind the history var to disable the "foo -> bar" default.
+ ;; Maybe we shouldn't disable this default, but for now I'll
+ ;; leave it off. --Stef
+ (let ((query-replace-to-history-variable nil))
+ (query-replace-read-from "Query replace regexp" t)))
(to (list (read-from-minibuffer
- (format "Query replace regexp %s with eval: " from)
+ (format "Query replace regexp %s with eval: "
+ (query-replace-descr from))
nil nil t query-replace-to-history-variable from t))))
;; We make TO a list because replace-match-string-symbols requires one,
;; and the user might enter a single token.
'query-replace-history nil t)))
(to (read-from-minibuffer
(format "Query replace %s with (space-separated strings): "
- from)
+ (query-replace-descr from))
nil nil nil
'query-replace-history from t)))
(list from to
(read-from-minibuffer
(if default
(format "List lines matching regexp (default `%s'): "
- default)
+ (query-replace-descr default))
"List lines matching regexp: ")
nil
nil
(if (facep 'query-replace)
'query-replace 'region)))))
-;;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4
+;; arch-tag: 16b4cd61-fd40-497b-b86f-b667c4cf88e4
;;; replace.el ends here