branch: elpa/goto-chg commit 4c32adf65aaef21b215eb6e5585b31700b51e2d9 Author: Vasilij Schneidermann <m...@vasilij.de> Commit: Vasilij Schneidermann <m...@vasilij.de>
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)))