120
120
(defvar better-jumper-switching-perspectives nil
121
121
" Flag indicating if perspective switch is in progress." )
122
122
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
+
123
132
(defvar better-jumper--buffer-targets " \\ *\\ (new\\ |scratch\\ )\\ *"
124
133
" Regexp to match against `buffer-name' to determine whether it's a valid jump target." )
125
134
@@ -344,7 +353,9 @@ POS defaults to point."
344
353
(evil-visual-state-p)))
345
354
(push-mark pos t ))
346
355
347
- (unless better-jumper--jumping
356
+ (unless (or
357
+ better-jumper--jumping
358
+ (better-jumper--ignore-persp-change))
348
359
; ; clear out intermediary jumps when a new one is set
349
360
(let* ((struct (better-jumper--get-struct))
350
361
(jump-list (better-jumper--get-struct-jump-list struct))
@@ -358,6 +369,14 @@ POS defaults to point."
358
369
(goto-char pos))
359
370
(better-jumper--push))))
360
371
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
+
361
380
;;;### autoload
362
381
(defun better-jumper-jump-backward (&optional count )
363
382
" Jump backward COUNT positions to previous location in jump list.
@@ -427,13 +446,25 @@ context and will default to current context if not provided."
427
446
; ;;;;;;;;;;;;;;;;;
428
447
429
448
(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."
431
451
(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 ))
432
455
(setq better-jumper-switching-perspectives t ))
433
456
434
457
(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."
436
461
(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))
437
468
(setq better-jumper-switching-perspectives nil ))
438
469
439
470
(with-eval-after-load 'persp-mode
0 commit comments