branch: master
commit 57c0f5ec3afd46be8032b3eb16226056ee63aba5
Author: Oleh Krehel <[email protected]>
Commit: Oleh Krehel <[email protected]>
ivy.el (ivy-set-view-recur): Account for mulitple same kind splits
`window-tree' doesn't return e.g. (vert w1 (vert w2 w3)),
but instead (vert w1 w2 w3). Adjust for that.
Fixes #584
---
ivy.el | 40 ++++++++++++++++++++++++----------------
1 file changed, 24 insertions(+), 16 deletions(-)
diff --git a/ivy.el b/ivy.el
index 9fa822b..96fe05c 100644
--- a/ivy.el
+++ b/ivy.el
@@ -2810,12 +2810,10 @@ Use `ivy-pop-view' to delete any item from `ivy-views'."
(let* ((view (cl-labels ((ft (tr)
(if (consp tr)
(if (eq (car tr) t)
- (list 'vert
- (ft (nth 2 tr))
- (ft (nth 3 tr)))
- (list 'horz
- (ft (nth 2 tr))
- (ft (nth 3 tr))))
+ (cons 'vert
+ (mapcar #'ft (cddr tr)))
+ (cons 'horz
+ (mapcar #'ft (cddr tr))))
(with-current-buffer (window-buffer tr)
(cond ((buffer-file-name)
(list 'file (buffer-file-name)
(point)))
@@ -2854,19 +2852,29 @@ Use `ivy-pop-view' to delete any item from `ivy-views'."
(defun ivy-set-view-recur (view)
(cond ((eq (car view) 'vert)
- (let ((wnd1 (selected-window))
- (wnd2 (split-window-vertically)))
+ (let* ((wnd1 (selected-window))
+ (wnd2 (split-window-vertically))
+ (views (cdr view))
+ (v (pop views)))
(with-selected-window wnd1
- (ivy-set-view-recur (nth 1 view)))
- (with-selected-window wnd2
- (ivy-set-view-recur (nth 2 view)))))
+ (ivy-set-view-recur v))
+ (while (setq v (pop views))
+ (with-selected-window wnd2
+ (ivy-set-view-recur v))
+ (when views
+ (setq wnd2 (split-window-vertically))))))
((eq (car view) 'horz)
- (let ((wnd1 (selected-window))
- (wnd2 (split-window-horizontally)))
+ (let* ((wnd1 (selected-window))
+ (wnd2 (split-window-horizontally))
+ (views (cdr view))
+ (v (pop views)))
(with-selected-window wnd1
- (ivy-set-view-recur (nth 1 view)))
- (with-selected-window wnd2
- (ivy-set-view-recur (nth 2 view)))))
+ (ivy-set-view-recur v))
+ (while (setq v (pop views))
+ (with-selected-window wnd2
+ (ivy-set-view-recur v))
+ (when views
+ (setq wnd2 (split-window-horizontally))))))
((eq (car view) 'file)
(let* ((name (nth 1 view))
(virtual (assoc name ivy--virtual-buffers))