質問

I have several tmux panes running in a window that have been started with syntax like:

tmux split-window -h -l {dynamic value} tail -f somefile.txt
tmux split-window -v -l {dynamic value} tail -f someotherfile.txt
tmux split-window -h -l {dynamic value} nc -l -p {random port}

As I use this script to create new panes and I need to update an array in my script with the sizes of each "window" (pane).

If the tmux panes contained interactive shells, I could just run tput cols and tput rows in them to get the size. I checked the tmux man page, but didn't see the commands I'm looking for.

役に立ちましたか?

解決

If you know a pane’s id (e.g. %24) or its name (e.g. session_name:win_idx.pane_idx; see target-pane in the man page), then you can use display-message -p to query the dimensions:

tmux display-message -pt "$pane" -F '#{pane_width}x#{pane_height}'

If you do not already have a way to name to panes, then you can collect the pane ids as you split them off by using the -P option along with the -F option:

pane_a=$(tmux split-window -PF '#{pane_id}' -hl "$dynamic_value" 'tail -f somefile.txt')
⋮ # create other panes
pane_a_width=$(tmux display-message -pt "$pane_a" -F '#{pane_width}')

If you want to know about all the panes in a window, then you can use list-panes with the window’s id (e.g. @5) or name (e.g. session_name.win_idx; see target-window in the man page):

tmux list-panes -t "$window" -F '#{pane_id} #{pane_width}x#{pane_height} #{session_name}:#{window_index}.#{pane_index}'

Some of these options and format specifiers are not available on old versions of tmux, but there are usually workarounds (depending on just how old your version is).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top