branch: elpa/goto-chg
commit 4c32adf65aaef21b215eb6e5585b31700b51e2d9
Author: Vasilij Schneidermann <[email protected]>
Commit: Vasilij Schneidermann <[email protected]>
Handle undo-tree-mode
Code adapted from https://github.com/martinp26/goto-chg
---
goto-chg.el | 51 ++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 40 insertions(+), 11 deletions(-)
diff --git a/goto-chg.el b/goto-chg.el
index 71e5501..7defb0c 100644
--- a/goto-chg.el
+++ b/goto-chg.el
@@ -251,7 +251,9 @@ discarded. See variable `undo-limit'."
(n 0) ; Steps in undo list (length of 'rev')
(l buffer-undo-list)
(passed-save-entry (not (buffer-modified-p)))
- (new-probe-depth glc-probe-depth))
+ (new-probe-depth glc-probe-depth)
+ (undo-tree-p (bound-and-true-p undo-tree-mode))
+ glc-seen-canary)
;; Walk back and forth in the buffer-undo-list, each time one step deeper,
;; until we can walk back the whole list with a 'pos' that is not coming
;; too close to another edit.
@@ -268,16 +270,43 @@ discarded. See variable `undo-limit'."
(message "working..."))
;; Walk forward in buffer-undo-list, glc-probe-depth steps.
;; Build reverse list along the way
- (while (< n new-probe-depth)
- (cond ((null l)
- ;(setq this-command t) ; Disrupt repeat sequence
- (error "No further change info"))
- ((glc-is-positionable (car l))
- (setq n (1+ n)
- rev (cons (car l) rev)))
- ((or passed-save-entry (glc-is-filetime (car l)))
- (setq passed-save-entry t)))
- (setq l (cdr l)))
+ (if (not undo-tree-p)
+ (while (< n new-probe-depth)
+ (cond ((null l)
+ ;(setq this-command t) ; Disrupt repeat sequence
+ (error "No further change info"))
+ ((glc-is-positionable (car l))
+ (setq n (1+ n)
+ rev (cons (car l) rev)))
+ ((or passed-save-entry (glc-is-filetime (car l)))
+ (setq passed-save-entry t)))
+ (setq l (cdr l)))
+ (when (not glc-seen-canary)
+ (while (and (not (null l)) (not glc-seen-canary) (< n
new-probe-depth))
+ (cond ((eq 'undo-tree-canary (car l)) ; used by buffer-undo-tree
+ (message "Canary found...")
+ (setq l (undo-tree-current buffer-undo-tree)
+ glc-seen-canary t))
+ ((glc-is-positionable (car l))
+ (setq n (1+ n)
+ rev (cons (car l) rev)))
+ ((or passed-save-entry (glc-is-filetime (car l)))
+ (setq passed-save-entry t)))
+ (when (not glc-seen-canary)
+ (setq l (cdr l)))))
+ (when glc-seen-canary
+ (while (< n new-probe-depth)
+ (cond ((null l)
+ ;(setq this-command t) ; Disrupt repeat sequence
+ (error "No further change info"))
+ ((glc-is-positionable (car (undo-tree-node-undo l)))
+ (setq n (1+ n)
+ rev (cons (car (undo-tree-node-undo l)) rev)))
+ ((or passed-save-entry (glc-is-filetime (car
(undo-tree-node-undo l))))
+ (setq passed-save-entry t)))
+ (setq l (undo-tree-node-previous l))))
+ (when (null l)
+ (error "No further change info")))
;; Walk back in reverse list, from older to newer edits.
;; Adjusting pos along the way.
(setq pos (glc-adjust-list rev)))