Changer l'orientation de la fenêtre divisée, le moyen le plus rapide

16

Supposons que vous ayez deux tampons ouverts comme suit:

------------------------------------
            |                      |
  buffer 1  |        buffer 2      |       
            |                      |
------------------------------------

Quel est le moyen le plus rapide de changer les tampons pour obtenir ceci:

------------------------------------
           buffer 1                |
                                   |
------------------------------------
            buffer 2               |
                                   |
------------------------------------
Edgar Aroutiounian
la source
stackoverflow.com/a/10546694 . bibliothèque transpose-frame. Avertissement - je ne l'ai pas essayé.
Faheem Mitha
Il y a une page wiki sur ce sujet: emacswiki.org/emacs/ToggleWindowSplit
Chris Martin
Voir emacs.stackexchange.com/q/5371 ; en particulier une réponse mentionne transpose-frameMELPA.
TooTone

Réponses:

15

Voici un defun qui ferait ce que vous cherchez:

(defun toggle-window-split ()
  (interactive)
  (if (= (count-windows) 2)
      (let* ((this-win-buffer (window-buffer))
             (next-win-buffer (window-buffer (next-window)))
             (this-win-edges (window-edges (selected-window)))
             (next-win-edges (window-edges (next-window)))
             (this-win-2nd (not (and (<= (car this-win-edges)
                                         (car next-win-edges))
                                     (<= (cadr this-win-edges)
                                         (cadr next-win-edges)))))
             (splitter
              (if (= (car this-win-edges)
                     (car (window-edges (next-window))))
                  'split-window-horizontally
                'split-window-vertically)))
        (delete-other-windows)
        (let ((first-win (selected-window)))
          (funcall splitter)
          (if this-win-2nd (other-window 1))
          (set-window-buffer (selected-window) this-win-buffer)
          (set-window-buffer (next-window) next-win-buffer)
          (select-window first-win)
          (if this-win-2nd (other-window 1))))))

( Copie sans vergogne de Magnars .emacs.d )

De plus, si vous l'appelez à nouveau, il divisera à nouveau vos fenêtres dans l'orientation verticale d'origine.

waymondo
la source
Ce serait bien si cela pouvait préserver la relation de taille relative des deux fenêtres. Je garde souvent une fenêtre "courte" inégale en bas, et lors des allers-retours, il serait utile de conserver cette taille relative. Bien qu'une fenêtre verticale étroite soit probablement moins utile.
b4hand
1
Je ne peux pas vous dire combien de fois j'utilise ceci. Tellement utile.
Edgar Aroutiounian