[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/undo-tree f87f815 024/195: Added utility functions for
From: |
Stefan Monnier |
Subject: |
[elpa] externals/undo-tree f87f815 024/195: Added utility functions for use in discarding undo history. |
Date: |
Sat, 28 Nov 2020 13:41:13 -0500 (EST) |
branch: externals/undo-tree
commit f87f8154af31af2557b3713d592988a2bb4a5792
Author: tsc25 <tsc25@cantab.net>
Commit: tsc25 <tsc25@cantab.net>
Added utility functions for use in discarding undo history.
---
undo-tree.el | 42 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 41 insertions(+), 1 deletion(-)
diff --git a/undo-tree.el b/undo-tree.el
index 24c7128..e8c3832 100644
--- a/undo-tree.el
+++ b/undo-tree.el
@@ -426,6 +426,10 @@
(make-variable-buffer-local 'buffer-undo-tree)
+(defconst undo-tree-cons-byte-size 8
+ "Size (in bytes) of a cons cell.")
+
+
(defgroup undo-tree nil
"Tree undo/redo."
:group 'undo)
@@ -578,6 +582,7 @@ in visualizer.")
(:copier nil))
previous next undo redo timestamp branch visualizer)
+
(defmacro undo-tree-node-p (n)
(let ((len (length (make-undo-tree-node nil nil))))
`(and (vectorp ,n) (= (length ,n) ,len))))
@@ -761,7 +766,6 @@ part of `buffer-undo-tree'."
(vector lwidth cwidth rwidth))))
-
(defun undo-tree-clear-visualizer-data (undo-tree)
;; Clear visualizer data from UNDO-TREE.
(let ((stack (list (undo-tree-root undo-tree)))
@@ -791,6 +795,32 @@ Comparison is done with 'eq."
'(length (undo-tree-node-next (undo-tree-current buffer-undo-tree))))
+(defun undo-tree-oldest-leaf (node)
+ ;; Return oldest leaf node below NODE.
+ (while (undo-tree-node-next node)
+ (setq node
+ (car (sort (mapcar 'identity (undo-tree-node-next node))
+ (lambda (a b)
+ (time-less-p (undo-tree-node-timestamp a)
+ (undo-tree-node-timestamp b)))))))
+ node)
+
+
+(defun undo-tree-discard-node (node)
+ ;; Discrard NODE, and return next in line for discarding.
+ (let ((parent (undo-tree-node-previous node)))
+ (when parent
+ (setf (undo-tree-node-next parent)
+ (delq node (undo-tree-node-next parent)))
+ (if (undo-tree-node-next parent)
+ (undo-tree-oldest-leaf parent)
+ parent))))
+
+
+
+;;; =====================================================================
+;;; Utility functions for handling `buffer-undo-list'
+
(defun undo-list-pop-changeset ()
;; Pop changeset from `buffer-undo-list'.
;; discard undo boundaries at head of list
@@ -836,6 +866,16 @@ Comparison is done with 'eq."
))))
+(defun undo-list-size (undo-list)
+ ;; Return size (in bytes) of UNDO-LIST
+ (let ((size 0) (p undo-list))
+ (while p
+ (setq size (+ size undo-tree-cons-byte-size))
+ (when (and (consp (car p)) (stringp (caar p)))
+ (setq size (+ size (string-bytes (caar p)))))
+ (setq p (cdr p)))
+ size))
+
;;; =====================================================================
- [elpa] externals/undo-tree aa550da 025/195: Implemented undo history discarding so as to remain within memory usage limits, (continued)
- [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, 2020/11/28
- [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 <=
- [elpa] externals/undo-tree dcabd4f 002/195: Added .gitignore to ignore byte-compiled elisp files., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree f370170 019/195: Rewrote undo-tree-draw-tree and undo-tree-draw-subtree, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 73c1d04 007/195: Lumped visualizer data into single undo-tree node entry,, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 4dd6905 028/195: Discard marker adjustment undo entries., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 09fb370 027/195: Added lighter to undo-tree-mode., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree b074b86 029/195: Updated commentary, and switched to GPLv3., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree c00c1fe 031/195: Add new undo-tree-kill-visualizer to before-change-functions hook, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree aaa4c6d 012/195: Don't create new marker each time we draw a node., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 159c9b4 005/195: Implemented undo-tree branch switching., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 0bbfa5c 026/195: Tweaked commentary., Stefan Monnier, 2020/11/28