2012-09-10 3 views
7

ワイドスクリーンモニターで作業している場合は、主に2つのペインを使用して、C-a Caで切り替えるのが好きです。キーをバインドして最後のペインに切り替えるにはどうしたらいいですか、ペインがない場合は、最後のウィンドウですか?

私がスクエアモニターで作業している場合は、2つのウィンドウを使用します。 を変更することなく、C-a C-aでそれらの間を切り替えることができるようにしたいと思います。

答えて

10

アクティブなウィンドウが一つだけのウィンドウを、持っているときには、常にアクティブなウィンドウに複数のウィンドウを持っているペイン間

  • スイッチ、およびウィンドウ間
  • スイッチへのCaたい場合

アクティブウィンドウのペインの数をカウントするif-shellを使用して、last-panelast-windowの間で決めることができます。

bind-key C-a if-shell 'test $(tmux list-panes | wc -l) -gt 1' 'last-pane' 'last-window' 

「ワイド」と「スクエア」の設定を切り替えるときに、ペインを並べ替えるのは依然としてあなた次第です。 break-paneおよびjoin-paneを介して)。 tmuxの 1.8 if-shellrun-shell


ビットだけでシェルコマンドを実行できますので、フォーマットの拡張を行います。

bind-key C-a if-shell 'test #{window_panes} -gt 1' 'last-pane' 'last-window' 
+0

現在のウィンドウに複数のペインがあるかどうかをテストするのが面倒な方法がないのだろうかと思います。実際には '#{pane_count} 'のようなtmux変数の1つでなければなりません。シェルをforkするのではなく'#{?,,} '構造を使用し、パイプ内でIPCを行うもう1つのtmuxそして 'wc -l'に渡します。残念ながら、すべてのtmux変数の完全なリストを見つけることはできません。私は、文書化されていない少なくとも1つの '#{pane_current_command}'を知っています。これは便利です。 ** UPDATE **私はそれを見つけました、それは '#{window_panes} 'です。これは"ウィンドウのペイン数 "です。完璧な –

+0

は、これらの条件付きのものは、実行するシェルコマンドを決定するためではなく、ステータス文字列構築のためにのみ機能するかもしれません。しかし、間違いなく 'wc -l'にパイプを避けることができます。 –

+0

@StevenLu:* tmux * 1.8は 'if-shell'(と' run-shell')でフォーマット拡張をサポートしていますので、1.8でこれを行うことができます: 'bind Ca if-shell 'test#{window_panes} -gt 1'最後のウィンドウの最後のウィンドウ。 –

1

私は

if-shell '[ "$COLUMNS" -gt 80 ]' 'bind-key C-a "select-window -t :.+"' 'bind-key C-a "next-window"' 

(あなたの2つの端子幅を区別するために80の調整)以下を提案したいのですが、私はどちらかの構文をめちゃくちゃだ、またはCOLUMNSは、関連tmuxに設定されていません上記のシェル式は常に私のために偽を評価するので、環境。

+2

'IF-shell'と'実行shell'は、両方実行されますサーバー(特定のセッションやクライアントではない)のコンテキスト(fork)から、COLUMNS(std {in、out、err}のttyさえも)はありません。最後にアクティブなクライアントの幅を次のようにして知ることができます: 'tmux list-clients -F '#{client_activity}#{client_width}' |ソート-rn | | cut -d "-f" –

+0

IIRC、 '$ COLUMNS'は環境変数ではなくbash変数です。そのため、テストを実行している間、囲むシェルがbashであることを確認する必要があります。そして、たとえそうであったとしても、キーバインディングを押しながら、ユーザーが見ているのと同じpty(またはpty)に必ずしも付いているとは限りません。 – jpaugh

関連する問題