[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/undo-tree 8b1bae6 060/195: Implemented keyboard selecti
From: |
Stefan Monnier |
Subject: |
[elpa] externals/undo-tree 8b1bae6 060/195: Implemented keyboard selection in visualizer. |
Date: |
Sat, 28 Nov 2020 13:41:21 -0500 (EST) |
branch: externals/undo-tree
commit 8b1bae66b955281fa8bfc4fd0e20c0c437c07aee
Author: Toby S. Cubitt <toby-undo-tree@dr-qubit.org>
Commit: Toby S. Cubitt <toby-undo-tree@dr-qubit.org>
Implemented keyboard selection in visualizer.
---
undo-tree.el | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 158 insertions(+), 8 deletions(-)
diff --git a/undo-tree.el b/undo-tree.el
index f07eb16..f460538 100644
--- a/undo-tree.el
+++ b/undo-tree.el
@@ -481,6 +481,7 @@
;; meta-data to be stored in a plist associated with a node, and
;; reimplemented storage of visualizer data on top of this
;; * display registers storing undo-tree state in visualizer
+;; * implemented keyboard selection in visualizer
;;
;; Version 0.2
;; * added support for marker undo entries
@@ -612,6 +613,9 @@ in visualizer."
(defvar undo-tree-visualizer-map nil
"Keymap used in undo-tree visualizer.")
+(defvar undo-tree-visualizer-selection-map nil
+ "Keymap used in undo-tree visualizer selection mode.")
+
(defvar undo-tree-visualizer-parent-buffer nil
"Parent buffer in visualizer.")
@@ -692,11 +696,14 @@ in visualizer."
'undo-tree-visualize-switch-branch-left)
;; mouse sets buffer state to node at click
(define-key undo-tree-visualizer-map [mouse-1]
- 'undo-tree-visualizer-set)
+ 'undo-tree-visualizer-mouse-set)
;; toggle timestamps
(define-key undo-tree-visualizer-map "t"
'undo-tree-visualizer-toggle-timestamps)
- ;; horizontal scrolling may be needed if tree is very wide
+ ;; selection mode
+ (define-key undo-tree-visualizer-map "s"
+ 'undo-tree-visualizer-selection-mode)
+ ;; horizontal scrolling may be needed if the tree is very wide
(define-key undo-tree-visualizer-map ","
'undo-tree-visualizer-scroll-left)
(define-key undo-tree-visualizer-map "."
@@ -715,6 +722,74 @@ in visualizer."
'undo-tree-visualizer-quit))
+(unless undo-tree-visualizer-selection-map
+ (setq undo-tree-visualizer-selection-map (make-keymap))
+ ;; vertical motion keys move up and down tree
+ (define-key undo-tree-visualizer-selection-map [remap previous-line]
+ 'undo-tree-visualizer-select-previous)
+ (define-key undo-tree-visualizer-selection-map [remap next-line]
+ 'undo-tree-visualizer-select-next)
+ (define-key undo-tree-visualizer-selection-map [up]
+ 'undo-tree-visualizer-select-previous)
+ (define-key undo-tree-visualizer-selection-map "p"
+ 'undo-tree-visualizer-select-previous)
+ (define-key undo-tree-visualizer-selection-map "\C-p"
+ 'undo-tree-visualizer-select-previous)
+ (define-key undo-tree-visualizer-selection-map [down]
+ 'undo-tree-visualizer-select-next)
+ (define-key undo-tree-visualizer-selection-map "n"
+ 'undo-tree-visualizer-select-next)
+ (define-key undo-tree-visualizer-selection-map "\C-n"
+ 'undo-tree-visualizer-select-next)
+ ;; vertical scroll keys move up and down quickly
+ (define-key undo-tree-visualizer-selection-map [next]
+ (lambda () (interactive) (undo-tree-visualizer-select-next 10)))
+ (define-key undo-tree-visualizer-selection-map [prior]
+ (lambda () (interactive) (undo-tree-visualizer-select-previous 10)))
+ ;; horizontal motion keys move to left and right siblings
+ (define-key undo-tree-visualizer-selection-map [remap forward-char]
+ 'undo-tree-visualizer-select-right)
+ (define-key undo-tree-visualizer-selection-map [remap backward-char]
+ 'undo-tree-visualizer-select-left)
+ (define-key undo-tree-visualizer-selection-map [right]
+ 'undo-tree-visualizer-select-right)
+ (define-key undo-tree-visualizer-selection-map "f"
+ 'undo-tree-visualizer-select-right)
+ (define-key undo-tree-visualizer-selection-map "\C-f"
+ 'undo-tree-visualizer-select-right)
+ (define-key undo-tree-visualizer-selection-map [left]
+ 'undo-tree-visualizer-select-left)
+ (define-key undo-tree-visualizer-selection-map "b"
+ 'undo-tree-visualizer-select-left)
+ (define-key undo-tree-visualizer-selection-map "\C-b"
+ 'undo-tree-visualizer-select-left)
+ ;; horizontal scroll keys move left or right quickly
+ (define-key undo-tree-visualizer-selection-map ","
+ (lambda () (interactive) (undo-tree-visualizer-select-left 10)))
+ (define-key undo-tree-visualizer-selection-map "."
+ (lambda () (interactive) (undo-tree-visualizer-select-right 10)))
+ (define-key undo-tree-visualizer-selection-map "<"
+ (lambda () (interactive) (undo-tree-visualizer-select-left 10)))
+ (define-key undo-tree-visualizer-selection-map ">"
+ (lambda () (interactive) (undo-tree-visualizer-select-right 10)))
+ ;; mouse or <enter> sets buffer state to node at point/click
+ (define-key undo-tree-visualizer-selection-map "\r"
+ 'undo-tree-visualizer-set)
+ (define-key undo-tree-visualizer-selection-map [mouse-1]
+ 'undo-tree-visualizer-mouse-set)
+ ;; toggle timestamps
+ (define-key undo-tree-visualizer-selection-map "t"
+ 'undo-tree-visualizer-toggle-timestamps)
+ ;; quit visualizer selection mode
+ (define-key undo-tree-visualizer-selection-map "s"
+ 'undo-tree-visualizer-mode)
+ ;; quit visualizer
+ (define-key undo-tree-visualizer-selection-map "q"
+ 'undo-tree-visualizer-quit)
+ (define-key undo-tree-visualizer-selection-map "\C-q"
+ 'undo-tree-visualizer-quit))
+
+
;;; =====================================================================
@@ -1559,7 +1634,6 @@ Argument is a character, naming the register."
(undo-tree-visualizer-mode)
(setq undo-tree-visualizer-parent-buffer buff)
(setq buffer-undo-tree undo-tree)
- (setq cursor-type nil)
(setq buffer-read-only nil)
(undo-tree-draw-tree undo-tree)
(setq buffer-read-only t)))
@@ -1878,11 +1952,12 @@ the parent buffer.
Within the undo-tree visualizer, the following keys are available:
\\{undo-tree-visualizer-map}"
- (kill-all-local-variables)
+ (interactive)
(setq major-mode 'undo-tree-visualizer-mode)
(setq mode-name "undo-tree-visualizer-mode")
(use-local-map undo-tree-visualizer-map)
(setq truncate-lines t)
+ (setq cursor-type nil)
(setq buffer-read-only t))
@@ -1969,11 +2044,11 @@ using `undo-tree-redo' or `undo-tree-visualizer-redo'."
(switch-to-buffer parent)))))
-(defun undo-tree-visualizer-set (pos)
+(defun undo-tree-visualizer-set (&optional pos)
"Set buffer to state corresponding to undo tree node
-at POS."
- (interactive "@e")
- (setq pos (event-start (nth 1 pos)))
+at POS, or point if POS is nil."
+ (interactive)
+ (unless pos (setq pos (point)))
(let ((node (get-text-property pos 'undo-tree-node)))
(when node
;; set parent buffer to state corresponding to node at POS
@@ -1986,6 +2061,13 @@ at POS."
(setq buffer-read-only t))))
+(defun undo-tree-visualizer-mouse-set (pos)
+ "Set buffer to state corresponding to undo tree node
+at mouse event POS."
+ (interactive "@e")
+ (undo-tree-visualizer-set (event-start (nth 1 pos))))
+
+
(defun undo-tree-visualizer-toggle-timestamps ()
"Toggle display of time-stamps."
(interactive)
@@ -2012,6 +2094,74 @@ at POS."
+
+;;; =====================================================================
+;;; Visualizer selection mode
+
+(defun undo-tree-visualizer-selection-mode ()
+ "Major mode used to select nodes in undo-tree visualizer."
+ (interactive)
+ (setq major-mode 'undo-tree-visualizer-selection-mode)
+ (setq mode-name "undo-tree-visualizer-selection-mode")
+ (use-local-map undo-tree-visualizer-selection-map)
+ (setq cursor-type 'box))
+
+
+(defun undo-tree-visualizer-select-previous (&optional arg)
+ "Move to previous node."
+ (interactive "p")
+ (let ((node (get-text-property (point) 'undo-tree-node)))
+ (catch 'top
+ (dotimes (i arg)
+ (unless (undo-tree-node-previous node) (throw 'top t))
+ (setq node (undo-tree-node-previous node))))
+ (goto-char (undo-tree-node-marker node))))
+
+
+(defun undo-tree-visualizer-select-next (&optional arg)
+ "Move to next node."
+ (interactive "p")
+ (let ((node (get-text-property (point) 'undo-tree-node)))
+ (catch 'bottom
+ (dotimes (i arg)
+ (unless (nth (undo-tree-node-branch node) (undo-tree-node-next node))
+ (throw 'bottom t))
+ (setq node
+ (nth (undo-tree-node-branch node) (undo-tree-node-next node)))))
+ (goto-char (undo-tree-node-marker node))))
+
+
+(defun undo-tree-visualizer-select-right (&optional arg)
+ "Move right to a sibling node."
+ (interactive "p")
+ (let ((pos (point))
+ (end (line-end-position))
+ node)
+ (catch 'end
+ (dotimes (i arg)
+ (while (not node)
+ (forward-char)
+ (setq node (get-text-property (point) 'undo-tree-node))
+ (when (= (point) end) (throw 'end t)))))
+ (goto-char (if node (undo-tree-node-marker node) pos))))
+
+
+(defun undo-tree-visualizer-select-left (&optional arg)
+ "Move left to a sibling node."
+ (interactive "p")
+ (let ((pos (point))
+ (beg (line-beginning-position))
+ node)
+ (catch 'beg
+ (dotimes (i arg)
+ (while (not node)
+ (backward-char)
+ (setq node (get-text-property (point) 'undo-tree-node))
+ (when (= (point) beg) (throw 'beg t)))))
+ (goto-char (if node (undo-tree-node-marker node) pos))))
+
+
+
(provide 'undo-tree)
;;; undo-tree.el ends here
- [elpa] externals/undo-tree 04b1a6f 054/195: Fixed bugs in history-discarding logic., (continued)
- [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, 2020/11/28
- [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 <=
- [elpa] externals/undo-tree 309f4bc 066/195: Define region-active-p if not already defined, for compatibility, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree e32f45e 072/195: Use correct faces and show registers in visualizer when displaying timestamps., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 2bfab98 079/195: Bumped copyright year for new release., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree a93e78f 071/195: Discard position entries from changesets created by undoing or redoing., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 45380b2 087/195: Suppress branch point messages when undo/redoing from undo-tree-set., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree db55cea 068/195: Bumped compyright year and corrected license wording., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 3255044 065/195: Fixed bugs in undo-list-transfer-to-tree and undo-list-rebuild-from-tree, Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 07e934a 080/195: Added term-mode to undo-tree-incompatible-major-modes., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree acd7549 070/195: Prevent global-undo-tree-mode being enabled in incompatible major-modes., Stefan Monnier, 2020/11/28
- [elpa] externals/undo-tree 79b382b 083/195: Fixed bug in undo-list-pop-changeset when called with non-null DISCARD-POS., Stefan Monnier, 2020/11/28