2011-11-02 40 views
12

Nếu tôi chạy M-x shell trong các thiết bị đầu cuối để nhận thiết bị đầu cuối, nó biết vị trí tự động ngắt dòng. Ví dụ, đầu ra của ls được định dạng thành các cột phù hợp với cửa sổ chính xác.Hiển thị chế độ hiển thị vỏ Emacs quá rộng sau khi tách cửa sổ

Vấn đề của tôi là nếu sau đó tôi chia cửa sổ theo chiều dọc với C-x 3, chế độ vỏ vẫn cho rằng cửa sổ sẽ lấp đầy toàn bộ khung. Kết quả là gói kết xuất lệnh xấu xí. Có cách nào để cho chế độ shell biết nó có phải cập nhật chiều rộng màn hình không?

EDIT:

Sử dụng câu trả lời HN của dưới đây, tôi đã đưa ra sửa chữa này:

(defun my-resize-window() 
    "Reset the COLUMNS environment variable to the current width of the window." 
    (interactive) 
    (let ((proc (get-buffer-process (current-buffer))) 
     (str (format "export COLUMNS=%s" (window-width)))) 
    (funcall comint-input-sender proc str))) 

(defun my-shell-mode-hook() 
    (local-set-key "\C-cw" 'my-resize-window)) 

Trả lời

14

Tôi hơi muộn với bữa tiệc, nhưng COLUMNS không phải là cách để làm điều này. Dưới đây là một đoạn trích từ emacs của tôi:

(defun comint-fix-window-size() 
    "Change process window size." 
    (when (derived-mode-p 'comint-mode) 
    (set-process-window-size (get-buffer-process (current-buffer)) 
         (window-height) 
         (window-width)))) 

(defun my-shell-mode-hook() 
    ;; add this hook as buffer local, so it runs once per window. 
    (add-hook 'window-configuration-change-hook 'comint-fix-window-size nil t)) 

(add-hook 'shell-mode-hook 'my-shell-mode-hook) 

Không giống như xuất khẩu COLUMNS mỗi thời gian, phương pháp này không yêu cầu bạn phải ở bash vào lúc này và nó không thư rác phiên của bạn với nhắc nhở trống. Mã số này có lẽ nên nằm trong chính sách tự động, có thể tôi sẽ gửi báo cáo lỗi.

CHỈNH SỬA: Nếu bạn sửa đổi window-configuration-change-hook theo cách đệm cục bộ móc chạy một lần trên mỗi cửa sổ, như trái ngược một lần trên mỗi khung.

+0

Đây là một sửa chữa thực sự hữu ích. Vui lòng gửi dưới dạng báo cáo lỗi! –

+1

Cảm ơn các chức năng hữu ích, tuy nhiên nó sẽ gây ra vấn đề khi quá trình là nil, vì vậy tôi đã thêm một kiểm tra nil trước khi thiết lập kích thước cửa sổ quy trình - [xem câu trả lời của tôi] (http://stackoverflow.com/a/20015336/554279) –

2

hiển thị này được quyết định bởi biến COLUMNS môi trường. Trong COLUMNS thiết lập của tôi có giá trị 202, sau một dọc ls hiển thị phân chia một cách chính xác trên vỏ-mode nếu tôi đặt cột đến 80 qua

export COLUMNS=80 

Phải có một cách để mã hóa này lên nhưng tôi không có đủ elisp-fu để làm điều đó. Nếu bạn muốn tránh những rắc rối đa thuật ngữ quản lý này automagically.

http://www.emacswiki.org/emacs/MultiTerm

0

Hãy thử M - xeshell; nó không có vấn đề này.

5

Đây là một chức năng thay đổi kích thước được cải thiện một chút từ câu trả lời của @Christopher Monsanto. Bản gốc sẽ gây ra một vấn đề do quá trình nil. (ví dụ: exit ở chế độ vỏ)

(defun comint-fix-window-size() 
    "Change process window size." 
    (when (derived-mode-p 'comint-mode) 
    (let ((process (get-buffer-process (current-buffer)))) 
     (unless (eq nil process) 
     (set-process-window-size process (window-height) (window-width)))))) 
+2

(khi quá trình là thành ngữ hơn (trừ khi (quá trình eq nil) –

Các vấn đề liên quan