[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 0f54727: Undo-tree point release.
From: |
Toby Cubitt |
Subject: |
[elpa] master 0f54727: Undo-tree point release. |
Date: |
Sun, 26 Jan 2020 11:58:14 -0500 (EST) |
branch: master
commit 0f547279c4fdb77a017c66443876d4797d56f397
Author: Toby S. Cubitt <address@hidden>
Commit: Toby S. Cubitt <address@hidden>
Undo-tree point release.
---
packages/undo-tree/undo-tree.el | 299 +++++++++++++++++++++-------------------
1 file changed, 155 insertions(+), 144 deletions(-)
diff --git a/packages/undo-tree/undo-tree.el b/packages/undo-tree/undo-tree.el
index 3a28796..9e51b03 100644
--- a/packages/undo-tree/undo-tree.el
+++ b/packages/undo-tree/undo-tree.el
@@ -4,7 +4,7 @@
;; Author: Toby Cubitt <address@hidden>
;; Maintainer: Toby Cubitt <address@hidden>
-;; Version: 0.7.2
+;; Version: 0.7.3
;; Keywords: convenience, files, undo, redo, history, tree
;; URL: http://www.dr-qubit.org/emacs.php
;; Repository: http://www.dr-qubit.org/git/undo-tree.git
@@ -754,8 +754,9 @@
;;; Code:
-(eval-when-compile (require 'cl))
+(require 'cl-lib)
(require 'diff)
+(require 'gv)
@@ -1146,11 +1147,6 @@ in visualizer."
(defconst undo-tree-visualizer-buffer-name " *undo-tree*")
(defconst undo-tree-diff-buffer-name "*undo-tree Diff*")
-;; install history-auto-save hooks
-(add-hook 'write-file-functions 'undo-tree-save-history-from-hook)
-(add-hook 'kill-buffer-hook 'undo-tree-save-history-from-hook)
-(add-hook 'find-file-hook 'undo-tree-load-history-from-hook)
-
@@ -1286,50 +1282,12 @@ in visualizer."
(setq undo-tree-visualizer-selection-mode-map map)))
-(defvar undo-tree-old-undo-menu-item nil)
-
-(defun undo-tree-update-menu-bar ()
- "Update `undo-tree-mode' Edit menu items."
- (if undo-tree-mode
- (progn
- ;; save old undo menu item, and install undo/redo menu items
- (setq undo-tree-old-undo-menu-item
- (cdr (assq 'undo (lookup-key global-map [menu-bar edit]))))
- (define-key (lookup-key global-map [menu-bar edit])
- [undo] '(menu-item "Undo" undo-tree-undo
- :enable (and undo-tree-mode
- (not buffer-read-only)
- (not (eq t buffer-undo-list))
- (not (eq nil buffer-undo-tree))
- (undo-tree-node-previous
- (undo-tree-current
buffer-undo-tree)))
- :help "Undo last operation"))
- (define-key-after (lookup-key global-map [menu-bar edit])
- [redo] '(menu-item "Redo" undo-tree-redo
- :enable (and undo-tree-mode
- (not buffer-read-only)
- (not (eq t buffer-undo-list))
- (not (eq nil buffer-undo-tree))
- (undo-tree-node-next
- (undo-tree-current
buffer-undo-tree)))
- :help "Redo last operation")
- 'undo))
- ;; uninstall undo/redo menu items
- (define-key (lookup-key global-map [menu-bar edit])
- [undo] undo-tree-old-undo-menu-item)
- (define-key (lookup-key global-map [menu-bar edit])
- [redo] nil)))
-
-(add-hook 'menu-bar-update-hook 'undo-tree-update-menu-bar)
-
-
-
;;; =====================================================================
;;; Undo-tree data structure
-(defstruct
+(cl-defstruct
(undo-tree
:named
(:constructor nil)
@@ -1364,7 +1322,7 @@ in visualizer."
(undo-tree-recircle tree)))
-(defstruct
+(cl-defstruct
(undo-tree-node
(:type vector) ; create unnamed struct
(:constructor nil)
@@ -1420,7 +1378,7 @@ in visualizer."
new))
-(defstruct
+(cl-defstruct
(undo-tree-region-data
(:type vector) ; create unnamed struct
(:constructor nil)
@@ -1468,7 +1426,7 @@ in visualizer."
(undo-tree-region-data-redo-end r))))
-(defsetf undo-tree-node-undo-beginning (node) (val)
+(gv-define-setter undo-tree-node-undo-beginning (node val)
`(let ((r (plist-get (undo-tree-node-meta-data ,node) :region)))
(unless (undo-tree-region-data-p r)
(setf (undo-tree-node-meta-data ,node)
@@ -1476,7 +1434,7 @@ in visualizer."
(setq r (undo-tree-make-region-data)))))
(setf (undo-tree-region-data-undo-beginning r) ,val)))
-(defsetf undo-tree-node-undo-end (node) (val)
+(gv-define-setter undo-tree-node-undo-end (node val)
`(let ((r (plist-get (undo-tree-node-meta-data ,node) :region)))
(unless (undo-tree-region-data-p r)
(setf (undo-tree-node-meta-data ,node)
@@ -1484,7 +1442,7 @@ in visualizer."
(setq r (undo-tree-make-region-data)))))
(setf (undo-tree-region-data-undo-end r) ,val)))
-(defsetf undo-tree-node-redo-beginning (node) (val)
+(gv-define-setter undo-tree-node-redo-beginning (node val)
`(let ((r (plist-get (undo-tree-node-meta-data ,node) :region)))
(unless (undo-tree-region-data-p r)
(setf (undo-tree-node-meta-data ,node)
@@ -1492,7 +1450,7 @@ in visualizer."
(setq r (undo-tree-make-region-data)))))
(setf (undo-tree-region-data-redo-beginning r) ,val)))
-(defsetf undo-tree-node-redo-end (node) (val)
+(gv-define-setter undo-tree-node-redo-end (node val)
`(let ((r (plist-get (undo-tree-node-meta-data ,node) :region)))
(unless (undo-tree-region-data-p r)
(setf (undo-tree-node-meta-data ,node)
@@ -1502,7 +1460,7 @@ in visualizer."
-(defstruct
+(cl-defstruct
(undo-tree-visualizer-data
(:type vector) ; create unnamed struct
(:constructor nil)
@@ -1545,7 +1503,7 @@ in visualizer."
(undo-tree-visualizer-data-marker v))))
-(defsetf undo-tree-node-lwidth (node) (val)
+(gv-define-setter undo-tree-node-lwidth (node val)
`(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
(setf (undo-tree-node-meta-data ,node)
@@ -1553,7 +1511,7 @@ in visualizer."
(setq v (undo-tree-make-visualizer-data)))))
(setf (undo-tree-visualizer-data-lwidth v) ,val)))
-(defsetf undo-tree-node-cwidth (node) (val)
+(gv-define-setter undo-tree-node-cwidth (node val)
`(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
(setf (undo-tree-node-meta-data ,node)
@@ -1561,7 +1519,7 @@ in visualizer."
(setq v (undo-tree-make-visualizer-data)))))
(setf (undo-tree-visualizer-data-cwidth v) ,val)))
-(defsetf undo-tree-node-rwidth (node) (val)
+(gv-define-setter undo-tree-node-rwidth (node val)
`(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
(setf (undo-tree-node-meta-data ,node)
@@ -1569,7 +1527,7 @@ in visualizer."
(setq v (undo-tree-make-visualizer-data)))))
(setf (undo-tree-visualizer-data-rwidth v) ,val)))
-(defsetf undo-tree-node-marker (node) (val)
+(gv-define-setter undo-tree-node-marker (node val)
`(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
(setf (undo-tree-node-meta-data ,node)
@@ -1579,7 +1537,7 @@ in visualizer."
-(defstruct
+(cl-defstruct
(undo-tree-register-data
(:type vector)
(:constructor nil)
@@ -1598,7 +1556,7 @@ in visualizer."
(defmacro undo-tree-node-register (node)
`(plist-get (undo-tree-node-meta-data ,node) :register))
-(defsetf undo-tree-node-register (node) (val)
+(gv-define-setter undo-tree-node-register (node val)
`(setf (undo-tree-node-meta-data ,node)
(plist-put (undo-tree-node-meta-data ,node) :register ,val)))
@@ -1659,8 +1617,8 @@ that are already part of `buffer-undo-tree'."
;; if active branch didn't go via NODE, update parent's branch to point
;; to same node as before
((> (undo-tree-node-branch parent) position)
- (incf (undo-tree-node-branch parent)
- (1- (length (undo-tree-node-next node))))))
+ (cl-incf (undo-tree-node-branch parent)
+ (1- (length (undo-tree-node-next node))))))
;; replace NODE in parent's next list with NODE's entire next list
(if (= position 0)
(setf (undo-tree-node-next parent)
@@ -1695,7 +1653,7 @@ Comparison is done with `eq'."
(catch 'found
(while (progn
(when (eq node (car list)) (throw 'found i))
- (incf i)
+ (cl-incf i)
(setq list (cdr list))))
nil)))
@@ -1707,7 +1665,8 @@ Comparison is done with `eq'."
;; Generate a new, unique id (uninterned symbol).
;; The name is made by appending a number to "undo-tree-id".
;; (Copied from CL package `gensym'.)
- `(let ((num (prog1 *undo-tree-id-counter* (incf *undo-tree-id-counter*))))
+ `(let ((num (prog1 *undo-tree-id-counter*
+ (cl-incf *undo-tree-id-counter*))))
(make-symbol (format "undo-tree-id%d" num))))
@@ -1850,7 +1809,7 @@ Comparison is done with `eq'."
;; `undo-list-transfer-to-tree' should never be called when undo is disabled
;; (i.e. `buffer-undo-tree' is t)
- (assert (not (eq buffer-undo-tree t)))
+ (cl-assert (not (eq buffer-undo-tree t)))
;; if `buffer-undo-tree' is empty, create initial undo-tree
(when (null buffer-undo-tree) (setq buffer-undo-tree (make-undo-tree)))
@@ -1879,8 +1838,8 @@ Comparison is done with `eq'."
;; grow tree fragment backwards using `undo-list' changesets
(while (setq changeset (undo-list-pop-changeset undo-list))
(setq node (undo-tree-grow-backwards node changeset))
- (incf size (undo-list-byte-size (undo-tree-node-undo node)))
- (incf count))
+ (cl-incf size (undo-list-byte-size (undo-tree-node-undo node)))
+ (cl-incf count))
;; if no undo history has been discarded from `undo-list' since last
;; transfer, splice new tree fragment onto end of old
@@ -1890,8 +1849,8 @@ Comparison is done with `eq'."
(setf (undo-tree-node-previous node) splice)
(push node (undo-tree-node-next splice))
(setf (undo-tree-node-branch splice) 0)
- (incf (undo-tree-size buffer-undo-tree) size)
- (incf (undo-tree-count buffer-undo-tree) count))
+ (cl-incf (undo-tree-size buffer-undo-tree) size)
+ (cl-incf (undo-tree-count buffer-undo-tree) count))
;; if undo history has been discarded, replace entire
;; `buffer-undo-tree' with new tree fragment
@@ -1911,9 +1870,9 @@ Comparison is done with `eq'."
;; Return size (in bytes) of UNDO-LIST
(let ((size 0))
(dolist (elt undo-list)
- (incf size 8) ; cons cells use up 8 bytes
+ (cl-incf size 8) ; cons cells use up 8 bytes
(when (stringp (car-safe elt))
- (incf size (string-bytes (car elt)))))
+ (cl-incf size (string-bytes (car elt)))))
size))
@@ -1999,10 +1958,10 @@ Comparison is done with `eq'."
(setq node (setf (undo-tree-root buffer-undo-tree)
(car (undo-tree-node-next node))))
;; update undo-tree size
- (decf (undo-tree-size buffer-undo-tree)
- (+ (undo-list-byte-size (undo-tree-node-undo node))
- (undo-list-byte-size (undo-tree-node-redo node))))
- (decf (undo-tree-count buffer-undo-tree))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (+ (undo-list-byte-size (undo-tree-node-undo node))
+ (undo-list-byte-size (undo-tree-node-redo node))))
+ (cl-decf (undo-tree-count buffer-undo-tree))
;; discard new root's undo data and PREVIOUS link
(setf (undo-tree-node-undo node) nil
(undo-tree-node-redo node) nil
@@ -2024,10 +1983,10 @@ Comparison is done with `eq'."
(when (and r (eq (get-register r) node))
(set-register r nil)))
;; update undo-tree size
- (decf (undo-tree-size buffer-undo-tree)
- (+ (undo-list-byte-size (undo-tree-node-undo node))
- (undo-list-byte-size (undo-tree-node-redo node))))
- (decf (undo-tree-count buffer-undo-tree))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (+ (undo-list-byte-size (undo-tree-node-undo node))
+ (undo-list-byte-size (undo-tree-node-redo node))))
+ (cl-decf (undo-tree-count buffer-undo-tree))
;; discard leaf
(setf (undo-tree-node-next parent)
(delq node (undo-tree-node-next parent))
@@ -2187,23 +2146,23 @@ which is defined in the `warnings' library.\n")
;; compute left-width
(dotimes (_ (/ num-children 2))
(if (undo-tree-node-lwidth (car p))
- (incf lwidth (+ (undo-tree-node-lwidth (car p))
+ (cl-incf lwidth (+ (undo-tree-node-lwidth (car p))
(undo-tree-node-cwidth (car p))
(undo-tree-node-rwidth (car p))))
;; if child's widths haven't been computed, return that child
(throw 'need-widths (car p)))
(setq p (cdr p)))
(if (undo-tree-node-lwidth (car p))
- (incf lwidth (undo-tree-node-lwidth (car p)))
+ (cl-incf lwidth (undo-tree-node-lwidth (car p)))
(throw 'need-widths (car p)))
;; centre-width is inherited from middle child
(setf cwidth (undo-tree-node-cwidth (car p)))
;; compute right-width
- (incf rwidth (undo-tree-node-rwidth (car p)))
+ (cl-incf rwidth (undo-tree-node-rwidth (car p)))
(setq p (cdr p))
(dotimes (_ (/ num-children 2))
(if (undo-tree-node-lwidth (car p))
- (incf rwidth (+ (undo-tree-node-lwidth (car p))
+ (cl-incf rwidth (+ (undo-tree-node-lwidth (car p))
(undo-tree-node-cwidth (car p))
(undo-tree-node-rwidth (car p))))
(throw 'need-widths (car p)))
@@ -2215,7 +2174,7 @@ which is defined in the `warnings' library.\n")
;; compute left-width
(dotimes (_ (/ num-children 2))
(if (undo-tree-node-lwidth (car p))
- (incf lwidth (+ (undo-tree-node-lwidth (car p))
+ (cl-incf lwidth (+ (undo-tree-node-lwidth (car p))
(undo-tree-node-cwidth (car p))
(undo-tree-node-rwidth (car p))))
(throw 'need-widths (car p)))
@@ -2225,7 +2184,7 @@ which is defined in the `warnings' library.\n")
;; compute right-width
(dotimes (_ (/ num-children 2))
(if (undo-tree-node-lwidth (car p))
- (incf rwidth (+ (undo-tree-node-lwidth (car p))
+ (cl-incf rwidth (+ (undo-tree-node-lwidth (car p))
(undo-tree-node-cwidth (car p))
(undo-tree-node-rwidth (car p))))
(throw 'need-widths (car p)))
@@ -2500,10 +2459,10 @@ which is defined in the `warnings' library.\n")
(while (progn
(and (setq node (car (undo-tree-node-next node)))
(not (eq node original-fragment))
- (incf (undo-tree-count buffer-undo-tree))
- (incf (undo-tree-size buffer-undo-tree)
- (+ (undo-list-byte-size (undo-tree-node-undo node))
- (undo-list-byte-size (undo-tree-node-redo
node)))))))
+ (cl-incf (undo-tree-count buffer-undo-tree))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (+ (undo-list-byte-size (undo-tree-node-undo
node))
+ (undo-list-byte-size (undo-tree-node-redo
node)))))))
t) ; indicate undo-in-region branch was successfully pulled
)))
@@ -2660,12 +2619,12 @@ which is defined in the `warnings' library.\n")
(unless repeated-redo-in-region
(setq node fragment)
(while (and (setq node (car (undo-tree-node-next node)))
- (incf (undo-tree-count buffer-undo-tree))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size
- (undo-tree-node-redo node))))))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-redo fragment)))
+ (cl-incf (undo-tree-count buffer-undo-tree))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size
+ (undo-tree-node-redo node))))))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-redo fragment)))
t) ; indicate redo-in-region branch was successfully pulled
)))
@@ -2923,12 +2882,12 @@ changes within the current region."
;; remove any GC'd elements from node's undo list
(setq current (undo-tree-current buffer-undo-tree))
- (decf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-undo current)))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-undo current)))
(setf (undo-tree-node-undo current)
(undo-list-clean-GCd-elts (undo-tree-node-undo current)))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-undo current)))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-undo current)))
;; undo one record from undo tree
(when undo-in-region
(setq pos (set-marker (make-marker) (point)))
@@ -2942,21 +2901,21 @@ changes within the current region."
(if preserve-redo
(progn
(undo-list-pop-changeset buffer-undo-list)
- (decf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-redo current)))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-redo current)))
(setf (undo-tree-node-redo current)
(undo-list-clean-GCd-elts (undo-tree-node-redo current)))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-redo current))))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-redo current))))
;; otherwise, record redo entries that `primitive-undo' has added to
;; `buffer-undo-list' in current node's redo record, replacing
;; existing entry if one already exists
- (decf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-redo current)))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-redo current)))
(setf (undo-tree-node-redo current)
(undo-list-pop-changeset buffer-undo-list 'discard-pos))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-redo current))))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-redo current))))
;; rewind current node and update timestamp
(setf (undo-tree-current buffer-undo-tree)
@@ -3036,12 +2995,12 @@ changes within the current region."
current (nth (undo-tree-node-branch current)
(undo-tree-node-next current)))
;; remove any GC'd elements from node's redo list
- (decf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-redo current)))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-redo current)))
(setf (undo-tree-node-redo current)
(undo-list-clean-GCd-elts (undo-tree-node-redo current)))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-redo current)))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-redo current)))
;; redo one record from undo tree
(when redo-in-region
(setq pos (set-marker (make-marker) (point)))
@@ -3057,21 +3016,21 @@ changes within the current region."
(if preserve-undo
(progn
(undo-list-pop-changeset buffer-undo-list)
- (decf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-undo current)))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-undo current)))
(setf (undo-tree-node-undo current)
(undo-list-clean-GCd-elts (undo-tree-node-undo current)))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-undo current))))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-undo current))))
;; otherwise, record undo entries that `primitive-undo' has added to
;; `buffer-undo-list' in current node's undo record, replacing
;; existing entry if one already exists
- (decf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-undo current)))
+ (cl-decf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-undo current)))
(setf (undo-tree-node-undo current)
(undo-list-pop-changeset buffer-undo-list 'discard-pos))
- (incf (undo-tree-size buffer-undo-tree)
- (undo-list-byte-size (undo-tree-node-undo current))))
+ (cl-incf (undo-tree-size buffer-undo-tree)
+ (undo-list-byte-size (undo-tree-node-undo current))))
;; update timestamp
(unless preserve-timestamps
@@ -3214,6 +3173,48 @@ Argument is a character, naming the register."
;;; =====================================================================
+;;; Undo-tree menu bar
+
+(defvar undo-tree-old-undo-menu-item nil)
+
+(defun undo-tree-update-menu-bar ()
+ "Update `undo-tree-mode' Edit menu items."
+ (if undo-tree-mode
+ (progn
+ ;; save old undo menu item, and install undo/redo menu items
+ (setq undo-tree-old-undo-menu-item
+ (cdr (assq 'undo (lookup-key global-map [menu-bar edit]))))
+ (define-key (lookup-key global-map [menu-bar edit])
+ [undo] '(menu-item "Undo" undo-tree-undo
+ :enable (and undo-tree-mode
+ (not buffer-read-only)
+ (not (eq t buffer-undo-list))
+ (not (eq nil buffer-undo-tree))
+ (undo-tree-node-previous
+ (undo-tree-current
buffer-undo-tree)))
+ :help "Undo last operation"))
+ (define-key-after (lookup-key global-map [menu-bar edit])
+ [redo] '(menu-item "Redo" undo-tree-redo
+ :enable (and undo-tree-mode
+ (not buffer-read-only)
+ (not (eq t buffer-undo-list))
+ (not (eq nil buffer-undo-tree))
+ (undo-tree-node-next
+ (undo-tree-current
buffer-undo-tree)))
+ :help "Redo last operation")
+ 'undo))
+ ;; uninstall undo/redo menu items
+ (define-key (lookup-key global-map [menu-bar edit])
+ [undo] undo-tree-old-undo-menu-item)
+ (define-key (lookup-key global-map [menu-bar edit])
+ [redo] nil)))
+
+(add-hook 'menu-bar-update-hook 'undo-tree-update-menu-bar)
+
+
+
+
+;;; =====================================================================
;;; Persistent storage commands
(defun undo-tree-make-history-save-file-name (file)
@@ -3408,6 +3409,12 @@ Note this will overwrite any existing undo history."
version 0.6.6. Use `undo-tree-load-history-from-hook' instead.")
+;; install history-auto-save hooks
+(add-hook 'write-file-functions #'undo-tree-save-history-from-hook)
+(add-hook 'kill-buffer-hook #'undo-tree-save-history-from-hook)
+(add-hook 'find-file-hook #'undo-tree-load-history-from-hook)
+
+
;;; =====================================================================
@@ -4057,7 +4064,7 @@ Note this will overwrite any existing undo history."
;;; =====================================================================
-;;; Visualizer commands
+;;; Visualizer modes
(define-derived-mode
undo-tree-visualizer-mode special-mode "undo-tree-visualizer"
@@ -4079,6 +4086,34 @@ Within the undo-tree visualizer, the following keys are
available:
(setq undo-tree-visualizer-selected-node nil))
+(define-minor-mode undo-tree-visualizer-selection-mode
+ "Toggle mode to select nodes in undo-tree visualizer."
+ :lighter "Select"
+ :keymap undo-tree-visualizer-selection-mode-map
+ :group undo-tree
+ (cond
+ ;; enable selection mode
+ (undo-tree-visualizer-selection-mode
+ (setq cursor-type 'box)
+ (setq undo-tree-visualizer-selected-node
+ (undo-tree-current buffer-undo-tree))
+ ;; erase diff (if any), as initially selected node is identical to current
+ (when undo-tree-visualizer-diff
+ (let ((buff (get-buffer undo-tree-diff-buffer-name))
+ (inhibit-read-only t))
+ (when buff (with-current-buffer buff (erase-buffer))))))
+ (t ;; disable selection mode
+ (setq cursor-type nil)
+ (setq undo-tree-visualizer-selected-node nil)
+ (goto-char (undo-tree-node-marker (undo-tree-current buffer-undo-tree)))
+ (when undo-tree-visualizer-diff (undo-tree-visualizer-update-diff)))
+ ))
+
+
+
+
+;;; =====================================================================
+;;; Visualizer commands
(defun undo-tree-visualize-undo (&optional arg)
"Undo changes. A numeric ARG serves as a repeat count."
@@ -4409,31 +4444,7 @@ specifies `saved', and a negative prefix argument
specifies
;;; =====================================================================
-;;; Visualizer selection mode
-
-(define-minor-mode undo-tree-visualizer-selection-mode
- "Toggle mode to select nodes in undo-tree visualizer."
- :lighter "Select"
- :keymap undo-tree-visualizer-selection-mode-map
- :group undo-tree
- (cond
- ;; enable selection mode
- (undo-tree-visualizer-selection-mode
- (setq cursor-type 'box)
- (setq undo-tree-visualizer-selected-node
- (undo-tree-current buffer-undo-tree))
- ;; erase diff (if any), as initially selected node is identical to current
- (when undo-tree-visualizer-diff
- (let ((buff (get-buffer undo-tree-diff-buffer-name))
- (inhibit-read-only t))
- (when buff (with-current-buffer buff (erase-buffer))))))
- (t ;; disable selection mode
- (setq cursor-type nil)
- (setq undo-tree-visualizer-selected-node nil)
- (goto-char (undo-tree-node-marker (undo-tree-current buffer-undo-tree)))
- (when undo-tree-visualizer-diff (undo-tree-visualizer-update-diff)))
- ))
-
+;;; Visualizer selection mode commands
(defun undo-tree-visualizer-select-previous (&optional arg)
"Move to previous node."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] master 0f54727: Undo-tree point release.,
Toby Cubitt <=