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

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.