When `mode-keys` is set to vi (the default on most modern tmux), entering
copy-mode lands you in the `copy-mode-vi` key table, not `copy-mode`. Our
scroll bindings (i/k for 2-line, I/K for half-page) were only in the
`copy-mode` table, so they silently did nothing. Duplicate them into
`copy-mode-vi` so they fire in both modes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Default was \`install\`, so retyping \`smux\` at the prompt would run the
full installer again (redownload tmux.conf, rewire symlinks, etc.). Now
\`smux\` alone prints the help; reinstall still works via explicit
\`smux install\`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tmux's config parser doesn't accept shell parameter expansion like
\${SMUX_BIN_DIR:-\$HOME/.smux/bin}, so sourcing the conf raised
"invalid environment variable". Replace with an if-shell guard at the
top of the file that sets SMUX_BIN_DIR to the default \$HOME/.smux/bin
only when it isn't already set, and have the bindings use a plain
\$SMUX_BIN_DIR reference the shell can expand.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Option+F / Option+O / Option+Escape bindings previously hardcoded
\$HOME/.smux/bin as the scripts dir. Replace with
\${SMUX_BIN_DIR:-\$HOME/.smux/bin} so apps that bundle smux (like
ophanim) can point the bindings at their vendored copy by setting
SMUX_BIN_DIR in tmux's global env before source-file'ing this config.
Default path is unchanged so existing installs are unaffected.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Teach toggle-fullscreen a second mode, 'exit', that only performs the
un-fullscreen branch and never breaks a pane out. Bind Option+Escape
(M-Escape) to that mode so the key is a pure "leave fullscreen if
you're in one" — no-op on a pane that isn't currently fullscreened, no
risk of surprising the user into fullscreen. Both keys also now call
smart-layout on the pane's newly-joined window after join-pane, so
returning a pane to a two-pane layout reshapes into whichever tiling
best fits the window shape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Option+O used to cycle tmux's built-in layouts. It now runs a smart-layout
script that scores even-horizontal, even-vertical, and tiled by how close
each one puts the per-pane aspect to a 2:1 cell target (roughly square in
pixels) and applies the winner. A wide window with four panes becomes a
single horizontal row instead of a squished 2x2; a tall narrow window
becomes a vertical stack. The old layout-cycling behavior is preserved on
Option+P for anyone who wants to hand-pick.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Break-pane puts the focused pane into a new window by itself; pressing
Option+F again rejoins it to the layout it came from. Origin window id
is stashed on the pane as the @orig-window user option, so it persists
through break-pane/join-pane without any session-level bookkeeping. If
the origin window no longer exists, the stash is cleared and the pane
stays put. Solo-pane windows are a no-op so no dangling state ever
gets written.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Use window_start_flag/window_end_flag instead of hardcoded index
checks, so Option+h/u stop at the edges regardless of window numbering.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- claude-settings.json: hooks, MCP servers, permissions (symlinked to ~/.claude/settings.json)
- claude-pane-alert.sh: turns tmux pane red on permission prompt, resets on approval
- tmux.conf: add layout cycling, pane swapping, window navigation, and status bar
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>