8

特定のペインにセカンダリ サイズ パラメーターを指定して、ペインにフォーカスしたときに新しいサイズを割り当て、終了時にそれを返すようにしたいと考えています。だから例えば

(注[]は、フォーカスされた端末カーソルを表します)

________________
|$ ls  |       |
|a's   |       |
|dir   |       |
|$     |$ []   |
|______|_______|

ペインのフォーカスを入れ替える

_______________
|        |    |
|$ ls    |    |
|a's dir |    |
|$ []    |$   |
|________|____|

等々。最近の tmux バージョンでペインのサイズを変更すると、コンテンツを切り取るのではなく、コンテンツをリフローするのに優れているため、特にクールです。

この例では、左側のペインは、フォーカスされると自動的に 8 列に切り替わるように幅が設定されており、フォーカスが失われると縮小されます。コンテンツがまだ表示されていることに注意してください (これが tmux が好きな理由です) が、現在フォーカスされているペインを自動的に拡張することでケーキを食べることもできるので、常に作業を行うのに十分な大きさです!

resize-paneおそらく、これを行うためのコマンドの適用を自動化するための精巧なバインドを考え出すことができ、私の希望に合わせて適切な量の精巧なものにすることができます。しかし、これには何らかの組み込み機能があることを望んでいました。

各ペインの整数の補助的な 4 タプルを追跡して変更できるようにすることが実用的です。これらは、そのペインのフォーカス時に実行する操作の量resize-pane -L/D/U/Rと、そのペインのフォーカス解除時の逆方向を指定します。

これには他にももっと合理的な定式化があるかもしれません。

4

2 に答える 2

1

部分的な解決策が見つかりました...ペインの切り替えをvimと同期させたので、スイッチペインを切り替えるたびにtmuxのサイズも変更します。

tmux は現在のペインのサイズを確認せず、それに応じてサイズを変更していないため、これは最適ではありません。とにかく、ctr-h または ctrl-k を 2 回実行してペインのサイズを変更できるため、かなりうまく機能します。

関連する構成は次のとおりです。

# Sync panes with vi
bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-h) || tmux select-pane -L && tmux resize-pane -R 30"
bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-l) || tmux select-pane -R && tmux resize-pane -L 30"
bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-j) || tmux select-pane -D"
# Move panes up and down, wont resize
bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-k) || tmux select-pane -U"
于 2014-11-19T11:34:33.257 に答える
1

申し訳ありませんが、これはこれまでのところ憶測に過ぎませんが、私はそれについていくつか考えました。これをサポートできる tmux に組み込まれている機能があると思いますが、いくつか/多くのスクリプトが必要になります。

私が投稿したこの質問を参照してください。

http://sourceforge.net/p/tmux/mailman/message/31221459/

基本的に、このselect-layoutコマンドを使用して (おそらく!??!)、レイアウトに任意の変更を適用できるようです。ただし、動作するかどうかはテストしていません。

Thomas Adam さんは、layout-custom.c のソースを調べて、何が起こっているのかを調べることを提案しました。それは私が得た限りです。しかし、プログラムでレイアウトを変更し、 に渡す作業文字列を生成することが実際に可能である場合select-layout、これは非常に優れたアプローチになります。

更新:今、私はこれを直接尋ねました (適切な文字列を生成するだけで実際に任意のレイアウトへのサイズ変更を実現できるかどうか)、Adam 氏自身からまだ応答を受け取っていませんが、可能であればこれが機能すると思われる理由チェックサムに合格する文字列を生成するということは、どの方法でもペインのサイズを変更でき、文字列を記録したら(list-windowsコマンドによって生成された)ペインを変更し、その後、文字列で記録されたレイアウトに復元できることです。これは、レイアウトなどを「保存」するために取らなければならない何らかの明示的なアクションがないことを意味します。チェックサムは、ガベージ/病理学的文字列が文字列に大混乱をもたらすのを防ぐのに役立つある種の巧妙な方法のようですペイン レイアウトの再配置を行うインタープリター。

これが機能するためには、構築するのが自明ではない文字列を渡す必要があります。ただし、チェックサムを計算するためのコードと残りの部分は、 で簡単に確認できますlayout-custom.c。いつの日か、適切な変換を実装するシェル スクリプト (または、コードを取り出すことができれば C プログラム) を持って戻ってくるでしょう。楽しいはずです。

はい、これをクランクアップして素敵な賞金を手に入れるのは素晴らしいことですが、残念ながら今夜は Real Work TMが待っています。

于 2014-11-19T16:38:40.727 に答える