48 lines
1.6 KiB
Bash
48 lines
1.6 KiB
Bash
|
|
#!/bin/sh
|
||
|
|
# Build the socktop display session: one window, N tiled panes, one per host.
|
||
|
|
# Pane index order is the swipe order.
|
||
|
|
set -eu
|
||
|
|
|
||
|
|
# shellcheck source=config.env
|
||
|
|
for c in /usr/local/etc/socktop-swipe.env "$(dirname "$0")/config.env"; do
|
||
|
|
[ -r "$c" ] && . "$c" && break
|
||
|
|
done
|
||
|
|
|
||
|
|
: "${SOCKTOP_HOSTS:?no SOCKTOP_HOSTS -- is the config installed?}"
|
||
|
|
: "${SOCKTOP_SESSION:=socktop4}"
|
||
|
|
: "${SOCKTOP_BIN:=socktop}"
|
||
|
|
|
||
|
|
WIN="$SOCKTOP_SESSION:rack"
|
||
|
|
|
||
|
|
tmux kill-session -t "$SOCKTOP_SESSION" 2>/dev/null || true
|
||
|
|
|
||
|
|
first=1
|
||
|
|
for h in $SOCKTOP_HOSTS; do
|
||
|
|
if [ "$first" = 1 ]; then
|
||
|
|
tmux new-session -d -s "$SOCKTOP_SESSION" -n rack "$SOCKTOP_BIN -P $h"
|
||
|
|
first=0
|
||
|
|
else
|
||
|
|
# Split the most recently created pane so creation order == index order.
|
||
|
|
tmux split-window -t "$WIN" "$SOCKTOP_BIN -P $h"
|
||
|
|
fi
|
||
|
|
# Label the pane with the host it is showing.
|
||
|
|
tmux select-pane -t "$WIN.$(tmux display-message -t "$WIN" -p '#{pane_index}')" -T "$h"
|
||
|
|
done
|
||
|
|
|
||
|
|
tmux select-layout -t "$WIN" tiled
|
||
|
|
tmux select-pane -t "$WIN.0"
|
||
|
|
|
||
|
|
tmux set-option -t "$SOCKTOP_SESSION" pane-border-status top
|
||
|
|
tmux set-option -t "$SOCKTOP_SESSION" pane-border-format ' #{pane_title} '
|
||
|
|
tmux set-option -t "$SOCKTOP_SESSION" status off
|
||
|
|
|
||
|
|
# Keep dead panes so pane indices stay stable if a socktop exits.
|
||
|
|
tmux set-option -t "$SOCKTOP_SESSION" remain-on-exit on
|
||
|
|
|
||
|
|
# Mouse mode MUST stay off. With it on, every touch swipe is ALSO delivered to
|
||
|
|
# tmux as a click-drag: dragging across a pane border resizes it and taps
|
||
|
|
# reselect panes, which fights the gesture daemon. See README, "Why no tapping".
|
||
|
|
tmux set-option -t "$SOCKTOP_SESSION" mouse off
|
||
|
|
|
||
|
|
exec tmux attach -t "$SOCKTOP_SESSION"
|