[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/better-jumper 06a98185e8 04/48: propertly maintain / clean
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/better-jumper 06a98185e8 04/48: propertly maintain / cleanup buffer + window jumps |
Date: |
Sun, 9 Jan 2022 22:58:08 -0500 (EST) |
branch: elpa/better-jumper
commit 06a98185e85379e81e632c0fdbd566fe369ad3cb
Author: Bryan Gilbert <gilbertw1@gmail.com>
Commit: Bryan Gilbert <gilbertw1@gmail.com>
propertly maintain / cleanup buffer + window jumps
---
better-jumper.el | 156 +++++++++++++++++++++++++++++++------------------------
1 file changed, 89 insertions(+), 67 deletions(-)
diff --git a/better-jumper.el b/better-jumper.el
index e9610fdd7b..548185a238 100644
--- a/better-jumper.el
+++ b/better-jumper.el
@@ -19,10 +19,10 @@
:type 'boolean
:group 'better-jumper)
-(defcustom better-jumper-new-window-behavior 'copy-last
+(defcustom better-jumper-new-window-behavior 'copy
"Determines the behavior when a new window is created."
:type '(choice (const :tag "Empty jump list" empty)
- (other :tag "Copy last window" copy-last))
+ (other :tag "Copy last window" copy))
:group 'better-jumper)
(defcustom better-jumper-max-length 100
@@ -170,71 +170,6 @@ Uses the current window or buffer if CONTEXT is nil."
(equal first-file-name file-name))
(ring-insert jump-list `(,current-pos ,file-name)))))))
-(defun better-jumper-set-jump (&optional pos)
- "Set jump point at POS.
-POS defaults to point."
- (unless (region-active-p)
- (push-mark pos t))
-
- (unless better-jumper--jumping
- ;; clear out intermediary jumps when a new one is set
- (let* ((struct (better-jumper--get-struct))
- (jump-list (better-jumper--get-struct-jump-list struct))
- (idx (better-jumper-jump-list-struct-idx struct)))
- (cl-loop repeat idx
- do (ring-remove jump-list))
- (setf (better-jumper-jump-list-struct-idx struct) -1))
- (save-excursion
- (when pos
- (goto-char pos))
- (better-jumper--push))))
-
-(defun better-jumper-jump-backward ()
- "Jump backward to previous location in jump list."
- (interactive)
- (let* ((struct (better-jumper--get-struct))
- (idx (better-jumper-jump-list-struct-idx struct)))
- (when (= idx -1)
- (setq idx 0)
- (setf (better-jumper-jump-list-struct-idx struct) 0)
- (better-jumper--push))
- (better-jumper--jump idx 1)))
-
-(defun better-jumper-jump-forward ()
- "Jump forward to previous location in jump list."
- (interactive)
- (let* ((struct (better-jumper--get-struct))
- (idx (better-jumper-jump-list-struct-idx struct)))
- (when (= idx -1)
- (setq idx 0)
- (setf (better-jumper-jump-list-struct-idx struct) 0)
- (better-jumper--push))
- (better-jumper--jump idx -1)))
-
-(defun better-jumper--window-configuration-hook (&rest args)
- "Run on window configuration change (Ignore ARGS).
-Cleans up deleted windows and copies history to newly created windows."
- (when (and (eq better-jumper-context 'window)
- (not (better-jumper--persp-window-config-update-disabled)))
- (let* ((jump-table (better-jumper--get-jump-table))
- (window-list (window-list-1 nil nil t))
- (existing-window (selected-window))
- (new-window (previous-window)))
- (when (and (not (eq existing-window new-window))
- (> (length window-list) 1))
- (let* ((target-jump-struct (better-jumper--get-struct new-window))
- (target-jump-list (better-jumper--get-struct-jump-list
target-jump-struct)))
- (when (ring-empty-p target-jump-list)
- (let* ((source-jump-struct (better-jumper--get-struct
existing-window))
- (source-list (better-jumper--get-struct-jump-list
source-jump-struct)))
- (setf (better-jumper-jump-list-struct-idx target-jump-struct)
(better-jumper-jump-list-struct-idx source-jump-struct))
- (setf (better-jumper-jump-list-struct-ring target-jump-struct)
(ring-copy source-list))))))
- ;; delete obsolete windows
- (maphash (lambda (key val)
- (unless (member key window-list)
- (remhash key jump-table)))
- jump-table))))
-
(defun better-jumper--persp-disable-window-config-update ()
"Set persp parameter to disable window config update."
(set-persp-parameter 'better-jumper-window-config-update-disabled t))
@@ -315,6 +250,57 @@ Cleans up deleted windows and copies history to newly
created windows."
(better-jumper--restore-perspective-buffer-jump-state)
(better-jumper--restore-perspective-window-jump-state)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; PUBLIC FUNCTIONS ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun better-jumper-set-jump (&optional pos)
+ "Set jump point at POS.
+POS defaults to point."
+ (unless (region-active-p)
+ (push-mark pos t))
+
+ (unless better-jumper--jumping
+ ;; clear out intermediary jumps when a new one is set
+ (let* ((struct (better-jumper--get-struct))
+ (jump-list (better-jumper--get-struct-jump-list struct))
+ (idx (better-jumper-jump-list-struct-idx struct)))
+ (cl-loop repeat idx
+ do (ring-remove jump-list))
+ (setf (better-jumper-jump-list-struct-idx struct) -1))
+ (save-excursion
+ (when pos
+ (goto-char pos))
+ (better-jumper--push))))
+
+(defun better-jumper-jump-backward ()
+ "Jump backward to previous location in jump list."
+ (interactive)
+ (let* ((struct (better-jumper--get-struct))
+ (idx (better-jumper-jump-list-struct-idx struct)))
+ (when (= idx -1)
+ (setq idx 0)
+ (setf (better-jumper-jump-list-struct-idx struct) 0)
+ (better-jumper--push))
+ (better-jumper--jump idx 1)))
+
+(defun better-jumper-jump-forward ()
+ "Jump forward to previous location in jump list."
+ (interactive)
+ (let* ((struct (better-jumper--get-struct))
+ (idx (better-jumper-jump-list-struct-idx struct)))
+ (when (= idx -1)
+ (setq idx 0)
+ (setf (better-jumper-jump-list-struct-idx struct) 0)
+ (better-jumper--push))
+ (better-jumper--jump idx -1)))
+
+
+;;;;;;;;;;;;;;;;;;
+;;; HOOKS ;;;
+;;;;;;;;;;;;;;;;;;
+
(defun better-jumper--before-persp-deactivate (&rest args)
"Save jump state when a perspective is deactivated. Ignore ARGS."
(better-jumper--persp-disable-window-config-update)
@@ -330,6 +316,42 @@ Cleans up deleted windows and copies history to newly
created windows."
(add-hook 'persp-activated-functions #'better-jumper--on-persp-activate)
(add-hook 'persp-before-save-state-to-file-functions
#'better-jumper--before-persp-deactivate))
+(defun better-jumper--window-configuration-hook (&rest args)
+ "Run on window configuration change (Ignore ARGS).
+Cleans up deleted windows and copies history to newly created windows."
+ (when (eq better-jumper-context 'window)
+ (let* ((window-list (window-list-1 nil nil t))
+ (jump-table (better-jumper--get-jump-table)))
+ (when (and (eq better-jumper-new-window-behavior 'copy)
+ (not (better-jumper--persp-window-config-update-disabled)))
+ (let* ((curr-window (selected-window))
+ (source-jump-struct (better-jumper--get-struct curr-window))
+ (source-jump-list (better-jumper--get-struct-jump-list
source-jump-struct)))
+ (when (not (ring-empty-p source-jump-list))
+ (dolist (window window-list)
+ (let* ((target-jump-struct (better-jumper--get-struct window))
+ (target-jump-list (better-jumper--get-struct-jump-list
target-jump-struct)))
+ (when (ring-empty-p target-jump-list)
+ (setf (better-jumper-jump-list-struct-idx
target-jump-struct) (better-jumper-jump-list-struct-idx source-jump-struct))
+ (setf (better-jumper-jump-list-struct-ring
target-jump-struct) (ring-copy source-jump-list))))))))
+
+ (maphash (lambda (key val)
+ (unless (member key window-list)
+ (remhash key jump-table)))
+ jump-table))))
+
+(add-hook 'window-configuration-change-hook
#'better-jumper--window-configuration-hook)
+
+(defun better-jumper--kill-buffer-hook ()
+ "Run when a buffer is killed and remove buffer from jump list.
+Only runs if context is set to 'buffer."
+ (when (eq better-jumper-context 'buffer)
+ (let* ((jump-table (better-jumper--get-jump-table))
+ (buffer (current-buffer)))
+ (remhash buffer jump-table))))
+
+(add-hook 'kill-buffer-hook #'better-jumper--kill-buffer-hook)
+
(if better-jumper-use-evil-jump-advice
(with-eval-after-load 'evil
(defadvice evil-set-jump (before better-jumper activate)
- [nongnu] elpa/better-jumper 3ad6930b16 12/48: refactor evil jump advice, (continued)
- [nongnu] elpa/better-jumper 3ad6930b16 12/48: refactor evil jump advice, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper e7826affb8 17/48: Improve readme formatting, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 3a0d02071a 18/48: Embed license in elisp comments, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 7926fff2c7 19/48: minor refactors, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 3bbd0a5889 20/48: Use markers in jump list w/ point fallback, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 2c04d4bc09 25/48: Add minor mode + cleanup, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 3aa1a8a766 28/48: Merge pull request #1 from hlissner/patch-1, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper ca6edffe62 30/48: Add new jump behavior config option, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 5600174ba9 02/48: Create LICENSE, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 8e82f33309 01/48: initial WIP implementation, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 06a98185e8 04/48: propertly maintain / cleanup buffer + window jumps,
ELPA Syncer <=
- [nongnu] elpa/better-jumper 3624896c72 05/48: add documentation, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper d6ecaa1f96 07/48: minor refactors + cleanup, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 719e412f43 03/48: Add support restricting jump list to contexts, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper c307a253d9 09/48: Fixup copy struct function, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper f9f0180894 13/48: update documentation, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 8d2b5f4c3a 11/48: Re-implement buffer context support using locals, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 50bf0f7ee7 15/48: add finder-known-keyword to Keywords, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper 055051c391 16/48: cleanup byte compiler warnings, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper dfb80f0eb4 21/48: Add savehist support for buffer context, ELPA Syncer, 2022/01/09
- [nongnu] elpa/better-jumper e5768d3812 22/48: Readme updates, ELPA Syncer, 2022/01/09