summaryrefslogtreecommitdiff
path: root/lisp/replace.el
diff options
context:
space:
mode:
authorJuri Linkov <juri@jurta.org>2013-02-25 22:57:44 +0200
committerJuri Linkov <juri@jurta.org>2013-02-25 22:57:44 +0200
commitcd27a76dad3fa9ede47a9034031131872f65f07c (patch)
treec364d7f90bd2de10f9bb8f1391b25a8a9bef9ed9 /lisp/replace.el
parent343a2aefb528ce3c978ba2145705b9e37bfbe02a (diff)
downloademacs-cd27a76dad3fa9ede47a9034031131872f65f07c.tar.gz
* lisp/replace.el (read-regexp): Let-bind `default' to the first
element of `defaults' if it's a list, otherwise it should be a string or nil. Let-bind `suggestions' to `defaults' if it's a list, otherwise make a list with the string value. Doc fix. Fixes: debbugs:13805
Diffstat (limited to 'lisp/replace.el')
-rw-r--r--lisp/replace.el59
1 files changed, 33 insertions, 26 deletions
diff --git a/lisp/replace.el b/lisp/replace.el
index 7f9ea869333..86b1aa27069 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -583,34 +583,39 @@ of `history-length', which see.")
(defun read-regexp (prompt &optional defaults history)
"Read and return a regular expression as a string.
When PROMPT doesn't end with a colon and space, it adds a final \": \".
-If DEFAULTS is non-nil, it displays the first default in the prompt.
-
-Optional arg DEFAULTS is a string or a list of strings that are
-prepended to a list of standard default values, which include the
-tag at point, the last isearch regexp, the last isearch string,
+If the first element of DEFAULTS is non-nil, it's added to the prompt.
+
+Optional arg DEFAULTS has the form (DEFAULT . SUGGESTIONS)
+or simply DEFAULT where DEFAULT, if non-nil, should be a string that
+is returned as the default value when the user enters empty input.
+SUGGESTIONS is a list of strings that can be inserted into
+the minibuffer using \\<minibuffer-local-map>\\[next-history-element]. \
+The values supplied in SUGGESTIONS
+are prepended to the list of standard suggestions that include
+the tag at point, the last isearch regexp, the last isearch string,
and the last replacement regexp.
-Non-nil HISTORY is a symbol to use for the history list.
+Optional arg HISTORY is a symbol to use for the history list.
If HISTORY is nil, `regexp-history' is used."
- (let* ((defaults
- (append
- (if (listp defaults) defaults (list defaults))
- (list
- ;; Regexp for tag at point.
- (let* ((tagf (or find-tag-default-function
- (get major-mode 'find-tag-default-function)
- 'find-tag-default))
- (tag (funcall tagf)))
- (cond ((not tag) "")
- ((eq tagf 'find-tag-default)
- (format "\\_<%s\\_>" (regexp-quote tag)))
- (t (regexp-quote tag))))
- (car regexp-search-ring)
- (regexp-quote (or (car search-ring) ""))
- (car (symbol-value
- query-replace-from-history-variable)))))
- (defaults (delete-dups (delq nil (delete "" defaults))))
- (default (car defaults))
+ (let* ((default (if (consp defaults) (car defaults) defaults))
+ (suggestions (if (listp defaults) defaults (list defaults)))
+ (suggestions
+ (append
+ suggestions
+ (list
+ ;; Regexp for tag at point.
+ (let* ((tagf (or find-tag-default-function
+ (get major-mode 'find-tag-default-function)
+ 'find-tag-default))
+ (tag (funcall tagf)))
+ (cond ((not tag) "")
+ ((eq tagf 'find-tag-default)
+ (format "\\_<%s\\_>" (regexp-quote tag)))
+ (t (regexp-quote tag))))
+ (car regexp-search-ring)
+ (regexp-quote (or (car search-ring) ""))
+ (car (symbol-value query-replace-from-history-variable)))))
+ (suggestions (delete-dups (delq nil (delete "" suggestions))))
;; Do not automatically add default to the history for empty input.
(history-add-new-input nil)
(input (read-from-minibuffer
@@ -621,9 +626,11 @@ If HISTORY is nil, `regexp-history' is used."
(query-replace-descr default)))
(t
(format "%s: " prompt)))
- nil nil nil (or history 'regexp-history) defaults t)))
+ nil nil nil (or history 'regexp-history) suggestions t)))
(if (equal input "")
+ ;; Return the default value when the user enters empty input.
(or default input)
+ ;; Otherwise, add non-empty input to the history and return input.
(prog1 input
(add-to-history (or history 'regexp-history) input)))))