Chuyển hướng cửa sổ phân chia, cách nhanh nhất


16

Giả sử bạn có hai bộ đệm mở như vậy:

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

Cách nhanh nhất để chuyển đổi bộ đệm để bạn có được điều này:

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

stackoverflow.com/a/10546694 . thư viện khung chuyển vị. Tuyên bố từ chối - đã không thử nó.
Faheem Mitha

Có một trang wiki về chủ đề này: emacswiki.org/emacs/ToggleWindowSplit
Chris Martin

Xem emacs.stackexchange.com/q/5371 ; đặc biệt một câu trả lời đề cập đến transpose-frameMELPA.
TooTone

Câu trả lời:


15

Đây là một defun sẽ làm những gì bạn đang tìm kiếm:

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

(Sao chép một cách đáng xấu hổ từ Magnars .emacs.d )

Ngoài ra, nếu bạn gọi lại, nó sẽ phân chia lại các cửa sổ của bạn theo hướng dọc ban đầu.


Sẽ thật tuyệt nếu điều này có thể duy trì mối quan hệ kích thước tương đối của hai cửa sổ. Tôi thường giữ một cửa sổ "ngắn" không đều ở phía dưới và khi chuyển đổi qua lại, sẽ rất hữu ích để duy trì kích thước tương đối này. Mặc dù một cửa sổ dọc hẹp có lẽ ít hữu ích hơn.
b4hand

1
Tôi không thể nói với bạn bao nhiêu lần tôi sử dụng nó. Thật hữu ích.
Edgar Aroutiounian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.