[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/undo-tree 227473a 058/195: Modified undo-tree-node defs
From: |
Stefan Monnier |
Subject: |
[elpa] externals/undo-tree 227473a 058/195: Modified undo-tree-node defstruct and macros to allow arbitrary meta-data |
Date: |
Sat, 28 Nov 2020 13:41:21 -0500 (EST) |
branch: externals/undo-tree
commit 227473a6ce4d3a19cc8934fa1c63d72ad0d8d211
Author: Toby S. Cubitt <toby-undo-tree@dr-qubit.org>
Commit: Toby S. Cubitt <toby-undo-tree@dr-qubit.org>
Modified undo-tree-node defstruct and macros to allow arbitrary meta-data
to be stored in a plist associated with a node, and reimplemented storage of
visualizer data on top of this.
---
undo-tree.el | 86 ++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 52 insertions(+), 34 deletions(-)
diff --git a/undo-tree.el b/undo-tree.el
index c47119e..9d54c54 100644
--- a/undo-tree.el
+++ b/undo-tree.el
@@ -5,7 +5,7 @@
;; Copyright (C) 2009-2010 Toby Cubitt
;; Author: Toby Cubitt <toby-undo-tree@dr-qubit.org>
-;; Version: 0.2
+;; Version: 0.2.1
;; Keywords: undo, redo, history, tree
;; URL: http://www.dr-qubit.org/emacs.php
;; Git Repository: http://www.dr-qubit.org/git/undo-tree.git
@@ -475,6 +475,12 @@
;;; Change Log:
+;;
+;; Version 0.2.1
+;; * modified `undo-tree-node' defstruct and macros to allow arbitrary
+;; meta-data to be stored in a plist associated with a node, and
+;; reimplemented storage of visualizer data on top of this
+;;
;; Version 0.2
;; * added support for marker undo entries
;;
@@ -739,7 +745,7 @@ in visualizer."
(timestamp (current-time))
(branch 0)))
(:copier nil))
- previous next undo redo timestamp branch visualizer)
+ previous next undo redo timestamp branch meta-data)
(defmacro undo-tree-node-p (n)
@@ -752,7 +758,8 @@ in visualizer."
(undo-tree-visualizer-data
(:type vector) ; create unnamed struct
(:constructor nil)
- (:constructor make-undo-tree-visualizer-data)
+ (:constructor make-undo-tree-visualizer-data
+ (&optional lwidth cwidth rwidth marker))
(:copier nil))
lwidth cwidth rwidth marker)
@@ -761,53 +768,65 @@ in visualizer."
(let ((len (length (make-undo-tree-visualizer-data))))
`(and (vectorp ,v) (= (length ,v) ,len))))
+(defmacro undo-tree-node-clear-visualizer-data (node)
+ `(setf (undo-tree-node-meta-data ,node)
+ (delq nil
+ (delq :visualizer
+ (plist-put (undo-tree-node-meta-data ,node)
+ :visualizer nil)))))
+
+
(defmacro undo-tree-node-lwidth (node)
- `(when (vectorp (undo-tree-node-visualizer ,node))
- (undo-tree-visualizer-data-lwidth
- (undo-tree-node-visualizer ,node))))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
+ (when (undo-tree-visualizer-data-p v)
+ (undo-tree-visualizer-data-lwidth v))))
(defmacro undo-tree-node-cwidth (node)
- `(when (vectorp (undo-tree-node-visualizer ,node))
- (undo-tree-visualizer-data-cwidth
- (undo-tree-node-visualizer ,node))))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
+ (when (undo-tree-visualizer-data-p v)
+ (undo-tree-visualizer-data-cwidth v))))
(defmacro undo-tree-node-rwidth (node)
- `(when (vectorp (undo-tree-node-visualizer ,node))
- (undo-tree-visualizer-data-rwidth
- (undo-tree-node-visualizer ,node))))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
+ (when (undo-tree-visualizer-data-p v)
+ (undo-tree-visualizer-data-rwidth v))))
(defmacro undo-tree-node-marker (node)
- `(when (vectorp (undo-tree-node-visualizer ,node))
- (undo-tree-visualizer-data-marker
- (undo-tree-node-visualizer ,node))))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
+ (when (undo-tree-visualizer-data-p v)
+ (undo-tree-visualizer-data-marker v))))
(defsetf undo-tree-node-lwidth (node) (val)
- `(let ((v (undo-tree-node-visualizer ,node)))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
- (setf (undo-tree-node-visualizer ,node)
- (setq v (make-undo-tree-visualizer-data))))
+ (setf (undo-tree-node-meta-data ,node)
+ (plist-put (undo-tree-node-meta-data ,node) :visualizer
+ (setq v (make-undo-tree-visualizer-data)))))
(setf (undo-tree-visualizer-data-lwidth v) ,val)))
(defsetf undo-tree-node-cwidth (node) (val)
- `(let ((v (undo-tree-node-visualizer ,node)))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
- (setf (undo-tree-node-visualizer ,node)
- (setq v (make-undo-tree-visualizer-data))))
+ (setf (undo-tree-node-meta-data ,node)
+ (plist-put (undo-tree-node-meta-data ,node) :visualizer
+ (setq v (make-undo-tree-visualizer-data)))))
(setf (undo-tree-visualizer-data-cwidth v) ,val)))
(defsetf undo-tree-node-rwidth (node) (val)
- `(let ((v (undo-tree-node-visualizer ,node)))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
- (setf (undo-tree-node-visualizer ,node)
- (setq v (make-undo-tree-visualizer-data))))
+ (setf (undo-tree-node-meta-data ,node)
+ (plist-put (undo-tree-node-meta-data ,node) :visualizer
+ (setq v (make-undo-tree-visualizer-data)))))
(setf (undo-tree-visualizer-data-rwidth v) ,val)))
(defsetf undo-tree-node-marker (node) (val)
- `(let ((v (undo-tree-node-visualizer ,node)))
+ `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer)))
(unless (undo-tree-visualizer-data-p v)
- (setf (undo-tree-node-visualizer ,node)
- (setq v (make-undo-tree-visualizer-data))))
+ (setf (undo-tree-node-meta-data ,node)
+ (plist-put (undo-tree-node-meta-data ,node) :visualizer
+ (setq v (make-undo-tree-visualizer-data)))))
(setf (undo-tree-visualizer-data-marker v) ,val)))
@@ -1263,13 +1282,9 @@ which is defined in the `warnings' library.\n")
(defun undo-tree-clear-visualizer-data (undo-tree)
;; Clear visualizer data from UNDO-TREE.
- (let ((stack (list (undo-tree-root undo-tree)))
- node)
- (while stack
- (setq node (pop stack))
- (setf (undo-tree-node-visualizer node) nil)
- (dolist (n (undo-tree-node-next node))
- (push n stack)))))
+ (undo-tree-mapc
+ (lambda (node) (undo-tree-node-clear-visualizer-data node))
+ undo-tree))
@@ -1511,6 +1526,7 @@ Argument is a character, naming the register."
(defun undo-tree-visualize ()
"Visualize the current buffer's undo tree."
(interactive)
+ (deactivate-mark)
;; throw error if undo is disabled in buffer
(when (eq buffer-undo-list t) (error "No undo information in this buffer"))
;; transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree'
@@ -1840,6 +1856,7 @@ Within the undo-tree visualizer, the following keys are
available:
(let ((undo-tree-insert-face 'undo-tree-visualizer-active-branch-face))
(undo-tree-draw-node (undo-tree-current buffer-undo-tree)))
(switch-to-buffer-other-window undo-tree-visualizer-parent-buffer)
+ (deactivate-mark)
(unwind-protect
(undo-tree-undo arg)
(switch-to-buffer-other-window undo-tree-visualizer-buffer-name)
@@ -1855,6 +1872,7 @@ Within the undo-tree visualizer, the following keys are
available:
(let ((undo-tree-insert-face 'undo-tree-visualizer-active-branch-face))
(undo-tree-draw-node (undo-tree-current buffer-undo-tree)))
(switch-to-buffer-other-window undo-tree-visualizer-parent-buffer)
+ (deactivate-mark)
(unwind-protect
(undo-tree-redo arg)
(switch-to-buffer-other-window undo-tree-visualizer-buffer-name)
- [elpa] externals/undo-tree f3fc5cd 037/195: Modified undo-tree-undo/redo to always replace redo/undo entries, (continued)
- [elpa] externals/undo-tree f3fc5cd 037/195: Modified undo-tree-undo/redo to always replace redo/undo entries, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree f93420b 038/195: Remap undo-only to undo-tree-undo in undo-tree-map., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree f8c3abf 039/195: Replaced save-excursion's with with-current-buffer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 723eeeb 040/195: Improved undo-tree-visualizer-quit behaviour, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 8871f91 041/195: Added header containing git repository URL., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 3f5cc71 045/195: Updated commentary to include register commands,, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 5176770 047/195: Added missing Change Log entry., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree f44688d 048/195: Prevent debugger being called on "No further redo information" error., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree bff9f31 049/195: Made undo-tree-visualizer-quit select window displaying parent buffer, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 04b1a6f 054/195: Fixed bugs in history-discarding logic., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 227473a 058/195: Modified undo-tree-node defstruct and macros to allow arbitrary meta-data,
Stefan Monnier <=
- [elpa] externals/undo-tree 011e11e 061/195: Rebuild buffer-undo-list from tree when disabling undo-tree-mode., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree a4b591b 059/195: Indicate registers storing undo-tree state in visualizer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 6ab787bd 063/195: Added explanation of undo-in-region to Commentary., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 99903d9 053/195: Made visualizer buffer name into a defconst,, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 2fd006f 055/195: Fixed bug in undo-tree-insert triggered by undo-tree-visualizer-set., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree e569c17 056/195: Added missing changelog entry., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 5d2f73c 057/195: Implemented support for marker entries in undo changesets!, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 0ed621d 062/195: Implemented undo-in-region., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 8b1bae6 060/195: Implemented keyboard selection in visualizer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 309f4bc 066/195: Define region-active-p if not already defined, for compatibility, Stefan Monnier, 2020/11/28