1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-05 05:41:40 -07:00

Add a M-c' command to read-regexp'

* doc/lispref/minibuf.texi (Text from Minibuffer): Document it.

* lisp/replace.el (read-regexp): Add a `M-c' command to indicate
case folding (bug#16913).
This commit is contained in:
Lars Ingebrigtsen 2022-06-13 15:31:25 +02:00
parent 86325f960a
commit 027fecb24b
3 changed files with 62 additions and 10 deletions

View file

@ -928,7 +928,13 @@ If the first element of DEFAULTS is non-nil (and if PROMPT does not end
in \":\", followed by optional whitespace), DEFAULT is added to the prompt.
The optional argument HISTORY is a symbol to use for the history list.
If nil, use `regexp-history'."
If nil, use `regexp-history'.
If the user has used the `M-c' command to specify case
sensitivity, the returned string will have a text property named
`case-fold' that has a value of either `fold' or
`inhibit-fold'. (It's up to the caller of `read-regexp' to
respect this or not; see `read-regexp-case-fold-search'.)"
(let* ((defaults
(if (and defaults (symbolp defaults))
(cond
@ -944,21 +950,50 @@ If nil, use `regexp-history'."
(suggestions (delete-dups (delq nil (delete "" suggestions))))
;; Do not automatically add default to the history for empty input.
(history-add-new-input nil)
(case-fold case-fold-search)
(input (read-from-minibuffer
(if (string-match-p ":[ \t]*\\'" prompt)
prompt
(format-prompt prompt (and (length> default 0)
(query-replace-descr default))))
nil nil nil (or history 'regexp-history) suggestions t)))
(if (equal input "")
;; Return the default value when the user enters empty input.
(prog1 (or default input)
(when default
(add-to-history (or history 'regexp-history) default)))
;; Otherwise, add non-empty input to the history and return input.
(prog1 input
(add-to-history (or history 'regexp-history) input)))))
nil
(define-keymap
:parent minibuffer-local-map
"M-c" (lambda ()
(interactive)
(setq case-fold
(if (or (eq case-fold 'fold)
(and case-fold
(not (eq case-fold
'inhibit-fold))))
'inhibit-fold
'fold))
(message "Case folding is now %s"
(if (eq case-fold 'fold)
"on"
"off"))))
nil (or history 'regexp-history) suggestions t))
(result (if (equal input "")
;; Return the default value when the user enters
;; empty input.
default
input)))
(when result
(add-to-history (or history 'regexp-history) result))
(if (and result
(or (eq case-fold 'fold)
(eq case-fold 'inhibit-fold)))
(propertize result 'case-fold case-fold)
(or result input))))
(defun read-regexp-case-fold-search (regexp)
"Return a value for `case-fold-search' based on REGEXP and current settings.
REGEXP is a string as returned by `read-regexp'."
(let ((fold (get-text-property 0 'case-fold regexp)))
(cond
((eq fold 'fold) t)
((eq fold 'inhibit-fold) nil)
(t case-fold-search))))
(defalias 'delete-non-matching-lines 'keep-lines)
(defalias 'delete-matching-lines 'flush-lines)