aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Hahn <erik_hahn@gmx.de>2019-06-12 21:09:50 +0200
committerEivind Fonn <evfonn@gmail.com>2020-08-16 09:19:48 +0200
commit8b09542a19f0e8fa376476d56c17de3f9cb5fbd3 (patch)
treefb93b08898760d104811e4adc95b1f5e9357cd4c
parentcc6324bfd214211fe0259290b322dccfbdcf447f (diff)
Add comment explaining `evil--jumps-jumping-backward'
-rw-r--r--evil-jumps.el23
1 files changed, 19 insertions, 4 deletions
diff --git a/evil-jumps.el b/evil-jumps.el
index c45e593..a166757 100644
--- a/evil-jumps.el
+++ b/evil-jumps.el
@@ -308,10 +308,25 @@ change the current buffer."
(previous-pos (evil-jumps-struct-previous-pos struct)))
(when previous-pos
(setf (evil-jumps-struct-previous-pos struct) nil)
- (if (and (not jumping-backward)
- (let ((previous-buffer (marker-buffer previous-pos)))
- (and previous-buffer
- (not (eq previous-buffer (window-buffer window))))))
+ (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.
+
+ ;; The first time you jump backward, setting a jump
+ ;; point is sometimes correct. But we don't do it
+ ;; here because this function is called after
+ ;; `evil--jump-backward' has updated our position in
+ ;; the jump list so, again, `evil-set-jump' would
+ ;; break `evil--jump-forward'.
+ (not jumping-backward)
+ (let ((previous-buffer (marker-buffer previous-pos)))
+ (and previous-buffer
+ (not (eq previous-buffer (window-buffer window))))))
(evil-set-jump previous-pos)
(set-marker previous-pos nil))))))))