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.