add tmux zen mode

This commit is contained in:
Matt Anderson
2026-08-14 10:32:31 -05:00
parent 8e4f80df2d
commit 642973f70b
2 changed files with 73 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
#!/bin/bash
# Tmux Zen Mode - Center your terminal
# Usage: tmux-zen.sh [width]
CENTER_WIDTH="${1:-120}"
CURRENT_PANE=$(tmux display-message -p '#{pane_id}')
PANE_COUNT=$(tmux display-message -p '#{window_panes}')
WINDOW_WIDTH=$(tmux display-message -p '#{window_width}')
# Check if we're already in zen mode
is_zen_mode() {
[ "$PANE_COUNT" -eq 3 ]
}
create_zen() {
if is_zen_mode; then
return
fi
if [ "$PANE_COUNT" -ne 1 ]; then
tmux display-message "Zen mode: single pane only"
return
fi
TOTAL_MARGIN=$((WINDOW_WIDTH - CENTER_WIDTH - 2))
if [ "$TOTAL_MARGIN" -lt 10 ]; then
tmux display-message "Zen mode: window too narrow"
return
fi
SIDE_WIDTH=$((TOTAL_MARGIN / 2))
tmux split-window -hdt "$CURRENT_PANE" "cat"
tmux split-window -hbdt "$CURRENT_PANE" "cat"
tmux select-layout even-horizontal
tmux resize-pane -t "$CURRENT_PANE" -x "$CENTER_WIDTH"
for pane in $(tmux list-panes -F '#{pane_id}'); do
if [ "$pane" != "$CURRENT_PANE" ]; then
pane_command=$(tmux display-message -p -t "$pane" '#{pane_current_command}')
if [ "$pane_command" = "cat" ]; then
tmux resize-pane -t "$pane" -x "$SIDE_WIDTH"
fi
fi
done
}
destroy_zen() {
if ! is_zen_mode; then
return
fi
for pane in $(tmux list-panes -F '#{pane_id}'); do
pane_command=$(tmux display-message -p -t "$pane" '#{pane_current_command}')
if [ "$pane_command" = "cat" ]; then
tmux kill-pane -t "$pane"
fi
done
}
toggle_zen() {
if is_zen_mode; then
destroy_zen
else
create_zen
fi
}
toggle_zen
+2
View File
@@ -77,3 +77,5 @@ bind -T off-prefix O \
bind -T off-prefix Any \ bind -T off-prefix Any \
send-keys C-Space \;\ send-keys C-Space \;\
send-keys send-keys
bind z run-shell "~/.config/tmux/scripts/tmux-zen.sh 120"