합리적인 분할 창 정책을 얻으려면 어떻게해야합니까?


13

이맥스는 끊임없이 새로운 창문을 만들고 있으며 요즘 내 하루를 망치고 있습니다. Windows를 만들 때 emacs가 다음 정책을 사용하도록하려면 어떻게해야합니까?

  • 수직 분할 선호
  • 창이 열 수가 80보다 작 으면 세로 분할을 중지하십시오.
  • 창이 60 행 미만일 경우 수평 분할을 중지하십시오.
  • 이 6x6 그리드에 도달하면 27 인치 모니터에서 창 재사용을 시작하십시오!

또한, 나는 항상 창문의 균형을 유지하고 싶지만 모든 분할은 미망인 크기를 불균형으로 남겨 둡니다. 차라리 1보다 큰 3 개의 창문이 있고 너무 작은 2 개의 창문이 있습니다! 이것에 대한 설정이 있습니까, 아니면 균형 창 조언을 할 수있는 합리적인 장소가 있습니까?


분할 윈도우를 만드는 작업은 무엇입니까?
앤드류 스완

나는 주로 최근 프로그래밍 Clojure에서 일을 해요 그래서 사과 명령과 같은 : 사이다 - 테스트 - 실행 - 테스트, 사이다 찾기-VAR, 사이다 - 문서, 사이다 - 스위치 - 투 - REPL 버퍼 등 등
expez

1
대부분의 사람들은 소스 코드 (예 : 사이다와 같은 것들)를 열어 자신의 요구에 맞게 커스터마이징하지 않습니다. 대신, 사용자 정의와 같은 간단한 수정 사항을 찾습니다 display-buffer-alist. 다른 사람들은 사실 후에 프로그래밍 방식으로 문제를 해결합니다 (예 : delete-windowswitch-to-buffer, 수직 / 수평 분할 등). 또한 창 관리 및 / 또는 이전 레이아웃으로 되 돌리는 데 도움이되는 몇 가지 추가 라이브러리가 있습니다. 나는 첫 번째 옵션을 선호합니다. 즉, 소스를 수정하고 그것을 완벽하게 만드십시오. 그러나 나는 드문 소수의 사람들입니다.
lawlist

5
설명서에 대한 윈도우 분할의 섹션에서보세요 - split-height-thresholdsplit-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/...
lawlist

1
의 매우 일반적인 CONDITION과 함께 사용할 사용자 지정 ACTION 함수를 정의하려는 것 같습니다 display-buffer-alist. display-buffer이러한 ACTION 함수 (및 표준 함수 목록, 검사 할 수있는 코드)의 요구 사항은 참조하십시오 . 그러나 원하는 방식으로 버퍼를 표시해야합니다 (그리고 나중에 창 균형을 잡을 수 있음). .
phils

답변:


2

나는 오랫동안 다음을 사용 해왔다. 선호하는 스타일에 맞게 편집해야 할 수도 있습니다.

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

2

조금 늦었지만, 이것도 검색했기 때문에 준비된 해결책을 찾을 수 없었습니다.

자신의 split-window-sensibly기능을 정의 할 수 있습니다 .
이렇게하려면 다음을 입력하십시오 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)

참고 : 새 창은 각각 이전 창 크기의 절반을 사용하므로 임계 값은 허용되는 가장 작은 창보다 두 배 커야합니다.
마지막 줄은 emacs에게 정의 된 split 함수를 사용하도록 지시합니다.


0

이것은 수직 분할을 선호합니다

(setq split-width-threshold 1)

0

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

  • split-height-threshold기본적으로 가로로 나누기를 원하지 않는 설정
  • 200 큰 외부 디스플레이에서도 Emacs는 최대 한 번만 분할되는 높은 숫자처럼 보입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.