Alternar a orientação da janela dividida, a maneira mais rápida

16

Digamos que você tenha dois buffers abertos da seguinte maneira:

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

Qual é a maneira mais rápida de alternar os buffers para que você obtenha isso:

------------------------------------
           buffer 1                |
                                   |
------------------------------------
            buffer 2               |
                                   |
------------------------------------
Edgar Aroutiounian
fonte
stackoverflow.com/a/10546694 . biblioteca de transposição de quadros. Isenção de responsabilidade - não tentei.
Faheem Mitha 26/09/14
Há uma página wiki sobre este tema: emacswiki.org/emacs/ToggleWindowSplit
Chris Martin
Consulte emacs.stackexchange.com/q/5371 ; em particular, uma resposta menciona o transpose-frameMELPA.
TooTone

Respostas:

15

Aqui está um resumo que faria o que você está procurando:

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

( Copiado descaradamente de Magnars .emacs.d )

Além disso, se você chamá-lo novamente, ele re-dividirá suas janelas na orientação vertical original.

waymondo
fonte
Seria bom se isso pudesse preservar a relação de tamanho relativo das duas janelas. Costumo manter uma janela "curta" desigual na parte inferior e, ao alternar entre eles, seria útil preservar esse tamanho relativo. Embora uma janela vertical estreita seja provavelmente menos útil.
b4hand
1
Eu não posso te dizer quantas vezes eu uso isso. Tão útil.
Edgar Aroutiounian