emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 57c0f5e 095/348: ivy.el (ivy-set-view-recur): Account for


From: Oleh Krehel
Subject: [elpa] master 57c0f5e 095/348: ivy.el (ivy-set-view-recur): Account for mulitple same kind splits
Date: Sat, 8 Apr 2017 11:03:35 -0400 (EDT)

branch: master
commit 57c0f5ec3afd46be8032b3eb16226056ee63aba5
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]