aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroxma <roxma@qq.com>2023-03-26 11:14:04 +0800
committerTom Dalziel <33435574+tomdl89@users.noreply.github.com>2024-07-12 23:40:45 +0100
commit9cdd55bff8294683b8a37383240430c02445e6fa (patch)
treeb401a13fe5b5240829e415bc97ce4a6d5ba74ee0
parent1a5ddab958982b6bf5e21bc7cb0f77a64415479d (diff)
Fix: Should not (evil-set-jump previous-pos) jump after evil-jump-forward
Steps to reproduce the issue: - Create files `a` `b` `c` with the following content: $ head a b c ==> a <== b I'm A ==> b <== c I'm B ==> c <== I'm C - Run `emancs a` to open bufer `a` - Press `gf` to jump to bufer `b` - Press `gf` to jump to bufer `c` - Press `C-o` to jump back to bufer `b` - Press `C-o` to jump back to bufer `a` - Press `C-i` to jump foward to bufer `b` - Press `C-i` to jump foward to bufer `c`, but the window stays with buffer unexpectedly.
-rw-r--r--evil-jumps.el25
1 files changed, 13 insertions, 12 deletions
diff --git a/evil-jumps.el b/evil-jumps.el
index 2fadb8b..f914214 100644
--- a/evil-jumps.el
+++ b/evil-jumps.el
@@ -62,7 +62,7 @@ Otherwise the jump commands act only within the current buffer."
(defvar evil--jumps-jumping nil)
-(defvar evil--jumps-jumping-backward nil
+(defvar evil--jumps-jump-command nil
"Set by `evil--jump-backward', used and cleared in the
`post-command-hook' by `evil--jump-handle-buffer-crossing'")
@@ -242,7 +242,7 @@ POS defaults to point."
(put 'evil-set-jump 'permanent-local-hook t)
(defun evil--jump-backward (count)
- (setq evil--jumps-jumping-backward t)
+ (setq evil--jumps-jump-command t)
(let ((count (or count 1)))
(evil-motion-loop (nil count)
(let* ((struct (evil--jumps-get-current))
@@ -255,6 +255,7 @@ POS defaults to point."
(evil--jumps-jump idx 1)))))
(defun evil--jump-forward (count)
+ (setq evil--jumps-jump-command t)
(let ((count (or count 1)))
(evil-motion-loop (nil count)
(let* ((struct (evil--jumps-get-current))
@@ -303,8 +304,8 @@ change the current buffer."
(put 'evil--jump-hook 'permanent-local-hook t)
(defun evil--jump-handle-buffer-crossing ()
- (let ((jumping-backward evil--jumps-jumping-backward))
- (setq evil--jumps-jumping-backward nil)
+ (let ((jump-command evil--jumps-jump-command))
+ (setq evil--jumps-jump-command nil)
(dolist (frame (frame-list))
(dolist (window (window-list frame))
(let* ((struct (evil--jumps-get-current window))
@@ -312,13 +313,13 @@ change the current buffer."
(when previous-pos
(setf (evil-jumps-struct-previous-pos struct) nil)
(if (and
- ;; `evil-jump-backward' (and other backward jumping
- ;; commands) needs to be handled specially. When
- ;; jumping backward multiple times, calling
- ;; `evil-set-jump' is always wrong: If you jump back
- ;; twice and we call `evil-set-jump' after the second
- ;; time, we clear the forward jump list and
- ;; `evil--jump-forward' won't work.
+ ;; `evil-jump-backward' and 'evil-jump-forward' needs
+ ;; to be handled specially. When jumping backward
+ ;; multiple times, calling `evil-set-jump' is always
+ ;; wrong: If you jump back twice and we call
+ ;; `evil-set-jump' after the second time, we clear
+ ;; the forward jump list and `evil--jump-forward'
+ ;; won't work.
;; The first time you jump backward, setting a jump
;; point is sometimes correct. But we don't do it
@@ -326,7 +327,7 @@ change the current buffer."
;; `evil--jump-backward' has updated our position in
;; the jump list so, again, `evil-set-jump' would
;; break `evil--jump-forward'.
- (not jumping-backward)
+ (not jump-command)
(let ((previous-buffer (marker-buffer previous-pos)))
(and previous-buffer
(not (eq previous-buffer (window-buffer window))))))