branch: externals/ztree
commit 487957664cedc61d70feccc881092eef6746977b
Author: Alexey Veretennikov <[email protected]>
Commit: Alexey Veretennikov <[email protected]>
Issue #39: restore cursor position and window configuration
- The window configurations are now stored as a stack rather
than one buffer-local variable
- Introduced global hook on window configuration change
to redraw the contents of visible ztree buffers
---
ztree-diff.el | 13 +++++++++----
ztree-view.el | 11 +++++++++++
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/ztree-diff.el b/ztree-diff.el
index 5629237..3ff39fb 100644
--- a/ztree-diff.el
+++ b/ztree-diff.el
@@ -28,6 +28,7 @@
;;; Commentary:
;;; Code:
+(eval-when-compile (require 'cl))
(require 'ztree-view)
(require 'ztree-diff-model)
@@ -101,8 +102,10 @@ By default paths starting with dot (like .git) are
ignored")
(defvar-local ztree-diff-wait-message nil
"Message showing while constructing the diff tree.")
-(defvar-local ztree-diff-ediff-previous-window-configuration nil
- "Window configuration prior to calling `ediff'.")
+(defvar ztree-diff-ediff-previous-window-configurations nil
+ "Window configurations prior to calling `ediff'.
+A queue of window configurations, allowing
+to restore last configuration even if there were a couple of ediff sessions")
;;;###autoload
(define-minor-mode ztreediff-mode
@@ -238,7 +241,8 @@ Argument NODE node containing paths to files to call a diff
on."
See the Info node `(ediff) hooks'.
This hook function removes itself."
- (setq ztree-diff-ediff-previous-window-configuration
(current-window-configuration))
+ (push (current-window-configuration)
ztree-diff-ediff-previous-window-configurations)
+ (setq ztree-prev-position (cons (line-number-at-pos (point))
(current-column)))
(remove-hook 'ediff-before-setup-hook
#'ztree-diff-ediff-before-setup-hook-function))
(defun ztree-diff-ediff-quit-hook-function ()
@@ -247,7 +251,8 @@ This hook function removes itself."
See the Info node `(ediff) hooks'.
This hook function removes itself."
- (set-window-configuration ztree-diff-ediff-previous-window-configuration)
+ (set-window-configuration (pop
ztree-diff-ediff-previous-window-configurations))
+ (ztree-refresh-buffer)
(remove-hook 'ediff-quit-hook #'ztree-diff-ediff-quit-hook-function))
(defun ztree-diff-ediff (file-a file-b &optional startup-hooks)
diff --git a/ztree-view.el b/ztree-view.el
index c539699..e053210 100644
--- a/ztree-view.el
+++ b/ztree-view.el
@@ -745,6 +745,16 @@ change the root node to the node specified."
(ztree-scroll-to-line
(+ count (line-number-at-pos))))
+;;;###autoload
+(defun ztree-view-on-window-configuration-changed ()
+ "Hook called then window configuration changed to resize buffer's contents"
+ ;; refresh visible ztree buffers
+ (walk-windows (lambda (win)
+ (with-current-buffer (window-buffer win)
+ (when (derived-mode-p 'ztree-mode)
+ (ztree-refresh-buffer))))
+ nil 'visible))
+
(defun ztree-view (
buffer-name
start-node
@@ -788,6 +798,7 @@ Optional argument NODE-SIDE-FUN Determines the side of the
node."
(setq ztree-node-face-fun face-fun)
(setq ztree-node-action-fun action-fun)
(setq ztree-node-side-fun node-side-fun)
+ (add-hook 'window-configuration-change-hook
#'ztree-view-on-window-configuration-changed)
(ztree-refresh-buffer)))