ฉันจะรับนโยบายหน้าต่างแยกที่มีเหตุผลได้อย่างไร


13

Emacs กำลังสร้างหน้าต่างใหม่อยู่ตลอดเวลาและมันก็ทำให้วันของฉันพัง ฉันจะบอก emac ให้ใช้นโยบายต่อไปนี้เมื่อสร้างหน้าต่างได้อย่างไร

  • ชอบการแยกในแนวตั้ง
  • หยุดทำการแบ่งแนวตั้งเมื่อ windows จะน้อยกว่า 80 คอลัมน์
  • หยุดทำการแบ่งแนวนอนเมื่อหน้าต่างจะน้อยกว่า 60 แถว
  • เมื่อฉันไปถึงตารางขนาด 6x6 บนจอมอนิเตอร์ขนาด 27 "ของฉันให้เริ่มใช้งาน Windows อีกครั้ง

นอกจากนี้ฉันต้องการให้หน้าต่างของฉันมีความสมดุลอยู่เสมอ แต่การแบ่งทุกครั้งทำให้ขนาดแม่ม่ายไม่สมดุล ฉันอยากมีหน้าต่างที่มีขนาดเท่ากัน 3 หน้าต่างมากกว่า 1 ใหญ่และสองซึ่งเล็กเกินไป! มีการตั้งค่านี้หรือสถานที่ที่เหมาะสมที่จะให้คำแนะนำเกี่ยวกับ windows balance หรือไม่?


การดำเนินการใดที่กำลังสร้างหน้าต่างแยก
Andrew Swann

ฉันส่วนใหญ่ใช้การเขียนโปรแกรม Clojure เมื่อเร็ว ๆ นี้ดังนั้นคำสั่งไซเดอร์ที่ชอบ: 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/ …
ฏหมาย

1
ดูเหมือนว่าคุณต้องการกำหนดฟังก์ชัน ACTION แบบกำหนดเองเพื่อใช้กับ CONDITION ทั่วไปมากdisplay-buffer-alistๆ ดูdisplay-bufferข้อกำหนดของฟังก์ชั่น ACTION (และรายการฟังก์ชั่นมาตรฐานรหัสที่คุณสามารถตรวจสอบได้) แต่จะต้องรับผิดชอบในการแสดงบัฟเฟอร์ในลักษณะที่คุณต้องการ (และสามารถปรับสมดุลหน้าต่างในภายหลัง) .
phils

คำตอบ:


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)

หมายเหตุ:เกณฑ์จะต้องมีขนาดใหญ่เป็นสองเท่าของหน้าต่างที่เล็กที่สุดที่อนุญาตเพราะหน้าต่างใหม่แต่ละครั้งใช้ขนาดครึ่งหนึ่งของหน้าต่างเก่า
บรรทัดสุดท้ายบอกให้ emac ใช้ฟังก์ชันแยกที่กำหนดไว้



0

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

  • การตั้งค่าsplit-height-thresholdเป็นพื้นไม่ต้องการแยกแนวนอน
  • 200 ดูเหมือนว่าจะเป็นจำนวนที่มากพอที่แม้กระทั่งบนจอแสดงผลภายนอกขนาดใหญ่ Emacs จะแยกได้เพียงครั้งเดียวเท่านั้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.