[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ztree 0e0a39d 09/23: Issue #56: Preserve line/column po
From: |
Stefan Monnier |
Subject: |
[elpa] externals/ztree 0e0a39d 09/23: Issue #56: Preserve line/column position on refresh |
Date: |
Thu, 17 Dec 2020 23:17:03 -0500 (EST) |
branch: externals/ztree
commit 0e0a39de615c363c8003a76f3e7d3684c7e11f28
Author: Alexey Veretennikov <txm.fourier@gmail.com>
Commit: Alexey Veretennikov <txm.fourier@gmail.com>
Issue #56: Preserve line/column position on refresh
Fixed issue #56, now the line/column positions are preserved on refresh.
---
ztree-view.el | 45 +++++++++++++++++++++++++++++++++------------
1 file changed, 33 insertions(+), 12 deletions(-)
diff --git a/ztree-view.el b/ztree-view.el
index 2b0dc4d..7e0a89a 100644
--- a/ztree-view.el
+++ b/ztree-view.el
@@ -80,6 +80,10 @@ Used in order to not to use cl package and `lexical-let'")
Used for 2-side trees, to determine if the node exists on left or right
or both sides")
+(defvar-local ztree-prev-position nil
+ "The cons pair of the previous line and column. Used
+to restore cursor position after refresh")
+
(defvar-local ztree-tree-header-fun nil
"Function inserting the header into the tree buffer.
MUST inster newline at the end!")
@@ -638,18 +642,35 @@ Optional argument LINE scroll to the line given."
(interactive)
(when (and (equal major-mode 'ztree-mode)
(boundp 'ztree-start-node))
- (setq ztree-line-to-node-table (make-hash-table))
- ;; create a hash table of node properties for line
- ;; used in 2-side tree mode
- (when ztree-node-side-fun
- (setq ztree-line-tree-properties (make-hash-table)))
- (let ((inhibit-read-only t))
- (erase-buffer)
- (funcall ztree-tree-header-fun)
- (setq ztree-start-line (line-number-at-pos (point)))
- (ztree-insert-node-contents ztree-start-node))
- (ztree-scroll-to-line (if line line ztree-start-line))))
-
+ (let ((prev-pos ztree-prev-position))
+ (setq ztree-line-to-node-table (make-hash-table))
+ ;; create a hash table of node properties for line
+ ;; used in 2-side tree mode
+ (when ztree-node-side-fun
+ (setq ztree-line-tree-properties (make-hash-table)))
+ (let ((inhibit-read-only t))
+ (setq ztree-prev-position (cons (line-number-at-pos (point))
+ (current-column)))
+ (erase-buffer)
+ (funcall ztree-tree-header-fun)
+ (setq ztree-start-line (line-number-at-pos (point)))
+ (ztree-insert-node-contents ztree-start-node)
+ (cond (line ;; local refresh, scroll to line
+ (ztree-scroll-to-line line)
+ (when prev-pos
+ (beginning-of-line)
+ (goto-char (+ (cdr ztree-prev-position) (point)))))
+ ((and (null line) (null prev-pos)) ;; first refresh
+ (ztree-scroll-to-line ztree-start-line)
+ (setq ztree-prev-position (cons (line-number-at-pos (point))
+ (current-column))))
+ ((and (null line) prev-pos) ;; not first refresh
+ ;; restore cursor position if possible
+ (ztree-scroll-to-line (car ztree-prev-position))
+ (beginning-of-line)
+ (goto-char (+ (cdr ztree-prev-position) (point)))))))))
+
+
(defun ztree-change-start-node (node)
"Refresh the buffer setting the new root NODE.
- [elpa] externals/ztree updated (3a4df17 -> 0a5b25f), Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 11c6e3b 02/23: Address PR feedback, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 47a6e40 03/23: Do not kill Ediff registry buffer, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 3315ecd 01/23: Address #38, #39, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree bf34366 04/23: Merge pull request #45 from xiongtx/ediff-restore, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 20b9c93 05/23: toggle show orphaned files, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree febc2d0 06/23: Merge pull request #46 from Iurie/master, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 0e0a39d 09/23: Issue #56: Preserve line/column position on refresh,
Stefan Monnier <=
- [elpa] externals/ztree 67a1d90 11/23: Issue #56: Dont preserve a cursor position on widen/narrow operations, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 369fd05 10/23: Issue #50: Show file permission differences, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 00d3318 12/23: Issue #59: Position curson on the beginning of the text, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 3273e1f 13/23: Issue #60: ztree-dir change Emacs default directory, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree a3e0442 14/23: Issue #59: Place cursor at the beginning of the text, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 2f62ba7 18/23: Issue #62: Cleared warnings, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree 4879576 19/23: Issue #39: restore cursor position and window configuration, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree c54425a 21/23: Updated README for issue #65., Stefan Monnier, 2020/12/17
- [elpa] externals/ztree d078daf 08/23: Issue #54: Added (optional) number of directory entries, Stefan Monnier, 2020/12/17
- [elpa] externals/ztree c5a1190 15/23: Issue #61: Error on unaccessible directory contents, Stefan Monnier, 2020/12/17