Làm cách nào tôi có thể ghim bộ đệm * biên dịch * để không bao giờ rời khỏi một khung / cửa sổ


7

Tôi muốn có *compilation*bộ đệm luôn ở trong khung riêng của nó. Tuy nhiên, hiện tại nếu tôi chạy M-x compiletừ khung / cửa sổ khác, bộ đệm cũng bật lên trong một cửa sổ mới. Làm thế nào tôi có thể khiến emacs thay vào đó chỉ nâng khung hiện có đang hiển thị *compilation*bộ đệm?


Tôi tin rằng đây là câu trả lời cho câu hỏi của bạn, mà tôi đã viết cách đây 3 năm khi bắt đầu nhiệm vụ Emacs của mình: stackoverflow.com/a/19415289/2112361 Các phần mã áp dụng trong compile.elcó thể đã thay đổi và tôi đã thực hiện nhiều thay đổi / cải tiến các chức năng tùy chỉnh của tôi nhắm vào các khung nhất định để hiển thị bộ đệm: stackoverflow.com/questions/18346785/. Hãy xem và xem liên kết đầu tiên có xấp xỉ những gì bạn đang tìm kiếm không - ai biết, nó thậm chí có thể vẫn hoạt động mà không cần tạo ra sự thay đổi
luật

Câu trả lời:


5

Thông thường, Emacs coi khung đã chọn là khung duy nhất có thể sử dụng lại. Nói cách khác, thông thường Emacs chỉ tìm kiếm khung hiện tại ("đã chọn") cho các cửa sổ đã chứa bộ đệm để hiển thị ("cửa sổ có thể sử dụng lại"). Những gì bạn cần là Emacs coi khung bộ đệm biên dịch là khung có thể sử dụng lại:

(push '("\\*compilation\\*" . (nil (reusable-frames . t))) display-buffer-alist)

Đoạn mã trên sẽ làm cho tất cả các khung có thể sử dụng lại khi display-bufferhiển thị *compilation*bộ đệm. Nhìn vào tài liệu display-buffer-reuse-windowđể tìm hiểu những giá trị khác reusable-framescó thể nhận được.

Tuy nhiên, điều này không quan tâm đến hướng khác - mở bộ đệm mã từ cửa sổ biên dịch. Ví dụ: nếu bạn mở bộ đệm bằng cách nhấn một liên kết trong bộ đệm biên dịch, Emacs sẽ mở bộ đệm trong cùng khung với cửa sổ biên dịch. Thay đổi đó là một vấn đề khác. Tôi không biết hành vi so sánh với special-display-buffer-namesgiải pháp như thế nào .


2

Làm cho trình biên dịch bộ đệm luôn có một cửa sổ chuyên dụng. Một cách để làm điều này là tùy chỉnh tùy chọn special-display-buffer-names, bao gồm "*compilation*". Một cách khác là tùy chỉnh tùy chọn special-display-regexps, để bao gồm một biểu thức chính quy phù hợp với tên bộ đệm đó. (Tôi bao gồm regrec "[ ]?[*][^*]+[*]", phù hợp với tất cả các bộ đệm có tên *...*.)

(Xem thêm tùy chọn special-display-frame-alist, bạn có thể sử dụng để chỉ định hành vi và đặc điểm của khung được sử dụng cho các bộ đệm hiển thị đặc biệt như vậy.)

Emacs sẽ cho bạn biết rằng các tùy chọn "bộ đệm hiển thị đặc biệt" này đã "lỗi thời", nhưng cảm ơn chúa vì chúng vẫn được hỗ trợ. Họ cung cấp một cách đơn giản để làm những gì bạn muốn.

Nếu bạn muốn chịu đựng những gì Emacs thích bạn làm bây giờ, thì hãy tùy chỉnh tùy chọn display-buffer-alistthay thế. Ý tưởng về cơ bản là giống nhau (nó chỉ là một tùy chọn người dùng xấu hơn và phức tạp hơn).


Quan tâm để giải thích các downvote? Có điều gì đó không chính xác trong câu trả lời này?
vẽ

1
Nó có thể dành cho các tùy chọn lỗi thời và tiếng sủa ("đau khổ").
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.