2011-01-17 7 views
10

Môi trường làm việc Lisp của tôi có khung được chia thành hai cửa sổ, cái cũ cho mã hóa chính, thứ hai để đánh giá chất nhờn của tôi.Làm thế nào tôi có thể ngăn Emacs thay đổi kích thước cửa sổ của tôi?

Thật không may, khi tôi thực hiện một số lỗi (nguyên nhân tôi vẫn đang học Lisp: P) trình gỡ lỗi chất nhờn cảnh báo tôi, và làm điều này nó xuất hiện ở cửa sổ phía dưới được tự động thay đổi kích cỡ. Chỉ cần được rõ ràng hơn:

TRƯỚC:

_______ 
|  | 
|  | 
_______ 
|_____| 

SAU:

_______ 
|  | <- decreased in size! 
_______ 
|_____| <- increased in size! 

Làm thế nào tôi có thể ngăn chặn Emacs thay đổi kích thước cửa sổ của tôi? Tôi muốn Emacs để lại kích thước cửa sổ của tôi giống nhau.

Tôi làm cách nào để thực hiện điều đó?

Cảm ơn! Tạm biệt!

Alfredo

+5

Lưu ý: người dùng Emacs chết cứng sẽ vẽ bằng cách sử dụng 'M-x artist'. : P –

+1

Wow ... nghệ sĩ chế độ ... Tôi không có ý tưởng như một đồ chơi nhỏ gọn gàng được xây dựng trong Emacs ... Cảm ơn Trey! –

Trả lời

8

Bạn có thể nhớ cấu hình cửa sổ của bạn bằng cách sử dụng lệnh M-x cửa sổ cấu hình-to-đăng ký (hoặc C-x r w) lúc đầu.

Sau khi bạn luôn có thể khôi phục cấu hình của mình bằng cách sử dụng tính năng nhảy M-x (hoặc C-x r j).

+0

Nhờ tất cả mọi người, điều này là gần nhất với điều tôi đang tìm kiếm. Tôi không thể sử dụng chế độ dành cho người chiến thắng vì bị kết tội với ECB (Trình duyệt mã Emacs), nhưng cấu hình cửa sổ để đăng ký nhận được công việc dơ bẩn :) –

4

Nếu một số mã bạn gọi thay đổi cấu hình cửa sổ bạn có thể quấn mã của bạn với (tiết kiệm-window-chuyến BODY ...)

Nếu nó là debugger rằng những thay đổi cấu hình - nhấn "q" và cấu hình cũ sẽ được resotred.

Nếu bạn muốn trình gỡ lỗi không thay đổi kích thước, hãy thử thêm một trình gỡ rối-móc-móc để khôi phục kích thước cửa sổ của bạn.

5

Thật không may lệnh chính pop-to-buffer, được sử dụng bởi hầu hết mọi chương trình trong các emacs để chuyển sang bộ đệm trong một cửa sổ khác, có tác dụng phụ mà bạn mô tả.

Để phù hợp với tất cả các giải pháp khác cho đến nay, có winner mode để hoàn tác/làm lại bất kỳ thay đổi nào trong cấu hình cửa sổ, tại bất kỳ thời điểm nào.

+1

upvoted cho mẹo chế độ chiến thắng, chế độ chiến thắng thật tuyệt vời. – monotux

2

winner-mode là một phao cứu sinh, nhưng để làm cho pop-to-buffer không thay đổi kích thước cửa sổ ở nơi đầu tiên, làm

(setq even-window-heights nil) 
1

Để vô hiệu hóa cửa sổ bị thu hẹp, shrink-window-if-larger-than-buffer cần phải là một không-op. Bạn chỉ có thể xác định lại nó để không phải làm gì, nhưng nếu bạn tư vấn cho nó, bạn sẽ có khả năng kích hoạt và vô hiệu hóa nó theo ý muốn.

;; never shrink windows 
(defvar allow-window-shrinking nil 
    "If non-nil, effectively disable shrinking windows by making `shrink-window-if-larger-than-buffer' a no-op.") 
(advice-add 'shrink-window-if-larger-than-buffer 
      :before-while 
      (lambda (&rest args) 
       "Do nothing if `allow-window-shrinking' is nil." 
       allow-window-shrinking)) 

Bạn có thể tư vấn cho các chức năng khác mà gọi shrink-window-if-larger-than-buffer để kích hoạt hoặc vô hiệu hóa bị thu hẹp:

(advice-add 'some-function-that-resizes-windows 
      :around 
      (lambda (orig &rest args) 
       "enable shrinkage" 
       (let ((allow-window-shrinking t)) 
       (apply orig args)))) 

Tôi đã có một mảnh cũ của mã mà là về cơ bản ở trên, và tôi đã ignore-errors quấn quanh (apply orig args) đối với một số lý do bị lãng quên, nhưng nó có lẽ không cần thiết.

N.B. điều này sử dụng API tư vấn mới, được thêm vào trong Emacs 24.4. API tư vấn cũ có thể làm điều tương tự với cú pháp khác nếu bạn cần sử dụng phiên bản Emac cũ.