From 47bba33c1047acf2698216d579f145b49247a215 Mon Sep 17 00:00:00 2001 From: Andreas Gerler Date: Thu, 23 Nov 2023 20:12:15 +0100 Subject: [PATCH] update undo-tree Signed-off-by: Andreas Gerler --- elpa/undo-tree-0.7.4/undo-tree-pkg.el | 2 - elpa/undo-tree-0.8.2.signed | 1 + .../undo-tree-autoloads.el | 32 +- elpa/undo-tree-0.8.2/undo-tree-pkg.el | 2 + .../undo-tree.el | 432 +++++++++--------- 5 files changed, 255 insertions(+), 214 deletions(-) delete mode 100644 elpa/undo-tree-0.7.4/undo-tree-pkg.el create mode 100644 elpa/undo-tree-0.8.2.signed rename elpa/{undo-tree-0.7.4 => undo-tree-0.8.2}/undo-tree-autoloads.el (63%) create mode 100644 elpa/undo-tree-0.8.2/undo-tree-pkg.el rename elpa/{undo-tree-0.7.4 => undo-tree-0.8.2}/undo-tree.el (95%) diff --git a/elpa/undo-tree-0.7.4/undo-tree-pkg.el b/elpa/undo-tree-0.7.4/undo-tree-pkg.el deleted file mode 100644 index 9ee3096a..00000000 --- a/elpa/undo-tree-0.7.4/undo-tree-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "undo-tree" "0.7.4" "Treat undo history as a tree" 'nil :keywords '("convenience" "files" "undo" "redo" "history" "tree") :authors '(("Toby Cubitt" . "toby-undo-tree@dr-qubit.org")) :maintainer '("Toby Cubitt" . "toby-undo-tree@dr-qubit.org") :url "http://www.dr-qubit.org/emacs.php") diff --git a/elpa/undo-tree-0.8.2.signed b/elpa/undo-tree-0.8.2.signed new file mode 100644 index 00000000..9400f41b --- /dev/null +++ b/elpa/undo-tree-0.8.2.signed @@ -0,0 +1 @@ +Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) (trust undefined) created at 2022-03-13T10:05:02+0100 using RSA \ No newline at end of file diff --git a/elpa/undo-tree-0.7.4/undo-tree-autoloads.el b/elpa/undo-tree-0.8.2/undo-tree-autoloads.el similarity index 63% rename from elpa/undo-tree-0.7.4/undo-tree-autoloads.el rename to elpa/undo-tree-0.8.2/undo-tree-autoloads.el index b2cf8c7c..9b582da8 100644 --- a/elpa/undo-tree-0.7.4/undo-tree-autoloads.el +++ b/elpa/undo-tree-0.8.2/undo-tree-autoloads.el @@ -1,4 +1,4 @@ -;;; undo-tree-autoloads.el --- automatically extracted autoloads +;;; undo-tree-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*- ;; ;;; Code: @@ -15,6 +15,20 @@ With no argument, this command toggles the mode. A positive prefix argument turns the mode on. A negative prefix argument turns it off. +This is a minor mode. If called interactively, toggle the +`Undo-Tree mode' mode. If the prefix argument is positive, +enable the mode, and if it is zero or negative, disable the mode. + +If called from Lisp, toggle the mode if ARG is `toggle'. Enable +the mode if ARG is nil, omitted, or is a positive number. +Disable the mode if ARG is a negative number. + +To check whether the minor mode is enabled in the current buffer, +evaluate `undo-tree-mode'. + +The mode's hook is called both when the mode is enabled and when +it is disabled. + Undo-tree-mode replaces Emacs' standard undo feature with a more powerful yet easier to use version, that treats the undo history as what it is: a tree. @@ -29,6 +43,8 @@ Within the undo-tree visualizer, the following keys are available: \(fn &optional ARG)" t nil) +(put 'global-undo-tree-mode 'globalized-minor-mode t) + (defvar global-undo-tree-mode nil "\ Non-nil if Global Undo-Tree mode is enabled. See the `global-undo-tree-mode' command @@ -42,16 +58,24 @@ or call the function `global-undo-tree-mode'.") (autoload 'global-undo-tree-mode "undo-tree" "\ Toggle Undo-Tree mode in all buffers. With prefix ARG, enable Global Undo-Tree mode if ARG is positive; -otherwise, disable it. If called from Lisp, enable the mode if -ARG is omitted or nil. +otherwise, disable it. + +If called from Lisp, toggle the mode if ARG is `toggle'. +Enable the mode if ARG is nil, omitted, or is a positive number. +Disable the mode if ARG is a negative number. Undo-Tree mode is enabled in all buffers where `turn-on-undo-tree-mode' would do it. + See `undo-tree-mode' for more information on Undo-Tree mode. \(fn &optional ARG)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "undo-tree" '("undo-" "turn-on-undo-tree-mode" "*undo-tree-id-counter*" "buffer-undo-tree"))) +(register-definition-prefixes "undo-tree" '("*undo-tree-id-counter*" "buffer-undo-tree" "turn-on-undo-tree-mode" "undo-")) + +;;;*** + +;;;### (autoloads nil nil ("undo-tree-pkg.el") (0 0 0 0)) ;;;*** diff --git a/elpa/undo-tree-0.8.2/undo-tree-pkg.el b/elpa/undo-tree-0.8.2/undo-tree-pkg.el new file mode 100644 index 00000000..4da358fa --- /dev/null +++ b/elpa/undo-tree-0.8.2/undo-tree-pkg.el @@ -0,0 +1,2 @@ +;; Generated package description from undo-tree.el -*- no-byte-compile: t -*- +(define-package "undo-tree" "0.8.2" "Treat undo history as a tree" '((queue "0.2") (emacs "24.3")) :commit "42aab056e37e033816b2d192f9121b89410b958e" :authors '(("Toby Cubitt" . "toby+undo-tree@dr-qubit.org")) :maintainer '("Toby Cubitt" . "toby+undo-tree@dr-qubit.org") :keywords '("convenience" "files" "undo" "redo" "history" "tree") :url "https://www.dr-qubit.org/undo-tree.html") diff --git a/elpa/undo-tree-0.7.4/undo-tree.el b/elpa/undo-tree-0.8.2/undo-tree.el similarity index 95% rename from elpa/undo-tree-0.7.4/undo-tree.el rename to elpa/undo-tree-0.8.2/undo-tree.el index 9fa1fc60..e345d4c3 100644 --- a/elpa/undo-tree-0.7.4/undo-tree.el +++ b/elpa/undo-tree-0.8.2/undo-tree.el @@ -1,13 +1,14 @@ ;;; undo-tree.el --- Treat undo history as a tree -*- lexical-binding: t; -*- -;; Copyright (C) 2009-2020 Free Software Foundation, Inc +;; Copyright (C) 2009-2021 Free Software Foundation, Inc ;; Author: Toby Cubitt ;; Maintainer: Toby Cubitt -;; Version: 0.7.4 +;; Version: 0.8.2 ;; 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 +;; Package-Requires: ((queue "0.2")) +;; URL: https://www.dr-qubit.org/undo-tree.html +;; Repository: https://gitlab.com/tsc25/undo-tree ;; This file is part of Emacs. ;; @@ -755,6 +756,7 @@ ;;; Code: (require 'cl-lib) +(require 'queue) (require 'diff) (require 'gv) @@ -939,7 +941,7 @@ within the current region." :type 'boolean) -(defcustom undo-tree-auto-save-history nil +(defcustom undo-tree-auto-save-history t "When non-nil, `undo-tree-mode' will save undo history to file when a buffer is saved to file. @@ -1340,6 +1342,26 @@ in visualizer." (timestamp (current-time)) (branch 0))) (:constructor undo-tree-make-empty-node ()) + (:constructor undo-tree-copy-node-save-data + (node + &aux + (undo (let ((changeset (undo-tree-node-undo node))) + (run-hook-wrapped + 'undo-tree-pre-save-element-functions + (lambda (fun) + (setq changeset (delq nil (mapcar fun changeset))) + nil)) + changeset)) + (redo (let ((changeset (undo-tree-node-redo node))) + (run-hook-wrapped + 'undo-tree-pre-save-element-functions + (lambda (fun) + (setq changeset (delq nil (mapcar fun changeset))) + nil)) + changeset)) + (timestamp (undo-tree-node-timestamp node)) + (branch (undo-tree-node-branch node)) + (meta-data (undo-tree-node-meta-data node)))) (:copier nil)) previous next undo redo timestamp branch meta-data) @@ -1349,7 +1371,7 @@ in visualizer." `(and (vectorp ,n) (= (length ,n) ,len)))) (defun undo-tree-node-copy (node &optional tree current) - ;; Return a copy of undo-tree NODE, sans previous link or meta-data. + ;; Return a deep copy of undo-tree NODE, sans previous link or meta-data. ;; If TREE and CURRENT are supplied, set (undo-tree-current TREE) to the ;; copy of CURRENT node, if found. (let* ((new (undo-tree-make-empty-node)) @@ -1825,7 +1847,7 @@ Comparison is done with `eq'." (while undo-tree-gc-flag (setq undo-tree-gc-flag nil undo-list (copy-tree buffer-undo-list))) - (setq buffer-undo-list '(nil undo-tree-canary)) + (setq buffer-undo-list (list nil 'undo-tree-canary)) ;; create new node from first changeset in `undo-list', save old ;; `buffer-undo-tree' current node, and make new node the current node @@ -1859,8 +1881,7 @@ Comparison is done with `eq'." (setq node (undo-tree-grow-backwards node nil)) (setf (undo-tree-root buffer-undo-tree) node) (setf (undo-tree-size buffer-undo-tree) size) - (setf (undo-tree-count buffer-undo-tree) count) - (setq undo-list '(nil undo-tree-canary)))))) + (setf (undo-tree-count buffer-undo-tree) count))))) ;; discard undo history if necessary (undo-tree-discard-history)) @@ -2205,16 +2226,14 @@ which is defined in the `warnings' library.\n") ;; Return non-nil if NODE corresponds to a buffer state that once upon a ;; time was unmodified. If a file modification time MTIME is specified, ;; return non-nil if the corresponding buffer state really is unmodified. - (let (changeset ntime) - (setq changeset + (let* ((changeset (or (undo-tree-node-redo node) (and (setq changeset (car (undo-tree-node-next node))) - (undo-tree-node-undo changeset))) - ntime - (catch 'found - (dolist (elt changeset) - (when (and (consp elt) (eq (car elt) t) (consp (cdr elt)) - (throw 'found (cdr elt))))))) + (undo-tree-node-undo changeset)))) + (ntime + (let ((elt (car (last changeset)))) + (and (consp elt) (eq (car elt) t) (consp (cdr elt)) + (cdr elt))))) (and ntime (or (null mtime) ;; high-precision timestamps @@ -3217,6 +3236,10 @@ Argument is a character, naming the register." ;;; ===================================================================== ;;; Persistent storage commands +(defvar undo-tree-save-format-version 1 + "Undo-tree history file format version.") + + (defun undo-tree-make-history-save-file-name (file) "Create the undo history file name for FILE. Normally this is the file's name with \".\" prepended and @@ -3231,6 +3254,111 @@ directory for the backup doesn't exist, it is created." ".~undo-tree~"))) +(defun undo-tree-serialize (tree) + "Serialise undo-tree TREE to current buffer." + ;; write root + (let ((data (undo-tree-copy-node-save-data (undo-tree-root tree)))) + (when (eq (undo-tree-root tree) (undo-tree-current tree)) + (setf (undo-tree-node-next data) 'current)) + (prin1 data (current-buffer))) + (terpri (current-buffer)) + ;; Note: We serialise in breadth-first order, as undo-trees are typically + ;; much deeper than they are wide, so this is more memory-efficient. + (let ((queue (make-queue))) + (queue-enqueue queue (undo-tree-root tree)) + (while (not (queue-empty queue)) + (prin1 (mapcar + (lambda (n) + (queue-enqueue queue n) + (let ((data (undo-tree-copy-node-save-data n))) + ;; use empty next field to mark current node + (when (eq n (undo-tree-current tree)) + (setf (undo-tree-node-next data) 'current)) + data)) + (undo-tree-node-next (queue-dequeue queue))) + (current-buffer)) + (terpri (current-buffer))))) + + +(defun undo-tree-deserialize () + "Deserialize and return undo-tree from current buffer." + (let ((tree (make-undo-tree)) + (queue (make-queue)) + node) + ;; read root + (setf (undo-tree-root tree) (read (current-buffer))) + (queue-enqueue queue (undo-tree-root tree)) + ;; reconstruct tree in breadth-first order + (while (not (queue-empty queue)) + (setq node (queue-dequeue queue)) + (when (eq (undo-tree-node-next node) 'current) + (setf (undo-tree-current tree) node)) + (setf (undo-tree-node-next node) (read (current-buffer))) + (mapc (lambda (n) (queue-enqueue queue n)) + (undo-tree-node-next node))) + ;; restore parent links + (undo-tree-recircle tree) + tree)) + + +(defun undo-tree-serialize-old-format (tree) + ;; make tmp copy of TREE + (setq tree (undo-tree-copy tree)) + ;; decircle and discard object pool before saving + (undo-tree-decircle tree) + (setf (undo-tree-object-pool tree) nil) + ;; run pre-save transformer functions + (when undo-tree-pre-save-element-functions + (undo-tree-mapc + (lambda (node) + (let ((changeset (undo-tree-node-undo node))) + (run-hook-wrapped + 'undo-tree-pre-save-element-functions + (lambda (fun) + (setq changeset (delq nil (mapcar fun changeset))) + nil)) + (setf (undo-tree-node-undo node) changeset)) + (let ((changeset (undo-tree-node-redo node))) + (run-hook-wrapped + 'undo-tree-pre-save-element-functions + (lambda (fun) + (setq changeset (delq nil (mapcar fun changeset))) + nil)) + (setf (undo-tree-node-redo node) changeset))) + (undo-tree-root tree))) + ;; write tree + (let ((print-circle t)) (prin1 tree (current-buffer)))) + + +(defun undo-tree-deserialize-old-format () + ;; read tree + (let ((tree (read (current-buffer)))) + ;; run post-load transformer functions + (when undo-tree-post-load-element-functions + (undo-tree-mapc + (lambda (node) + (let ((changeset (undo-tree-node-undo node))) + (run-hook-wrapped + 'undo-tree-post-load-element-functions + (lambda (fun) + (setq changeset (delq nil (mapcar fun changeset))))) + (setf (undo-tree-node-undo node) changeset)) + (let ((changeset (undo-tree-node-redo node))) + (run-hook-wrapped + 'undo-tree-post-load-element-functions + (lambda (fun) + (setq changeset (delq nil (mapcar fun changeset))))) + (setf (undo-tree-node-redo node) changeset))) + (undo-tree-root tree))) + ;; initialise empty undo-tree object pool + (setf (undo-tree-object-pool tree) + (make-hash-table :test 'eq :weakness 'value)) + ;; restore parent links + (undo-tree-recircle tree) + tree)) + + + (defun undo-tree-save-history (&optional filename overwrite) "Store undo-tree history to file. @@ -3247,12 +3375,12 @@ without asking for confirmation." (user-error "No undo information in this buffer")) (undo-list-transfer-to-tree) (when (and buffer-undo-tree (not (eq buffer-undo-tree t))) - (undo-tree-kill-visualizer) - ;; should be cleared already by killing the visualizer, but writes - ;; unreasable data if not for some reason, so just in case... - (undo-tree-clear-visualizer-data buffer-undo-tree) + ;; (undo-tree-kill-visualizer) + ;; ;; should be cleared already by killing the visualizer, but writes + ;; ;; unreasable data if not for some reason, so just in case... + ;; (undo-tree-clear-visualizer-data buffer-undo-tree) (let ((buff (current-buffer)) - tree) + (tree buffer-undo-tree)) ;; get filename (unless filename (setq filename @@ -3262,42 +3390,40 @@ without asking for confirmation." (when (or (not (file-exists-p filename)) overwrite (yes-or-no-p (format "Overwrite \"%s\"? " filename))) - ;; transform undo-tree into non-circular structure, and make tmp copy - (setq tree (undo-tree-copy buffer-undo-tree)) - (undo-tree-decircle tree) - ;; discard undo-tree object pool before saving - (setf (undo-tree-object-pool tree) nil) - ;; run pre-save transformer functions - (when undo-tree-pre-save-element-functions - (undo-tree-mapc - (lambda (node) - (let ((changeset (undo-tree-node-undo node))) - (run-hook-wrapped - 'undo-tree-pre-save-element-functions - (lambda (fun) - (setq changeset (delq nil (mapcar fun changeset))))) - (setf (undo-tree-node-undo node) changeset)) - (let ((changeset (undo-tree-node-redo node))) - (run-hook-wrapped - 'undo-tree-pre-save-element-functions - (lambda (fun) - (setq changeset (delq nil (mapcar fun changeset))))) - (setf (undo-tree-node-redo node) changeset))) - (undo-tree-root tree))) + ;; print undo-tree to file - ;; NOTE: We use `with-temp-buffer' instead of `with-temp-file' to + ;; Note: We use `with-temp-buffer' instead of `with-temp-file' to ;; allow `auto-compression-mode' to take effect, in case user ;; has overridden or advised the default ;; `undo-tree-make-history-save-file-name' to add a compressed ;; file extension. - (with-auto-compression-mode - (with-temp-buffer - (prin1 (sha1 buff) (current-buffer)) - (terpri (current-buffer)) - (let ((print-circle t)) (prin1 tree (current-buffer))) + (with-temp-buffer + ;; write version number; (original save file format (version 0) has no version string) + (unless (= undo-tree-save-format-version 0) + (prin1 (cons 'undo-tree-save-format-version undo-tree-save-format-version) + (current-buffer)) + (terpri (current-buffer))) + ;; write hash + (prin1 (sha1 buff) (current-buffer)) + (terpri (current-buffer)) + ;; write tree + (cl-case undo-tree-save-format-version + (0 (undo-tree-serialize-old-format tree)) + (1 (undo-tree-serialize tree)) + (t (error "Unknown `undo-tree-save-format-version'; undo-tree history *not* saved"))) + ;; write file + (with-auto-compression-mode (write-region nil nil filename))))))) +(defmacro undo-tree--catch-load-history-error (error-fmt &rest body) + `(condition-case nil + (progn ,@body) + (error + (kill-buffer nil) + (funcall (if noerror #'message #'user-error) ,error-fmt filename) + (throw 'load-error nil)))) + (defun undo-tree-load-history (&optional filename noerror) "Load undo-tree history from file, for the current buffer. @@ -3320,65 +3446,54 @@ Note this will overwrite any existing undo history." (undo-tree-make-history-save-file-name buffer-file-name) (expand-file-name (read-file-name "File to load from: ") nil)))) - ;; attempt to read undo-tree from FILENAME + ;; attempt to read undo-tree (catch 'load-error (unless (file-exists-p filename) (if noerror (throw 'load-error nil) - (error "File \"%s\" does not exist; could not load undo-tree history" - filename))) - (let (buff hash tree) - (setq buff (current-buffer)) - (with-auto-compression-mode + (user-error "File \"%s\" does not exist; could not load undo-tree history" + filename))) + + ;; read file contents + (let ((buff (current-buffer)) + version hash tree) (with-temp-buffer - (insert-file-contents filename) + (with-auto-compression-mode (insert-file-contents filename)) (goto-char (point-min)) - (condition-case nil - (setq hash (read (current-buffer))) - (error - (kill-buffer nil) - (funcall (if noerror #'message #'user-error) - "Error reading undo-tree history from \"%s\"" filename) - (throw 'load-error nil))) - (unless (string= (sha1 buff) hash) - (kill-buffer nil) - (funcall (if noerror 'message 'user-error) - "Buffer has been modified; could not load undo-tree history") - (throw 'load-error nil)) - (condition-case nil - (setq tree (read (current-buffer))) - (error - (kill-buffer nil) - (funcall (if noerror #'message #'error) - "Error reading undo-tree history from \"%s\"" filename) - (throw 'load-error nil))) - (kill-buffer nil))) - ;; run post-load transformer functions - (when undo-tree-post-load-element-functions - (undo-tree-mapc - (lambda (node) - (let ((changeset (undo-tree-node-undo node))) - (run-hook-wrapped - 'undo-tree-post-load-element-functions - (lambda (fun) - (setq changeset (delq nil (mapcar fun changeset))))) - (setf (undo-tree-node-undo node) changeset)) - (let ((changeset (undo-tree-node-redo node))) - (run-hook-wrapped - 'undo-tree-post-load-element-functions - (lambda (fun) - (setq changeset (delq nil (mapcar fun changeset))))) - (setf (undo-tree-node-redo node) changeset))) - (undo-tree-root tree))) ;; initialise empty undo-tree object pool - (setf (undo-tree-object-pool tree) - (make-hash-table :test 'eq :weakness 'value)) - ;; restore circular undo-tree data structure - (undo-tree-recircle tree) - ;; create undo-tree object pool - (setf (undo-tree-object-pool tree) - (make-hash-table :test 'eq :weakness 'value)) - (setq buffer-undo-tree tree - buffer-undo-list '(nil undo-tree-canary))))) + + (undo-tree--catch-load-history-error + "Error reading undo-tree history from \"%s\"" + ;; read version number + (setq version (read (current-buffer))) + ;; read hash + (cond + ((eq (car-safe version) 'undo-tree-save-format-version) + (setq version (cdr version)) + (setq hash (read (current-buffer)))) + ;; original save file format (version 0) has no version string + ((stringp version) + (setq hash version + version 0)) + (t (error "Error")))) + + ;; check hash + (undo-tree--catch-load-history-error + "Buffer has been modified since undo-tree history was saved to + \"%s\"; could not load undo-tree history" + (unless (string= (sha1 buff) hash) (error "Error"))) + + ;; read tree + (undo-tree--catch-load-history-error + "Error reading undo-tree history from \"%s\"" + (setq tree + (cl-case version + (0 (undo-tree-deserialize-old-format)) + (1 (undo-tree-deserialize)) + (t (error "Error"))))) + (kill-buffer nil)) + + (setq buffer-undo-tree tree + buffer-undo-list (list nil 'undo-tree-canary))))) @@ -3446,11 +3561,8 @@ Note this will overwrite any existing undo history." (setq undo-tree-visualizer-initial-node (undo-tree-current undo-tree)) (setq undo-tree-visualizer-spacing (undo-tree-visualizer-calculate-spacing)) - (make-local-variable 'undo-tree-visualizer-timestamps) - (make-local-variable 'undo-tree-visualizer-diff) (setq buffer-undo-tree undo-tree) (undo-tree-visualizer-mode) - ;; FIXME; don't know why `undo-tree-visualizer-mode' clears this (setq buffer-undo-tree undo-tree) (set (make-local-variable 'undo-tree-visualizer-lazy-drawing) (or (eq undo-tree-visualizer-lazy-drawing t) @@ -3734,9 +3846,9 @@ Note this will overwrite any existing undo history." undo-tree-insert-face (nconc (cond - (current '(undo-tree-visualizer-current-face)) - (unmodified '(undo-tree-visualizer-unmodified-face)) - (register '(undo-tree-visualizer-register-face))) + (current (list 'undo-tree-visualizer-current-face)) + (unmodified (list 'undo-tree-visualizer-unmodified-face)) + (register (list 'undo-tree-visualizer-register-face))) undo-tree-insert-face)) ;; draw node and link it to its representation in visualizer (undo-tree-insert node-string) @@ -4083,7 +4195,9 @@ Within the undo-tree visualizer, the following keys are available: :abbrev-table nil (setq truncate-lines t) (setq cursor-type nil) - (setq undo-tree-visualizer-selected-node nil)) + (setq undo-tree-visualizer-selected-node nil) + (make-local-variable 'undo-tree-visualizer-timestamps) + (make-local-variable 'undo-tree-visualizer-diff)) (define-minor-mode undo-tree-visualizer-selection-mode @@ -4646,104 +4760,6 @@ specifies `saved', and a negative prefix argument specifies (balance-windows) (shrink-window-if-larger-than-buffer win)))) -;;;; ChangeLog: - -;; 2020-01-28 Toby S. Cubitt -;; -;; Undo-tree bug-fix release. -;; -;; 2020-01-26 Toby S. Cubitt -;; -;; Undo-tree point release. -;; -;; 2020-01-11 Toby S. Cubitt -;; -;; Undo-tree bug-fix release. -;; -;; 2020-01-09 Toby S. Cubitt -;; -;; Bump undo-tree version number. -;; -;; 2020-01-09 Toby S. Cubitt -;; -;; Undo-tree bug-fix release. -;; -;; 2020-01-06 Toby S. Cubitt -;; -;; New undo-tree package release. -;; -;; 2014-05-01 Barry O'Reilly -;; -;; Fix bug that caused undo-tree to hang when undoing in region -;; (bug#16377). -;; -;; 2013-12-28 Toby S. Cubitt -;; -;; * undo-tree: Update to version 0.6.5. -;; -;; 2012-12-05 Toby S. Cubitt -;; -;; Update undo-tree to version 0.6.3 -;; -;; * undo-tree.el: Implement lazy tree drawing to significantly speed up -;; visualization of large trees + various more minor improvements. -;; -;; 2012-09-25 Toby S. Cubitt -;; -;; Updated undo-tree package to version 0.5.5. -;; -;; Small bug-fix to avoid hooks triggering an error when trying to save -;; undo history in a buffer where undo is disabled. -;; -;; 2012-09-11 Toby S. Cubitt -;; -;; Updated undo-tree package to version 0.5.4 -;; -;; Bug-fixes and improvements to persistent history storage. -;; -;; 2012-07-18 Toby S. Cubitt -;; -;; Update undo-tree to version 0.5.3 -;; -;; * undo-tree.el: Cope gracefully with undo boundaries being deleted -;; (cf. bug#11774). Allow customization of directory to which undo history -;; is -;; saved. -;; -;; 2012-05-24 Toby S. Cubitt -;; -;; updated undo-tree package to version 0.5.2 -;; -;; * undo-tree.el: add diff view feature in undo-tree visualizer. -;; -;; 2012-05-02 Toby S. Cubitt -;; -;; undo-tree.el: Update package to version 0.4 -;; -;; 2012-04-20 Toby S. Cubitt -;; -;; undo-tree.el: Update package to version 0.3.4 -;; -;; * undo-tree.el (undo-list-pop-changeset): fix pernicious bug causing -;; undo history to be lost. -;; (buffer-undo-tree): set permanent-local property. -;; (undo-tree-enable-undo-in-region): add new customization option allowing -;; undo-in-region to be disabled. -;; -;; 2012-01-26 Toby S. Cubitt -;; -;; undo-tree.el: Fixed copyright attribution and Emacs status. -;; -;; 2012-01-26 Toby S. Cubitt -;; -;; undo-tree.el: Update package to version 0.3.3 -;; -;; 2011-09-17 Stefan Monnier -;; -;; Add undo-tree.el -;; - - (provide 'undo-tree) -- 2.47.3