Skip to content

Commit e3a6546

Browse files
committed
Improve persp-mode integration
Prevent leaking jump lists between perspectives and prevent adding evil jumps after perspective changes. Fixes #6
1 parent 9b214d7 commit e3a6546

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

better-jumper.el

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,15 @@
120120
(defvar better-jumper-switching-perspectives nil
121121
"Flag indicating if perspective switch is in progress.")
122122

123+
(defvar better-jumper--before-persp-switch-persp-name nil
124+
"Persp name before perspective persp switch.")
125+
126+
(defvar better-jumper--before-persp-switch-jumps nil
127+
"Jumps before perspective persp switch.")
128+
129+
(defvar better-jumper--before-persp-switch-point-marker nil
130+
"Point before perspective persp switch.")
131+
123132
(defvar better-jumper--buffer-targets "\\*\\(new\\|scratch\\)\\*"
124133
"Regexp to match against `buffer-name' to determine whether it's a valid jump target.")
125134

@@ -344,7 +353,9 @@ POS defaults to point."
344353
(evil-visual-state-p)))
345354
(push-mark pos t))
346355

347-
(unless better-jumper--jumping
356+
(unless (or
357+
better-jumper--jumping
358+
(better-jumper--ignore-persp-change))
348359
;; clear out intermediary jumps when a new one is set
349360
(let* ((struct (better-jumper--get-struct))
350361
(jump-list (better-jumper--get-struct-jump-list struct))
@@ -358,6 +369,14 @@ POS defaults to point."
358369
(goto-char pos))
359370
(better-jumper--push))))
360371

372+
(defun better-jumper--ignore-persp-change ()
373+
"Determine if jump is being added as the result of a persp switch."
374+
(and
375+
better-jumper--before-persp-switch-persp-name
376+
better-jumper--before-persp-switch-point-marker
377+
(not (string= better-jumper--before-persp-switch-persp-name (safe-persp-name (get-current-persp))))
378+
(equal better-jumper--before-persp-switch-point-marker (point-marker))))
379+
361380
;;;###autoload
362381
(defun better-jumper-jump-backward (&optional count)
363382
"Jump backward COUNT positions to previous location in jump list.
@@ -427,13 +446,25 @@ context and will default to current context if not provided."
427446
;;;;;;;;;;;;;;;;;;
428447

429448
(defun better-jumper--before-persp-deactivate (&rest args)
430-
"Indicate that perspective switch is in progress. Ignore ARGS."
449+
"Indicate that perspective switch is in progress. Ignore ARGS.
450+
Additionally capture persp and jump information."
431451
(ignore args)
452+
(setq better-jumper--before-persp-switch-persp-name (safe-persp-name (get-current-persp)))
453+
(setq better-jumper--before-persp-switch-jumps (better-jumper--get-struct (better-jumper--get-current-context)))
454+
(setq better-jumper--before-persp-switch-point-marker (point-marker))
432455
(setq better-jumper-switching-perspectives t))
433456

434457
(defun better-jumper--on-persp-activate (&rest args)
435-
"Indicate that perspective switch is completed. Ignore ARGS."
458+
"Indicate that perspective switch is completed. Ignore ARGS.
459+
Optionally clear jump list if jumping to new perspective to prevent
460+
leaking jump lists."
436461
(ignore args)
462+
(when (and
463+
better-jumper--before-persp-switch-persp-name
464+
better-jumper--before-persp-switch-jumps
465+
(not (string= better-jumper--before-persp-switch-persp-name (safe-persp-name (get-current-persp))))
466+
(eq better-jumper--before-persp-switch-jumps (better-jumper--get-struct (better-jumper--get-current-context))))
467+
(better-jumper-clear-jumps))
437468
(setq better-jumper-switching-perspectives nil))
438469

439470
(with-eval-after-load 'persp-mode

0 commit comments

Comments
 (0)