[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/undo-tree ad38c6a 020/195: Reuse node markers in undo-t
From: |
Stefan Monnier |
Subject: |
[elpa] externals/undo-tree ad38c6a 020/195: Reuse node markers in undo-tree-draw-tree and undo-tree-draw-subtree, |
Date: |
Sat, 28 Nov 2020 13:41:12 -0500 (EST) |
branch: externals/undo-tree
commit ad38c6ad88556fa72cf6611e4e61c609e4788619
Author: tsc25 <tsc25@cantab.net>
Commit: tsc25 <tsc25@cantab.net>
Reuse node markers in undo-tree-draw-tree and undo-tree-draw-subtree,
instead of creating new ones for recording positions at which to draw
subtrees.
---
undo-tree.el | 76 +++++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 49 insertions(+), 27 deletions(-)
diff --git a/undo-tree.el b/undo-tree.el
index 0aa3aa0..8df7dc1 100644
--- a/undo-tree.el
+++ b/undo-tree.el
@@ -989,14 +989,19 @@ using `undo-tree-redo'."
2))) ; left margin
;; draw undo-tree
(let ((undo-tree-insert-face 'undo-tree-visualizer-default-face)
- (stack (list (cons (move-marker (make-marker) (point))
- (undo-tree-root undo-tree))))
- n)
+ (stack (list (undo-tree-root undo-tree)))
+ (n (undo-tree-root undo-tree)))
+ ;; link root node to its representation in visualizer
+ (unless (markerp (undo-tree-node-marker n))
+ (setf (undo-tree-node-marker n) (make-marker))
+ (set-marker-insertion-type (undo-tree-node-marker n) nil))
+ (move-marker (undo-tree-node-marker n) (point))
+ ;; draw nodes from stack until stack is empty
(save-excursion
(while stack
(setq n (pop stack))
- (goto-char (car n))
- (setq n (undo-tree-draw-subtree (cdr n)))
+ (goto-char (undo-tree-node-marker n))
+ (setq n (undo-tree-draw-subtree n))
(setq stack (append stack n)))))
;; highlight active branch
(let ((undo-tree-insert-face 'undo-tree-visualizer-active-branch-face))
@@ -1009,13 +1014,18 @@ using `undo-tree-redo'."
(defun undo-tree-highlight-active-branch (node)
;; Draw highlighted active branch below NODE in current buffer.
- (let ((stack (list (cons (move-marker (make-marker) (point)) node)))
- n)
+ (let ((stack (list node)))
+ ;; link node to its representation in visualizer
+ (unless (markerp (undo-tree-node-marker node))
+ (setf (undo-tree-node-marker node) (make-marker))
+ (set-marker-insertion-type (undo-tree-node-marker node) nil))
+ (move-marker (undo-tree-node-marker node) (point))
+ ;; draw active branch
(while stack
- (setq n (pop stack))
- (goto-char (car n))
- (setq n (undo-tree-draw-subtree (cdr n) 'active))
- (setq stack (append stack n)))))
+ (setq node (pop stack))
+ (goto-char (undo-tree-node-marker node))
+ (setq node (undo-tree-draw-subtree node 'active))
+ (setq stack (append stack node)))))
(defun undo-tree-draw-subtree (node &optional active-branch)
@@ -1024,12 +1034,9 @@ using `undo-tree-redo'."
(let ((num-children (length (undo-tree-node-next node)))
node-list pos trunk-pos n)
- ;; draw node itself, and link it to node in tree
+ ;; draw node itself, and link it back to node in tree
(undo-tree-insert ?o)
(backward-char 1)
- (unless (markerp (undo-tree-node-marker node))
- (setf (undo-tree-node-marker node) (make-marker)))
- (move-marker (undo-tree-node-marker node) (point))
(put-text-property (point) (1+ (point)) 'undo-tree-node node)
(cond
@@ -1047,10 +1054,14 @@ using `undo-tree-redo'."
(undo-tree-insert ?|)
(backward-char 1)
(undo-tree-move-down 1)
+ (setq n (undo-tree-node-next node))
+ ;; link next node to its representation in visualizer
+ (unless (markerp (undo-tree-node-marker n))
+ (setf (undo-tree-node-marker n) (make-marker))
+ (set-marker-insertion-type (undo-tree-node-marker n) nil))
+ (move-marker (undo-tree-node-marker n) (point))
;; add next node to list of nodes to draw next
- (push (cons (move-marker (make-marker) (point))
- (car (undo-tree-node-next node)))
- node-list))
+ (push n node-list))
;; if node had multiple children, draw branches
(t
@@ -1079,10 +1090,13 @@ using `undo-tree-redo'."
(undo-tree-insert ?/)
(backward-char 2)
(undo-tree-move-down 1)
+ ;; link node to its representation in visualizer
+ (unless (markerp (undo-tree-node-marker (car n)))
+ (setf (undo-tree-node-marker (car n)) (make-marker))
+ (set-marker-insertion-type (undo-tree-node-marker (car n)) nil))
+ (move-marker (undo-tree-node-marker (car n)) (point))
;; add node to list of nodes to draw next
- (push (cons (move-marker (make-marker) (point))
- (car n))
- node-list))
+ (push (car n) node-list))
(goto-char pos)
(undo-tree-move-forward
(+ (undo-tree-node-char-rwidth (car n))
@@ -1100,9 +1114,13 @@ using `undo-tree-redo'."
(undo-tree-insert ?|)
(backward-char 1)
(undo-tree-move-down 1)
- (push (cons (move-marker (make-marker) (point))
- (car n))
- node-list))
+ ;; link node to its representation in visualizer
+ (unless (markerp (undo-tree-node-marker (car n)))
+ (setf (undo-tree-node-marker (car n)) (make-marker))
+ (set-marker-insertion-type (undo-tree-node-marker (car n)) nil))
+ (move-marker (undo-tree-node-marker (car n)) (point))
+ ;; add node to list of nodes to draw next
+ (push (car n) node-list))
(goto-char pos)
(undo-tree-move-forward
(+ (undo-tree-node-char-rwidth (car n))
@@ -1124,9 +1142,13 @@ using `undo-tree-redo'."
(undo-tree-move-down 1)
(undo-tree-insert ?\\)
(undo-tree-move-down 1)
- (push (cons (move-marker (make-marker) (point))
- (car n))
- node-list))
+ ;; link node to its representation in visualizer
+ (unless (markerp (undo-tree-node-marker (car n)))
+ (setf (undo-tree-node-marker (car n)) (make-marker))
+ (set-marker-insertion-type (undo-tree-node-marker (car n)) nil))
+ (move-marker (undo-tree-node-marker (car n)) (point))
+ ;; add node to list of nodes to draw next
+ (push (car n) node-list))
(when (cdr n)
(goto-char pos)
(undo-tree-move-forward
- [elpa] branch externals/undo-tree created (now bf2e9ba), Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree eae16c8 009/195: Implemented visualizer major-mode and commands., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree a46761a 022/195: Added "canary" to detect and deal with undo history being discarded, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 2fa1824 021/195: Implemented display of time-stamps in visualizer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 2c18d4a 010/195: Implemented active branch highlighting in visualizer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 9b14800 018/195: Rewrote undo-tree-compute-widths and undo-tree-clear-visualizer-data, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree aa550da 025/195: Implemented undo history discarding so as to remain within memory usage limits, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree ad38c6a 020/195: Reuse node markers in undo-tree-draw-tree and undo-tree-draw-subtree,,
Stefan Monnier <=
- [elpa] externals/undo-tree 486964c 014/195: Centre undo-tree in visualizer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree ff2fd6e 011/195: Implemented undo-tree-mode minor mode., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 30dc485 013/195: Clear visualizer data when quitting visualizer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree e0b8308 015/195: Implemented commands to set buffer state to any given undo-tree node., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 0368f0f 006/195: Implemented undo-tree visualisation., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 711dd60 003/195: Implemented undo-tree data structure and undo command., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree b15904c 023/195: Update timestamps when nodes are visited by undo/redo., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 21d3c89 004/195: Implemented redo command., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree f87f815 024/195: Added utility functions for use in discarding undo history., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree dcabd4f 002/195: Added .gitignore to ignore byte-compiled elisp files., Stefan Monnier, 2020/11/28