[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/undo-tree 62e6097 044/195: Added undo-tree-save/restore
From: |
Stefan Monnier |
Subject: |
[elpa] externals/undo-tree 62e6097 044/195: Added undo-tree-save/restore-state-to/from-register commands and keybindings |
Date: |
Sat, 28 Nov 2020 13:41:18 -0500 (EST) |
branch: externals/undo-tree
commit 62e6097f8d9e05791bde507741f310a6dc5cd36e
Author: tsc25 <tsc25@cantab.net>
Commit: tsc25 <tsc25@cantab.net>
Added undo-tree-save/restore-state-to/from-register commands and keybindings
for saving/restoring buffer states using registers.
---
undo-tree.el | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 52 insertions(+), 3 deletions(-)
diff --git a/undo-tree.el b/undo-tree.el
index fcac771..59225c2 100644
--- a/undo-tree.el
+++ b/undo-tree.el
@@ -467,6 +467,9 @@
;; * added `undo-tree-mode-lighter' customization option to allow the
;; mode-line lighter to be changed
;; * bug-fix in `undo-tree-discard-node'
+;; * added `undo-tree-save-state-to-register' and
+;; `undo-tree-restore-state-from-register' commands and keybindings for
+;; saving/restoring buffer states using registers
;;
;; Version 0.1.5
;; * modified `undo-tree-visualize' to mark the visualizer window as
@@ -592,13 +595,18 @@ in visualizer."
;; bind standard undo bindings (since these match redo counterparts)
(define-key undo-tree-map (kbd "C-/") 'undo-tree-undo)
(define-key undo-tree-map "\C-_" 'undo-tree-undo)
- ;; redo doesn't exist normally, so define out own keybindings
+ ;; redo doesn't exist normally, so define our own keybindings
(define-key undo-tree-map (kbd "C-?") 'undo-tree-redo)
(define-key undo-tree-map (kbd "M-_") 'undo-tree-redo)
- ;; just in case something has defined it...
+ ;; just in case something has defined `redo'...
(define-key undo-tree-map [remap redo] 'undo-tree-redo)
;; we use "C-x u" for the undo-tree visualizer
- (define-key undo-tree-map (kbd "\C-x u") 'undo-tree-visualize))
+ (define-key undo-tree-map (kbd "\C-x u") 'undo-tree-visualize)
+ ;; bind register commands
+ (define-key undo-tree-map (kbd "C-x r u")
+ 'undo-tree-save-state-to-register)
+ (define-key undo-tree-map (kbd "C-x r U")
+ 'undo-tree-restore-state-from-register))
(unless undo-tree-visualizer-map
@@ -1301,6 +1309,47 @@ using `undo-tree-redo'."
+(defun undo-tree-save-state-to-register (register)
+ "Store current undo-tree state to REGISTER.
+The saved state can be restored using
+`undo-tree-restore-state-from-register'.
+Argument is a character, naming the register."
+ (interactive "cUndo-tree state to register: ")
+ ;; throw error if undo is disabled in buffer
+ (when (eq buffer-undo-list t) (error "No undo information in this buffer"))
+ ;; if `buffer-undo-tree' is empty, create initial undo-tree
+ (when (null buffer-undo-tree)
+ (setq buffer-undo-tree (make-undo-tree)))
+ ;; transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree'
+ (undo-list-transfer-to-tree)
+ ;; save current node to REGISTER
+ (set-register register (undo-tree-current buffer-undo-tree)))
+
+
+
+(defun undo-tree-restore-state-from-register (register)
+ "Restore undo-tree state from REGISTER.
+The state must be saved using `undo-tree-save-state-to-register'.
+Argument is a character, naming the register."
+ (interactive "cRestore undo-tree state from register: ")
+ ;; throw error if undo is disabled in buffer, or if register doesn't contain
+ ;; an undo-tree node
+ (let ((node (get-register register)))
+ (cond
+ ((eq buffer-undo-list t)
+ (error "No undo information in this buffer"))
+ ((not (undo-tree-node-p node))
+ (error "Register doesn't contain undo-tree state")))
+ ;; if `buffer-undo-tree' is empty, create initial undo-tree
+ (when (null buffer-undo-tree)
+ (setq buffer-undo-tree (make-undo-tree)))
+ ;; transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree'
+ (undo-list-transfer-to-tree)
+ ;; restore buffer state corresponding to saved node
+ (undo-tree-set node)))
+
+
+
;;; =====================================================================
;;; Undo-tree visualizer
- [elpa] externals/undo-tree d5a6148 120/195: Don't try to auto-save undo history if undo is disabled in buffer., (continued)
- [elpa] externals/undo-tree d5a6148 120/195: Don't try to auto-save undo history if undo is disabled in buffer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree cfc036a 133/195: Fix undo-tree-redo to avoid corrupting undo-tree state if redoing fails., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree bdfd73f 132/195: Ignore bogus buffer modification entries in undo changesets., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 6e0775d 139/195: Use define-derived-mode and define-minor-mode for undo-tree visualizer., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree d6fa2e7 152/195: Reinstate accidentally deleted file header., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 8afead1 162/195: Add Maintainer line to package headers., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree e9a9102 164/195: Throw error if interactive commands called outside undo-tree-mode., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree ffd18cd 175/195: Refactor undo-list-transfer-to-tree again in attempt to mitigate GC races., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 941bfe5 190/195: Don't attempt to save undo history if history file is unwritable., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 5a1ba84 017/195: Added standard Elisp package headers, including an extensive Commentary., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 62e6097 044/195: Added undo-tree-save/restore-state-to/from-register commands and keybindings,
Stefan Monnier <=
- [elpa] externals/undo-tree c638cbd 051/195: General code tidying and reorganisation., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree caa3bd0 082/195: Added new customization option to allow undo-in-region to be disabled., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 8972e4d 069/195: Use get-buffer-create when creating the visualizer buffer in undo-tree-visualize., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree d7c1b2c 118/195: "De-circle" undo-tree when saving to file, restore when loading., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 121cab9 136/195: Trivial typo fixes in comments., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 18754c1 114/195: Use with-temp-buffer instead of with-temp-file when saving undo history., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree c9f78c3 137/195: Use new user-error instead of error for expected undo errors., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 1114679 135/195: Fix bugs in binding of undo-tree-insert-face., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 5d19d4e 155/195: Bump version number and copyright year., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree ffb346a 157/195: Install undo-tree undo/redo Edit menu bar items., Stefan Monnier, 2020/11/28