Bagaimana saya bisa mendapatkan kebijakan split-window yang masuk akal?


13

Emacs terus-menerus membuat jendela baru dan telah merusak hari saya belakangan ini. Bagaimana saya bisa memberi tahu emacs untuk menggunakan kebijakan berikut saat membuat windows?

  • Memilih perpecahan vertikal
  • Berhentilah melakukan pemisahan vertikal saat windows kurang dari 80 kolom.
  • Berhenti melakukan pemisahan horizontal saat jendela kurang dari 60 baris.
  • Ketika saya mencapai kisi 6x6 ini, pada monitor 27 "saya, mulailah menggunakan kembali windows!

Juga, saya lebih suka jendela saya selalu seimbang, tetapi setiap perpecahan membuat ukuran janda tidak seimbang. Saya lebih suka memiliki 3 jendela berukuran sama dari 1 besar dan dua yang terlalu kecil! Apakah ada pengaturan untuk ini, atau tempat yang masuk akal untuk memberikan saran jendela keseimbangan?


Operasi apa yang membuat windows split?
Andrew Swann

Saya kebanyakan melakukan pemrograman clojure akhir-akhir ini jadi perintah cider seperti: cider-test-run-tes, cider-find-var, cider-doc, cider-switch-to-repl-buffer dll dll
expez

1
Kebanyakan orang tidak tertarik untuk membuka kode sumber - mis., Sari apel - untuk menyesuaikannya sesuai dengan kebutuhan mereka. Sebaliknya, mereka mencari perbaikan sederhana seperti menyesuaikan display-buffer-alist. Lainnya hanya secara terprogram memperbaikinya setelah fakta - misalnya, delete-windowdan switch-to-buffer, terbelah secara vertikal / horizontal, dan sebagainya. Dan, ada beberapa perpustakaan tambahan untuk membantu mengelola jendela dan / atau mengembalikan kembali ke tata letak sebelumnya. Saya lebih suka opsi pertama - yaitu, memodifikasi sumber dan membuatnya benar-benar sempurna, tetapi saya jarang ada orang.
lawlist

5
Lihat bagian dalam manual tentang pemisahan jendela - split-height-thresholddan split-width-threshold- gnu.org/software/emacs/manual/html_node/emacs/…
hukum

1
Sepertinya Anda ingin mendefinisikan fungsi TINDAKAN kustom untuk digunakan dengan KONDISI yang sangat umum di display-buffer-alist. Lihat display-bufferpersyaratan fungsi ACTION tersebut (dan daftar fungsi standar, kode yang dapat Anda periksa), tetapi akan bertanggung jawab untuk menampilkan buffer dengan cara apa pun yang Anda inginkan (dan tentunya dapat menyeimbangkan jendela setelahnya) .
phils

Jawaban:


2

Saya telah menggunakan yang berikut ini untuk waktu yang lama. Anda mungkin perlu mengeditnya untuk mengakomodasi gaya pilihan Anda sendiri.

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

Sedikit terlambat, tetapi karena saya juga mencari ini dan tidak dapat menemukan solusi yang siap:

Anda bisa mendefinisikan split-window-sensiblyfungsi Anda sendiri .
Untuk melakukannya, masukkan yang berikut ini di 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)

Catatan: ambang batas harus dua kali lebih besar dari jendela terkecil yang diizinkan, karena masing-masing jendela baru menggunakan setengah dari ukuran jendela sebelumnya.
Baris terakhir memberitahu emacs untuk menggunakan fungsi pemisahan yang ditentukan.


0

Ini akan membuat Anda lebih suka perpecahan vertikal

(setq split-width-threshold 1)

0

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

  • Pengaturan split-height-thresholdpada dasarnya tidak pernah ingin membelah secara horizontal
  • 200 Sepertinya angka yang cukup tinggi yang bahkan pada layar eksternal besar Emacs hanya akan terbagi paling banyak sekali.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.