Làm thế nào tôi có thể có được một chính sách chia cửa sổ hợp lý?


13

Emacs liên tục tạo ra các cửa sổ mới và nó đã hủy hoại ngày của tôi gần đây. Làm cách nào tôi có thể bảo emacs sử dụng chính sách sau khi tạo windows?

  • Thích chia dọc
  • Dừng thực hiện phân tách dọc khi các cửa sổ sẽ nhỏ hơn 80 cột.
  • Dừng thực hiện chia tách ngang khi cửa sổ sẽ nhỏ hơn 60 hàng.
  • Khi tôi đạt đến lưới 6x6 này, trên màn hình 27 ,, bắt đầu sử dụng lại các cửa sổ!

Ngoài ra, tôi muốn các cửa sổ của mình luôn được cân bằng, nhưng mỗi lần phân chia đều khiến kích thước của góa phụ không cân bằng. Tôi muốn có 3 cửa sổ có kích thước bằng nhau hơn 1 cửa sổ lớn và hai cửa sổ quá nhỏ! Có một thiết lập cho điều này, hoặc một nơi hợp lý để đưa ra một lời khuyên về cửa sổ cân bằng?


Những hoạt động đang tạo ra các cửa sổ phân chia?
Andrew Swann

Gần đây tôi đang thực hiện lập trình clojure nên các lệnh cider như: cider-test-run-tests, cider-find-var, cider-doc, cider-switch-to-repl-buffer, v.v.
expez 22/2/2016

1
Hầu hết mọi người không quan tâm đến việc mở mã nguồn - ví dụ: công cụ rượu táo - để tùy chỉnh nó cho phù hợp với nhu cầu của họ. Thay vào đó, họ tìm kiếm các bản sửa lỗi đơn giản như tùy chỉnh display-buffer-alist. Những người khác chỉ lập trình sửa nó sau khi thực tế - ví dụ, delete-windowswitch-to-buffer, chia theo chiều dọc / chiều ngang, v.v. Và, có một số thư viện bổ sung để giúp quản lý các cửa sổ và / hoặc hoàn nguyên về bố cục trước đó. Tôi thích tùy chọn đầu tiên - nghĩa là sửa đổi nguồn và làm cho nó hoàn toàn hoàn hảo, nhưng tôi thuộc nhóm thiểu số hiếm hoi.
luật

5
Hãy xem phần trong hướng dẫn sử dụng về chia tách cửa sổ - split-height-thresholdsplit-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/ trộm
luật

1
Có vẻ như bạn muốn xác định một chức năng HÀNH ĐỘNG tùy chỉnh để sử dụng với một ĐIỀU KIỆN rất chung chung display-buffer-alist. Xem display-buffercác yêu cầu của hàm ACTION như vậy (và danh sách các hàm tiêu chuẩn, mã mà bạn có thể kiểm tra), nhưng nó sẽ chịu trách nhiệm hiển thị bộ đệm theo bất kỳ cách nào bạn muốn (và chắc chắn có thể cân bằng các cửa sổ sau đó) .
phils

Câu trả lời:


2

Tôi đã sử dụng những điều sau đây trong một thời gian dài. Bạn có thể cần chỉnh sửa nó để phù hợp với phong cách ưa thích của riêng bạn.

;; ------------------------------------------------------------------
;; display-buffer

;; The default behaviour of `display-buffer' is to always create a new
;; window. As I normally use a large display sporting a number of
;; side-by-side windows, this is a bit obnoxious.
;;
;; The code below will make Emacs reuse existing windows, with the
;; exception that if have a single window open in a large display, it
;; will be split horisontally.

(setq pop-up-windows nil)

(defun my-display-buffer-function (buf not-this-window)
  (if (and (not pop-up-frames)
           (one-window-p)
           (or not-this-window
               (not (eq (window-buffer (selected-window)) buf)))
           (> (frame-width) 162))
      (split-window-horizontally))
  ;; Note: Some modules sets `pop-up-windows' to t before calling
  ;; `display-buffer' -- Why, oh, why!
  (let ((display-buffer-function nil)
        (pop-up-windows nil))
    (display-buffer buf not-this-window)))

(setq display-buffer-function 'my-display-buffer-function)

1

Hơi muộn một chút, nhưng vì tôi cũng đã tìm kiếm cái này và không thể tìm ra giải pháp sẵn sàng:

Bạn có thể xác định split-window-sensiblychức năng của riêng bạn .
Để làm như vậy, hãy đặt những điều sau vào init.el:

(setq split-height-threshold 120
      split-width-threshold 160)

(defun my-split-window-sensibly (&optional window)
    "replacement `split-window-sensibly' function which prefers vertical splits"
    (interactive)
    (let ((window (or window (selected-window))))
        (or (and (window-splittable-p window t)
                 (with-selected-window window
                     (split-window-right)))
            (and (window-splittable-p window)
                 (with-selected-window window
                     (split-window-below))))))

(setq split-window-preferred-function #'my-split-window-sensibly)

Lưu ý: các ngưỡng cần lớn gấp đôi cửa sổ nhỏ nhất cho phép, vì mỗi cửa sổ mới sử dụng một nửa kích thước cửa sổ cũ.
Dòng cuối cùng cho emacs sử dụng hàm phân tách đã xác định.


0

Điều này sẽ làm cho bạn thích chia tách dọc

(setq split-width-threshold 1)

0

(setq split-height-threshold nil) (setq split-width-threshold 200)

  • Thiết lập split-height-thresholdvề cơ bản không bao giờ muốn chia theo chiều ngang
  • 200 có vẻ như là một con số đủ cao mà ngay cả trên màn hình lớn Emacs sẽ chỉ tách ra nhiều nhất một lần.
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.