ฉันจะบล็อกเฟรมไม่ให้แตกได้อย่างไร


16

ขณะนี้ฉันทำงานกับทับทิมและ rspec ฉันชอบความคิดที่ว่ามีเฟรมแยกต่างหากในจอภาพอื่นที่แสดงบัฟเฟอร์การคอมไพล์ การตั้งค่าปัจจุบันของฉันใช้เฟรม 'code' (ซึ่งฉันทำงานจริง) และเฟรม 'test-result' (ซึ่งฉันเห็นผลลัพธ์ rspec)

ปัญหาคือว่าเมื่อฉันพยายามที่จะเปิดบางรวบรวมข้อผิดพลาดหรือแฟ้มใน 'การทดสอบผล' กรอบแยกหน้าต่างในที่กรอบ สิ่งที่ฉันอยากทำคือเปิดให้อยู่ในกรอบ 'code' ของฉัน

ฉันใช้ตัวเลือกdisplay-buffer-reuse-framesนี้แล้ว ฉันพยายามตั้งค่าหน้าต่างผลลัพธ์การคอมไพล์dedicatedด้วย แต่เมื่อใดก็ตามที่ emacs พยายามเปิดหน้าต่างใหม่เฟรมใหม่จะถูกสร้างขึ้น (ซึ่งน่ากลัวเป็นพิเศษหากคุณใช้ Helm)

มีวิธีง่ายๆในการบรรลุเป้าหมายนี้หรือไม่?


1
การใช้ emacs เป็น IDE จะสะดวกกว่านี้มากหากมี "pin" บัฟเฟอร์อยู่ในตำแหน่งเพื่อให้มันปรากฏในจุดเดียวกันเสมอนับจากนี้เป็นต้นไป หนึ่งในคุณสมบัติ Visual Studio ที่ฉันคิดถึงมากที่สุดเมื่อใช้ emacs เป็นวิธีที่ง่ายและใช้งานง่ายในการแยกปักหมุดเชื่อมต่อซ่อนหรือจัดการกับหน้าต่าง
nispio

1
อ๋อ ฉันยังมาจากพื้นหลัง vs และฉันก็พลาดเช่นกันแม้ว่าฉันจะรู้สึกว่าอินเทอร์เฟซที่ไม่มีปุ่ม - ไม่มี - พล่าม emacs ดีกว่าเวลาส่วนใหญ่
Renan Ranelli

@nispio ฉันไม่ได้ใช้ VS ดังนั้นคุณสามารถระบุสิ่งที่คุณหมายถึงโดย "พิน" เฟรมของ Emacs มักจะเป็นเอกสิทธิ์และไม่เปลี่ยนแปลงเว้นแต่คุณจะโต้ตอบกับมัน
Vamsi

@vamsi: VS ใช้หน้าต่างเล็ก ๆ จำนวนมากที่คุณสามารถแนบกับด้านบน / ล่าง / ด้านข้างของเฟรมของคุณหรือคุณสามารถเปิดออกและสร้างเฟรมใหม่ คุณสามารถเทียบชิดขอบหน้าต่างของกรอบและตั้งค่าให้ซ่อนอัตโนมัติ ตัวอย่างเช่นหน้าต่างผลลัพธ์การคอมไพล์จะปรากฏขึ้นอย่างน่าอัศจรรย์จากด้านล่างเมื่อเริ่มต้นการรวบรวมและซ่อนตัวเองอีกครั้งหลังจากการรวบรวมสิ้นสุดลง หากคุณไม่ต้องการให้หน้าต่างซ่อนอัตโนมัติคุณสามารถตรึงหน้าต่างดังกล่าวไว้แล้วยกเลิกการตรึงอีกครั้งเมื่อคุณอ้างอิงเสร็จแล้ว
nispio

@nispio ฉันเห็น ฉันใช้popwin.elจาก MELPA เพื่อคอมไพล์ป๊อปอัพและช่วยบัฟเฟอร์ที่ยังคงมีอยู่จนกว่าC-gจะกด หากฉันต้องการพวกเขาเต็มเวลาฉันแค่เปลี่ยนไปใช้พวกเขาในหน้าต่างอื่น ฉันไม่ได้คิดเกี่ยวกับการตรึงหน้าต่างเพราะ emacs split-windows-sensiblyไม่
Vamsi

คำตอบ:


9

คุณต้องกำหนดค่าลิงกอริลลา 600 ปอนด์display-buffer-alistซึ่งกำหนดวิธีการdisplay-bufferเลือกตำแหน่งที่จะแสดงบัฟเฟอร์ มันทำให้display-buffer-reuse-framesล้าสมัยใน emacsen รุ่นใหม่ นี่คือการกำหนดค่าที่ควรจะแนะนำคุณ (atleast in emacs 24.3)

;; all buffers, try to reuse windows across all frames
(add-to-list 'display-buffer-alist
           '(".*". (display-buffer-reuse-window .
                                  ((reusable-frames . t)))))

;; except for compilation buffers where you want new and dedicated frames when necessary
(add-to-list 'display-buffer-alist
         '("^\\*Compile-Log\\*". ((display-buffer-reuse-window
                                   display-buffer-pop-up-frame) .
                                  ((reusable-frames . t)
                                  (inhibit-same-window . t)))))

อย่างที่คุณเห็นฉันใช้ regexp เพื่อจับคู่บัฟเฟอร์การคอมไพล์ล็อก เอกสารของdisplay-bufferควรให้คุณทราบว่าเกิดอะไรขึ้น แค่หัวขึ้นว่ามันไม่ใช่เอกสารที่สนุกที่สุดเท่าที่คุณเคยอ่าน ฉันเพิ่มพวกเขาตามลำดับดังนั้น regexp รวบรวมบันทึกจะถูกจับคู่ก่อน regexp ทั่วไป ปรับ regexp ตามความต้องการของคุณ

แก้ไขเพื่อให้เฟรมใด ๆ ที่ไม่สามารถกำหนดได้คุณสามารถประเมินผลM-: (set-frame-parameter nil 'unsplittable t)ในเฟรมนั้น ๆ แทนที่ศูนย์ด้วยจำเป็นFRAMEถ้าทำจาก elisp ระหว่างการตั้งค่าทั้งสองนี้ควรทำให้เฟรมการรวบรวมพิเศษยกเว้นว่าคุณหาไฟล์ในเฟรมนั้นโดยเฉพาะ


สิ่งนี้คือฉันไม่ต้องการเปิดเฟรมใหม่ตลอดเวลา สิ่งที่ฉันต้องการคือ จำกัด หน้าต่างทั้งหมดไว้ที่เฟรม 'code' ยกเว้นบัฟเฟอร์ 'compilation-log' ซึ่งควรจะแสดงในกรอบ 'test' เสมอ ฉันไม่พบวิธีเปลี่ยนเส้นทางหน้าต่างใหม่ทั้งหมดไปยังเฟรม 'รหัส' หลักของฉัน บางทีฉันอาจจะยังไม่ชัดเจนในคำถาม = (
Renan Ranelli

นี่ควรเปิดเฟรมใหม่สำหรับบันทึกการคอมไพล์เท่านั้นเช่นกันหากไม่มีเฟรมที่มีอยู่ คุณบอกฉันได้ไหมว่าเกิดอะไรขึ้น ดูการแก้ไขเกี่ยวกับวิธีทำให้เฟรมใด ๆ ไม่สามารถอัพโหลดได้
Vamsi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.