Beralih orientasi pembagian jendela, cara tercepat

16

Katakanlah Anda memiliki dua buffer terbuka seperti:

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

Apa cara tercepat untuk mengganti buffer sehingga Anda mendapatkan ini:

------------------------------------
           buffer 1                |
                                   |
------------------------------------
            buffer 2               |
                                   |
------------------------------------
Edgar Aroutiounian
sumber
stackoverflow.com/a/10546694 . perpustakaan bingkai-transpos. Penafian - belum mencobanya.
Faheem Mitha
Ada halaman wiki tentang topik ini: emacswiki.org/emacs/ToggleWindowSplit
Chris Martin
Lihat emacs.stackexchange.com/q/5371 ; khususnya satu jawaban menyebutkan transpose-frametentang MELPA.
TooTone

Jawaban:

15

Berikut ini defun yang akan melakukan apa yang Anda cari:

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

(Tanpa malu-malu disalin dari Magnars .emacs.d )

Ditambah lagi jika Anda memanggilnya lagi, itu akan membagi ulang windows Anda dalam orientasi vertikal asli.

waymondo
sumber
Alangkah baiknya jika ini bisa menjaga hubungan ukuran relatif dari dua jendela. Saya sering menyimpan jendela "pendek" yang tidak rata di bagian bawah, dan ketika beralih bolak-balik, akan sangat membantu untuk mempertahankan ukuran relatif ini. Meskipun jendela vertikal sempit mungkin kurang bermanfaat.
b4hand
1
Saya tidak bisa memberi tahu Anda berapa kali saya menggunakan ini. Sangat membantu.
Edgar Aroutiounian