2011-11-02 14 views
12

emacsでM-x shellを実行して端末を取得すると、自動的に行を折り返す場所がわかります。たとえば、lsの出力は、ウィンドウに適切に適合する列にフォーマットされます。ウィンドウを分割した後にEmacsシェルモードの表示が広すぎる

私の問題は、ウィンドウを垂直方向にC-x 3で分割しても、ウィンドウ全体がフレーム全体を満たしていると思うということです。結果は、コマンド出力の醜いラッピングです。シェルモードで画面の幅を更新する必要があることを知らせる方法はありますか?

EDIT:

は以下のHNの答えを使用して、私はこの修正プログラムを思い付いた:

(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)) 

答えて

14

私はパーティーに少し遅れますが、コラムはこれを行う方法ではありません。ここに私の.emacsからの抜粋です:

(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) 

COLUMNSを毎回エクスポートとは異なり、この方法は、現時点では bashであることする必要はありません、それは空白のプロンプトを使用してセッションをスパムしません。この コードはおそらくcomint自体にあるはずです。多分私はバグレポートを提出します。

編集:window-configuration-change-hookをバッファローカル方法で変更すると、 フックはウィンドウごとに1回、フレームごとに1回実行されます。

+0

これは本当に便利な修正です。バグレポートとして提出してください! –

+1

便利な機能をお寄せいただきありがとうございますが、プロセスがnilの場合に問題が発生するため、プロセスウィンドウのサイズを設定する前にnilチェックを追加しました - [私の答えを見る](http://stackoverflow.com/a/20015336/554279) –

2

この表示は、COLUMNS環境変数によって決定されます。私のセットアップCOLUMNSで、私はこれをコーディングする方法があるに違いありません

export COLUMNS=80 

を経由して80に列を設定した場合、シェルモードでは正常に縦割りのlsが表示されたら、202の値を、持っていますが、私は持っていません。そうするには十分なelisp-fu。あなたがむしろこの混乱を避けるなら、多項式はこれを自動的に管理します。 ; Xeshell -

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

0

Mをお試しくださいこの問題はありません。

5

ここは、@Christopher Monsantoの答えから少し改善されたサイズ変更機能です。元のものは、無処理のために問題を引き起こすでしょう。 (シェルモードではexit

(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

(プロセスが(イコールnilプロセス) –

関連する問題