branch: elpa/helm
commit 094af39f167f2c31ed9e53d2a18919772142d128
Author: Thierry Volpiatto <[email protected]>
Commit: Thierry Volpiatto <[email protected]>

    Fix helm-toggle-resplit-window unpredictable order
    
    Don't use anymore a helm-multi-key-defun.
    Use now an iterator to choose split window side.
---
 helm-core.el | 47 ++++++++++++++++++++++-------------------------
 1 file changed, 22 insertions(+), 25 deletions(-)

diff --git a/helm-core.el b/helm-core.el
index 9a0d9c32d79..ad03e503031 100644
--- a/helm-core.el
+++ b/helm-core.el
@@ -477,7 +477,7 @@ i.e. the loop is not entered after running COMMAND."
     ;; Disable `file-cache-minibuffer-complete'.
     (define-key map (kbd "<C-tab>")    #'undefined)
     ;; Multi keys
-    (define-key map (kbd "C-t")        #'helm-toggle-resplit-and-swap-windows)
+    (define-key map (kbd "C-t")        #'helm-toggle-resplit-window)
     ;; Debugging command
     (define-key map (kbd "C-h C-d")    #'helm-enable-or-switch-to-debug)
     (define-key map (kbd "C-h c")      #'helm-customize-group)
@@ -7313,6 +7313,7 @@ unless FORCE-LONGEST is non nil."
 ;;; Resplit helm window
 ;;
 ;;
+(defvar helm--toggle-resplit-window-iterator nil)
 (defun helm-toggle-resplit-window ()
   "Toggle resplit helm window, vertically or horizontally."
   (interactive)
@@ -7332,35 +7333,30 @@ unless FORCE-LONGEST is non nil."
                          (user-error "Can't resplit while selecting actions"))
                         ((window-parameter (get-buffer-window 
helm-current-buffer) 'window-slot)
                          (user-error "Can't resplit a side window"))
-                        (t
-                         (let ((before-height (window-height)))
-                           (delete-window)
-                           (set-window-buffer
-                            (select-window
-                             (if (= (window-height) before-height) ; initial 
split was horizontal.
-                                 ;; Split window vertically with `helm-buffer' 
placed
-                                 ;; on the good side according to actual value 
of
-                                 ;; `helm-split-window-default-side'.
-                                 (prog1
-                                     (cond ((or (eq 
helm-split-window-default-side 'above)
-                                                (eq 
helm-split-window-default-side 'left))
-                                            (split-window
-                                             (selected-window) nil 'above))
-                                           (t (split-window-vertically)))
-                                   (setq helm-split-window-state 'vertical))
-                               ;; Split window vertically, same comment as 
above.
-                               (setq helm-split-window-state 'horizontal)
-                               (cond ((or (eq helm-split-window-default-side 
'left)
-                                          (eq helm-split-window-default-side 
'above))
-                                      (split-window (selected-window) nil 
'left))
-                                     (t (split-window-horizontally)))))
-                            helm-buffer))))
+                        (t (helm--toggle-resplit-window)))
                   (setq helm--window-side-state (helm--get-window-side-state)))
              (when helm-prevent-escaping-from-minibuffer
                (helm-prevent-switching-other-window :enabled t))))
           (t (error "current window configuration not suitable for 
splitting")))))
 (put 'helm-toggle-resplit-window 'helm-only t)
 
+(defun helm--toggle-resplit-window ()
+  (let ((state (helm--get-window-side-state)))
+    (unless (and helm--toggle-resplit-window-iterator
+                 (eq state helm--window-side-state))
+      (setq helm--toggle-resplit-window-iterator
+            (helm-iter-circular (helm-acase state
+                                  (right '(below left above right))
+                                  (left  '(above right below left))
+                                  (below '(left above right below))
+                                  (above '(right below left above))))))
+    (delete-window)
+    (set-window-buffer
+     (select-window
+      (split-window (selected-window) nil
+                    (helm-iter-next helm--toggle-resplit-window-iterator)))
+     helm-buffer)))
+
 ;; Utility: Resize helm window.
 (defun helm-enlarge-window-1 (n)
   "Enlarge or narrow helm window.
@@ -7453,7 +7449,8 @@ If N is positive enlarge, if negative narrow."
                (and resize (window-resize w2 resize split-state))
                (set-window-start w1 s2 t)
                (set-window-start w2 s1 t))
-             (setq helm--window-side-state (helm--get-window-side-state)))))))
+             (setq helm--window-side-state (helm--get-window-side-state)
+                   helm--toggle-resplit-window-iterator nil))))))
 (put 'helm-swap-windows 'helm-only t)
 
 (defun helm--get-window-side-state ()

Reply via email to