summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2018-10-09 17:46:31 +0300
committerEli Zaretskii <eliz@gnu.org>2018-10-09 17:46:31 +0300
commitcd7caee630f9425a1a16e4da31e892a2ec29ac09 (patch)
tree8c624e08350bcb6e11d085e11295424093d5abe4
parent333f0bfe766185c66952c6fbd4796c6bb97c868d (diff)
downloademacs-cd7caee630f9425a1a16e4da31e892a2ec29ac09.tar.gz
Unbreak 'revert-buffer' in Occur buffers
* lisp/replace.el (occur-revert-function): Use the value of occur-revert-function from the correct buffer. (Bug#32987) * test/lisp/replace-tests.el (replace-occur-revert-bug32543) (replace-occur-revert-bug32987): New tests.
-rw-r--r--lisp/replace.el16
-rw-r--r--test/lisp/replace-tests.el47
2 files changed, 54 insertions, 9 deletions
diff --git a/lisp/replace.el b/lisp/replace.el
index 00b2ceee356..04e5d4273e0 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1226,14 +1226,14 @@ the user called `occur'."
(pcase-let ((`(,region-start ,region-end ,orig-line ,buffer)
(occur--parse-occur-buffer))
(regexp (car occur-revert-arguments)))
- (with-current-buffer buffer
- (when (wholenump orig-line)
- (goto-char (point-min))
- (forward-line (1- orig-line)))
- (save-excursion
- (if (or region-start region-end)
- (occur regexp nil (list (cons region-start region-end)))
- (apply 'occur-1 (append occur-revert-arguments (list (buffer-name))))))))))
+ (if (not (or region-start region-end))
+ (apply 'occur-1 (append occur-revert-arguments (list (buffer-name))))
+ (with-current-buffer buffer
+ (when (wholenump orig-line)
+ (goto-char (point-min))
+ (forward-line (1- orig-line)))
+ (save-excursion
+ (occur regexp nil (list (cons region-start region-end)))))))))
(defun occur-mode-find-occurrence ()
(let ((pos (get-text-property (point) 'occur-target)))
diff --git a/test/lisp/replace-tests.el b/test/lisp/replace-tests.el
index 3fcdce6704f..5a91a2cc7f6 100644
--- a/test/lisp/replace-tests.el
+++ b/test/lisp/replace-tests.el
@@ -359,6 +359,52 @@ Each element has the format:
(dotimes (i (length replace-occur-tests))
(replace-occur-test-create i))
+(ert-deftest replace-occur-revert-bug32543 ()
+ "Test `occur-revert' with non-nil `list-matching-lines-jump-to-current-line'."
+ (let ((temp-buffer (get-buffer-create " *test-occur*")))
+ (unwind-protect
+ (save-window-excursion
+ (with-current-buffer temp-buffer
+ (erase-buffer)
+ (setq list-matching-lines-jump-to-current-line t)
+ (insert
+";; This buffer is for text that is not saved, and for Lisp evaluation.
+;; To create a file, visit it with C-x C-f and enter text in its buffer.
+
+")
+ (occur "and")
+ (with-current-buffer "*Occur*"
+ (revert-buffer)
+ (goto-char (point-min))
+ (should (string-match "\\`2 matches for \"and\" in buffer: "
+ (buffer-substring-no-properties
+ (point) (line-end-position)))))))
+ (and (buffer-name temp-buffer)
+ (kill-buffer temp-buffer)))))
+
+(ert-deftest replace-occur-revert-bug32987 ()
+ "Test `occur-revert' with non-nil `list-matching-lines-jump-to-current-line'."
+ (let ((temp-buffer (get-buffer-create " *test-occur*")))
+ (unwind-protect
+ (save-window-excursion
+ (with-current-buffer temp-buffer
+ (erase-buffer)
+ (setq list-matching-lines-jump-to-current-line nil)
+ (insert
+";; This buffer is for text that is not saved, and for Lisp evaluation.
+;; To create a file, visit it with C-x C-f and enter text in its buffer.
+
+")
+ (occur "and")
+ (with-current-buffer "*Occur*"
+ (revert-buffer)
+ (goto-char (point-min))
+ (should (string-match "\\`2 matches for \"and\" in buffer: "
+ (buffer-substring-no-properties
+ (point) (line-end-position)))))))
+ (and (buffer-name temp-buffer)
+ (kill-buffer temp-buffer)))))
+
;;; Tests for `query-replace' undo feature.
@@ -454,5 +500,4 @@ Return the last evalled form in BODY."
input "a" "B" ((?\s . (1 2 3)) (?E . (4)) (?U . (5))) ?q
(string= input (buffer-string))))))
-
;;; replace-tests.el ends here