Preserve case in query-replace undo
If the user query and replaces 'foo' with 'BAR', then undo must comeback to 'foo', not to 'FOO' (Bug#31073). * lisp/replace.el (perform-replace): Bind nocasify to non-nil value during undo/undo-all actions. * test/lisp/replace-tests.el (query-replace-undo-bug31073): Add test.
This commit is contained in:
parent
24f7defaf7
commit
32dc0cb1b5
2 changed files with 21 additions and 0 deletions
|
@ -2619,6 +2619,7 @@ It must return a string."
|
|||
(let ((stack-idx 0)
|
||||
(stack-len (length stack))
|
||||
(num-replacements 0)
|
||||
(nocasify t) ; Undo must preserve case (Bug#31073).
|
||||
search-string
|
||||
next-replacement)
|
||||
(while (and (< stack-idx stack-len)
|
||||
|
|
|
@ -380,4 +380,24 @@ Each element has the format:
|
|||
(should (string= "211" (replace-tests--query-replace-undo)))
|
||||
(should (string= "211" (replace-tests--query-replace-undo 'comma))))
|
||||
|
||||
(ert-deftest query-replace-undo-bug31073 ()
|
||||
"Test for https://debbugs.gnu.org/31073 ."
|
||||
(let ((text "aaa aaa")
|
||||
(count 0))
|
||||
(with-temp-buffer
|
||||
(insert text)
|
||||
(goto-char 1)
|
||||
(cl-letf (((symbol-function 'read-event)
|
||||
(lambda (&rest args)
|
||||
(cl-incf count)
|
||||
(let ((val (pcase count
|
||||
((or 1 2 3) ?\s) ; replace current and go next
|
||||
(4 ?U) ; undo-all
|
||||
(_ ?q)))) ; exit
|
||||
val))))
|
||||
(perform-replace "a" "B" t nil nil))
|
||||
;; After undo text must be the same.
|
||||
(should (string= text (buffer-string))))))
|
||||
|
||||
|
||||
;;; replace-tests.el ends here
|
||||
|
|
Loading…
Add table
Reference in a new issue