Cambia l'orientamento della divisione della finestra, il modo più veloce


16

Supponi di avere due buffer aperti in questo modo:

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

Qual è il modo più veloce per cambiare i buffer in modo da ottenere questo:

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

stackoverflow.com/a/10546694 . libreria transpose-frame. Disclaimer - non l'ho provato.
Faheem Mitha,

C'è una pagina wiki su questo argomento: emacswiki.org/emacs/ToggleWindowSplit
Chris Martin

Vedi emacs.stackexchange.com/q/5371 ; in particolare una risposta menziona transpose-frameil MELPA.
TooTone,

Risposte:


15

Ecco un defun che farebbe quello che stai cercando:

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

(Copiato spudoratamente da Magnars .emacs.d )

Inoltre, se lo chiami di nuovo, suddividerà nuovamente le finestre nell'orientamento verticale originale.


Sarebbe bello se questo potesse preservare la relazione dimensionale relativa delle due finestre. Tengo spesso una finestra "corta" irregolare in basso, e quando si passa avanti e indietro, sarebbe utile preservare questa dimensione relativa. Sebbene una finestra verticale stretta sia probabilmente meno utile.
b4hand,

1
Non posso dirti quante volte lo uso. Così utile.
Edgar Aroutiounian,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.