add tmux zen mode
This commit is contained in:
Executable
+71
@@ -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
|
||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user