diff options
| -rw-r--r-- | modules/ui-navigation.el | 5 | ||||
| -rw-r--r-- | tests/test-ui-navigation-split-follow-undo-kill.el | 23 |
2 files changed, 27 insertions, 1 deletions
diff --git a/modules/ui-navigation.el b/modules/ui-navigation.el index fba9153c2..e9c9eaf26 100644 --- a/modules/ui-navigation.el +++ b/modules/ui-navigation.el @@ -203,8 +203,11 @@ With numeric prefix ARG, re-open the ARGth most-recently-killed file (buffer-list))))) (mapc (lambda (buf-file) + ;; delete (equal), not delq (eq): buf-file is a fresh string from + ;; expand-file-name and never eq to the recentf-list entries, so the + ;; skip-open-files logic was dead. (setq recently-killed-list - (delq buf-file recently-killed-list))) + (delete buf-file recently-killed-list))) buffer-files-list) (when recently-killed-list (let ((file (nth (1- arg) recently-killed-list))) diff --git a/tests/test-ui-navigation-split-follow-undo-kill.el b/tests/test-ui-navigation-split-follow-undo-kill.el index 8e3900743..f6981a36a 100644 --- a/tests/test-ui-navigation-split-follow-undo-kill.el +++ b/tests/test-ui-navigation-split-follow-undo-kill.el @@ -76,6 +76,29 @@ non-visited entry, not the second." (when (get-buffer "*test-alive*") (kill-buffer "*test-alive*")))) (should (equal opened "/tmp/dead.org")))) +(ert-deftest test-ui-navigation-undo-kill-buffer-skips-open-file-at-head () + "Boundary: an open file at the head of the list is skipped (equal, not eq). +The previous delq compared expand-file-name strings by identity, so a +currently-open most-recent file was never skipped." + (let ((opened nil) + (recentf-mode t) + ;; The open file is FIRST — only an equal-based filter removes it. + (recentf-list '("/tmp/alive.txt" "/tmp/dead.org"))) + (cl-letf (((symbol-function 'require) (lambda (&rest _) t)) + ((symbol-function 'recentf-mode) (lambda (&rest _) t)) + ((symbol-function 'buffer-list) + (lambda (&rest _) + (list (let ((b (get-buffer-create "*test-alive*"))) + (with-current-buffer b + (setq buffer-file-name "/tmp/alive.txt")) + b)))) + ((symbol-function 'find-file) + (lambda (f) (setq opened f)))) + (unwind-protect + (cj/undo-kill-buffer 1) + (when (get-buffer "*test-alive*") (kill-buffer "*test-alive*")))) + (should (equal opened "/tmp/dead.org")))) + (ert-deftest test-ui-navigation-undo-kill-buffer-numeric-arg-is-one-based () "Normal: a numeric prefix is 1-based — N=2 opens the second non-visited entry." (let ((opened nil) |
