Как я могу получить разумную политику разделения окон?


13

Emacs постоянно делает новые окна, и это в последнее время портит мне жизнь. Как я могу сказать emacs использовать следующую политику при создании окон?

  • Предпочитаю вертикальные расколы
  • Прекратите делать вертикальные разбиения, когда окна будут меньше, чем 80 столбцов.
  • Прекратите делать горизонтальные разбиения, когда окно будет меньше, чем 60 строк.
  • Когда я достигну этой сетки 6x6, на моем 27-дюймовом мониторе начнем многократно использовать окна!

Кроме того, я бы предпочел, чтобы мои окна всегда были сбалансированными, но при каждом разделении размеры вдов остаются несбалансированными. Я предпочел бы иметь 3 одинаковых по размеру окна, чем одно большое и два слишком маленьких! Есть ли для этого настройка или разумное место, чтобы поставить совет по балансам?


Какие операции создают разделенные окна?
Эндрю Суонн

В основном я в последнее время занимаюсь программированием clojure, поэтому команды cider, такие как: cider-test-run-tests, cider-find-var, cider-doc, cider-switch-to-repl-buffer и т. Д. И т. Д.
expez

1
Большинство людей не заинтересованы в открытии исходного кода - например, сидр -stuff - настроить его для удовлетворения своих потребностей. Вместо этого они ищут простые исправления, такие как настройка display-buffer-alist. Другие просто программно исправляют это по факту - например, delete-windowи switch-to-buffer, разделить по вертикали / по горизонтали и так далее. И есть несколько дополнительных библиотек, которые помогают управлять окнами и / или возвращаться к предыдущему макету. Я предпочитаю первый вариант - то есть изменить исходный код и сделать его абсолютно идеальным, но я в редком меньшинстве людей.
законник

5
Посмотрите на раздел в руководстве относительно окна расщепления - split-height-thresholdи split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/...
lawlist

1
Похоже, вы хотите определить пользовательскую функцию ACTION для использования с очень общим условием в display-buffer-alist. См. display-bufferТребования к такой функции ACTION (и список стандартных функций, код, который вы можете исследовать), но он будет отвечать за отображение буфера любым способом, который вы пожелаете (и, конечно, может впоследствии сбалансировать окна) ,
Фил

Ответы:


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 будет разделяться не более одного раза.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.