branch: master commit 8ba9ca2b21de196abc3d980e1cf779b0f08053d9 Author: Alexey Veretennikov <alexey.veretenni...@gmail.com> Commit: Alexey Veretennikov <alexey.veretenni...@gmail.com>
Added simple diff by using SPACE --- ztree-diff.el | 36 +++++++++++++++++++++--------------- ztree-view.el | 23 +++++++++++++++++------ 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/ztree-diff.el b/ztree-diff.el index 5b2d5f7..981e9bd 100644 --- a/ztree-diff.el +++ b/ztree-diff.el @@ -135,25 +135,29 @@ including . and ..") (ztree-diff (car ztree-diff-dirs-pair) (cdr ztree-diff-dirs-pair)))) +(defun ztree-diff-simple-diff (node) + "Create a simple diff buffer for files from left and right panels" + (let* ((node-left (ztree-diff-node-left-path node)) + (node-right (ztree-diff-node-right-path node))) + (when (and + node-left + node-right + (not (file-directory-p node-left))) + ;; show the diff window on the bottom + ;; to not to crush tree appearance + (let ((split-width-threshold nil)) + (diff node-left node-right))))) + + (defun ztree-diff-simple-diff-files () "Create a simple diff buffer for files from left and right panels" (interactive) (let ((found (ztree-find-node-at-point))) (when found - (let* ((node (car found)) - (node-left (ztree-diff-node-left-path node)) - (node-right (ztree-diff-node-right-path node))) - (when (and - node-left - node-right - (not (file-directory-p node-left))) - ;; show the diff window on the bottom - ;; to not to crush tree appearance - (let ((split-width-threshold nil)) - (diff node-left node-right))))))) - + (let ((node (car found))) + (ztree-diff-simple-diff node))))) -(defun ztree-diff-node-action (node) +(defun ztree-diff-node-action (node hard) (let ((left (ztree-diff-node-left-path node)) (right (ztree-diff-node-right-path node))) (when (and left right) @@ -162,7 +166,9 @@ including . and ..") (substring-no-properties (ztree-diff-node-short-name node)) " on left and right side are identical")) - (ediff left right))))) + (if hard + (ediff left right) + (ztree-diff-simple-diff node)))))) (defun ztree-diff-copy-file (node source-path destination-path copy-to-right) diff --git a/ztree-view.el b/ztree-view.el index c10de77..fecc928 100644 --- a/ztree-view.el +++ b/ztree-view.el @@ -135,7 +135,7 @@ the buffer is split to 2 trees") (defvar ztree-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "\r") 'ztree-perform-action) - (define-key map (kbd "SPC") 'ztree-perform-action) + (define-key map (kbd "SPC") 'ztree-perform-soft-action) (define-key map [double-mouse-1] 'ztree-perform-action) (define-key map (kbd "TAB") 'ztree-jump-side) (define-key map (kbd "g") 'ztree-refresh-buffer) @@ -218,24 +218,35 @@ if there is no node" (forward-line (1- line))) -(defun ztree-perform-action () - "Toggle expand/collapsed state for nodes" - (interactive) +(defun ztree-do-perform-action (hard) (let* ((line (line-number-at-pos)) (node (ztree-find-node-in-line line))) (when node (if (funcall ztree-node-is-expandable-fun node) ;; only for expandable nodes (ztree-toggle-expand-state node) - ;; do nothing leafs files for now + ;; perform action (when ztree-node-action-fun - (funcall ztree-node-action-fun node))) + (funcall ztree-node-action-fun node hard))) ;; save the current window start position (let ((current-pos (window-start))) ;; refresh buffer and scroll back to the saved line (ztree-refresh-buffer line) ;; restore window start position (set-window-start (selected-window) current-pos))))) + + +(defun ztree-perform-action () + "Toggle expand/collapsed state for nodes or perform hard action, +binded on RET, on node" + (interactive) + (ztree-do-perform-action t)) + +(defun ztree-perform-soft-action () + "Toggle expand/collapsed state for nodes or perform soft action, +binded on Space, on node" + (interactive) + (ztree-do-perform-action nil)) (defun ztree-toggle-expand-state (node)