Mantıklı bir bölünmüş pencere politikasını nasıl alabilirim?


15

Emacs sürekli yeni pencereler yapıyor ve son günlerimi mahvediyor. Emacs'a pencere oluştururken aşağıdaki politikayı nasıl kullanmasını söyleyebilirim?

  • Dikey bölmeleri tercih et
  • Pencereler 80 sütundan az olduğunda dikey bölünmeler yapmayı bırakın.
  • Pencere 60 satırdan az olduğunda yatay bölünmeler yapmayı bırakın.
  • Bu 6x6 ızgaraya ulaştığımda, 27 "monitörümde pencereleri yeniden kullanmaya başlayın!

Ayrıca, pencerelerimin her zaman dengelenmesini tercih ederim, ancak her bölünme dul boyutlarını dengesiz bırakır. Daha çok 1 büyük ve iki olan çok küçük 3 eşit büyüklükte pencere olurdu! Bunun için bir ayar var mı veya bir denge penceresi tavsiyesi vermek için mantıklı bir yer var mı?


Bölünmüş pencereleri hangi işlemler oluşturuyor?
— Andrew Swann

Ben çoğunlukla son zamanlarda programlama Clojure yapıyorum böylece şarabı komutları gibi: elma şarabı test işletilen-testler, elma şarabı-buluntu var, elma şarabı-doc, elma şarabı-anahtarı-repl-tampon vs vs
— expez

1
Çoğu insan, kaynak kodunu (ör. Elma şarabı -) kendi ihtiyaçlarına göre özelleştirmek için açmak istemez. Bunun yerine, özelleştirilmesi gibi basit düzeltmeleri ararlar display-buffer-alist. Örneğin - Diğerleri sadece programlı aslında sonra bunu düzeltmek delete-windowve switch-to-bufferbölünmüş yatay / dikey ve benzeri. Ayrıca, pencereleri yönetmenize ve / veya önceki düzene geri dönmenize yardımcı olacak bazı ek kütüphaneler vardır. İlk seçeneği tercih ediyorum - yani, kaynağı değiştirin ve kesinlikle mükemmel hale getirin, ancak insanların nadir azınlığındayım.
— hukukçu

5
Kılavuzdaki pencere bölme ile ilgili bölüme bir göz atın - split-height-thresholdve split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/…
— kanun listesi

1
Çok genel bir CONDITION ile kullanmak için özel bir EYLEM işlevi tanımlamak istediğiniz gibi görünüyor display-buffer-alist. display-bufferBöyle bir EYLEM işlevinin (ve inceleyebileceğiniz kodun standart işlevlerin listesine) ilişkin gereksinimlerine bakın , ancak arabelleği istediğiniz şekilde görüntülemekten sorumlu olacaktır (ve daha sonra pencereleri kesinlikle dengeleyebilir) .
— phils

Yanıtlar:


3

Biraz geç, ama ben de bunu aradım ve hazır bir çözüm bulamadım çünkü:

Kendi split-window-sensiblyfonksiyonunuzu tanımlayabilirsiniz .
Bunu yapmak için aşağıdakileri yapın 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)

Not: eşiklerin izin verilen en küçük pencerenin iki katı kadar büyük olması gerekir, çünkü yeni pencerelerin her biri eski pencere boyutunun yarısını kullanır.
Son satır emac'lara tanımlı split işlevini kullanmasını söyler.


2

Uzun zamandır aşağıdakileri kullanıyorum. Tercih ettiğiniz stile uyması için düzenlemeniz gerekebilir.

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

Bu dikey bölmeleri tercih etmenizi sağlayacaktır

(setq split-width-threshold 1)

0

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

  • Ayar split-height-thresholdtemelde asla yatay bölmek isteyen için
  • 200 büyük bir harici ekranda bile Emacs'ın en fazla bir kez bölüneceği kadar yüksek bir sayı gibi görünüyor.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.