From: Eli Zaretskii Date: Tue, 9 Oct 2018 14:46:31 +0000 (+0300) Subject: Unbreak 'revert-buffer' in Occur buffers X-Git-Tag: emacs-27.0.90~4325 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cd7caee630f9425a1a16e4da31e892a2ec29ac09;p=emacs.git 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. --- 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