Як я можу отримати розумну політику розділених вікон?


15

Emacs постійно робить нові вікна і останнім часом це руйнує мій день. Як я можу запропонувати Emacs використовувати наступну політику під час створення вікон?

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

Крім того, я вважаю за краще, щоб мої вікна завжди були врівноваженими, але кожен розкол залишає вдівські розміри незбалансованими. Я вважаю за краще три вікна однакового розміру, ніж 1 велике і два, які занадто малі! Чи є налаштування для цього чи розумне місце, щоб поставити поради щодо балансу вікон?


Які операції створюють розділені вікна?
Ендрю Сванн

Я здебільшого займаюся програмуванням clojure останнім часом, так що сиддерні команди, такі як: сиддер-тест-пробіг-тести, сидр-пошук-вар, сиддер-док, сидр-перемикач на репл-буфер тощо тощо
експз

1
Більшість людей не зацікавлені у відкритті вихідного коду - наприклад, сидру - продукту - для налаштування його під свої потреби. Натомість вони шукають прості виправлення, такі як налаштування display-buffer-alist. Інші просто програмно це фіксують після факту - наприклад, delete-windowі switch-to-buffer, розділене вертикально / горизонтально тощо. І є кілька додаткових бібліотек, які допомагають керувати вікнами та / або повертатися до попереднього макета. Я вважаю за краще перший варіант - тобто змінити джерело і зробити його абсолютно ідеальним, але я в рідкісній меншості.
законник

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

1
Це здається, що ви хочете визначити спеціальну функцію ДІЙ, яка буде використовуватись із загальним умовою в display-buffer-alist. Ознайомтеся display-bufferз вимогами такої функції ДІЙ (і перелік стандартних функцій, код, який ви можете вивчити), але він буде нести відповідальність за відображення буфера у будь-який спосіб, який ви хочете (і, безумовно, може збалансувати вікна після цього) .
філ

Відповіді:


3

Трохи пізно, але тому що я теж шукав це і не зміг знайти готове рішення:

Ви можете визначити власну 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 використовувати визначену функцію розділення.


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)

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.