Làm thế nào tôi có thể chặn một khung hình bị chia tách?


16

Hiện tại tôi làm việc với ruby ​​và rspec. Tôi thực sự thích ý tưởng có một khung riêng trong một màn hình khác hiển thị cho tôi bộ đệm biên dịch. Thiết lập hiện tại của tôi sử dụng khung 'mã' (trong đó tôi thực hiện công việc thực tế) và khung 'kết quả thử nghiệm' (trong đó tôi thấy kết quả rspec)

Vấn đề là khi tôi cố gắng mở một số lỗi biên dịch hoặc tệp trong khung 'kết quả thử nghiệm', cửa sổ sẽ tách ra trong khung đó . Những gì tôi thực sự muốn làm là cho nó mở trong khung 'mã' của tôi.

Tôi đã sử dụng tùy chọn display-buffer-reuse-frames. Tôi cũng đã cố gắng thiết lập cửa sổ kết quả biên dịch dedicated, nhưng bất cứ khi nào emacs cố gắng mở một cửa sổ mới, một khung mới sẽ được tạo ra (điều này đặc biệt khủng khiếp nếu bạn sử dụng Helm.)

Có một số cách dễ dàng để đạt được điều này?


1
Sử dụng emacs như một IDE sẽ thuận tiện hơn rất nhiều nếu có một cách dễ dàng "ghim" một bộ đệm tại chỗ để nó luôn xuất hiện ở cùng một vị trí kể từ bây giờ. Một trong những tính năng của Visual Studio mà tôi nhớ nhất khi sử dụng emacs là cách đơn giản và trực quan để phân tách, ghim, gắn, ẩn và thao tác các cửa sổ.
nispio

1
Vâng. Tôi cũng đến từ một nền tảng vs và tôi cũng nhớ điều này, mặc dù tôi cảm thấy giao diện sạch sẽ-no-button-no-bullshit hầu hết thời gian.
Renan Ranelli

@nispio Tôi không sử dụng VS vì vậy bạn có thể chỉ định ý của bạn bằng "pin". Khung Emacs thường độc quyền và không thay đổi trừ khi bạn tương tác với chúng.
Vamsi

@vamsi: VS sử dụng rất nhiều cửa sổ nhỏ mà bạn có thể gắn vào đầu / cuối / cạnh của khung hoặc bạn có thể bật chúng ra và tạo khung mới. Bạn có thể gắn một cửa sổ vào các cạnh của khung và thiết lập nó để tự động ẩn. Ví dụ, cửa sổ đầu ra biên dịch sẽ bật lên một cách kỳ diệu từ phía dưới khi quá trình biên dịch bắt đầu và ẩn đi một lần nữa sau khi quá trình biên dịch kết thúc. Nếu bạn không muốn cửa sổ tự động ẩn, bạn có thể ghim nó vào vị trí, sau đó bỏ ghim lại khi bạn hoàn thành việc tham chiếu nó.
nispio

@nispio Tôi thấy. Tôi sử dụng popwin.eltừ MELPA để biên dịch popup và giúp các bộ đệm tồn tại cho đến khi C-gđược nhấn. Nếu tôi cần chúng toàn thời gian, tôi chỉ cần chuyển sang chúng trong một cửa sổ khác. Tôi đã không nghĩ về việc ghim các cửa sổ bởi vì emacs không split-windows-sensibly.
Vamsi

Câu trả lời:


9

Bạn cần định cấu hình con khỉ đột nặng 600 pound display-buffer-alistđể xác định cách display-bufferchọn vị trí hiển thị bộ đệm. Nó làm cho display-buffer-reuse-frameslỗi thời trong emacsen mới hơn. Đây là một cấu hình sẽ hướng dẫn bạn (ít nhất là trong 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)))))

Như bạn có thể thấy tôi sử dụng một biểu thức chính quy để khớp với bộ đệm biên dịch. Các tài liệu display-buffernên cung cấp cho bạn một ý tưởng về những gì đang xảy ra. Chỉ cần ngẩng cao đầu rằng nó không phải là tài liệu thú vị nhất mà bạn từng đọc. Tôi đã thêm chúng một cách tuần tự để regrec-log biên dịch sẽ được khớp trước biểu thức regrec chung. Điều chỉnh regrec theo nhu cầu của bạn.

EDIT Để làm cho bất kỳ khung hình nào không thể áp dụng, bạn có thể đánh giá M-: (set-frame-parameter nil 'unsplittable t)trong khung cụ thể đó. Thay thế nil bằng yêu cầu FRAMEnếu làm điều đó từ elisp. Giữa hai cài đặt này, nó sẽ làm cho khung biên dịch trở nên độc quyền trừ khi bạn đặc biệt tìm thấy một tệp trong khung đó.


Có điều là tôi không muốn mở khung hình mới mọi lúc. Điều tôi muốn là giới hạn tất cả các cửa sổ vào khung 'mã', ngoại trừ bộ đệm 'biên dịch-nhật ký', sẽ luôn được hiển thị trong khung 'kiểm tra'. Tôi không thể tìm cách chuyển hướng tất cả các cửa sổ mới sang khung 'mã' chính của mình. Có lẽ tôi đã không đủ rõ ràng trong câu hỏi = (
Renan Ranelli

Điều này chỉ nên mở một khung mới cho nhật ký biên dịch mà chỉ khi không có khung hiện có. Bạn có thể cho tôi biết những gì đang xảy ra sai. Xem chỉnh sửa về cách làm cho bất kỳ khung hình không thể áp dụng.
Vamsi
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.