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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.