diff --git a/dot_config/ghostty/config b/dot_config/ghostty/config index 525e582..c09499c 100644 --- a/dot_config/ghostty/config +++ b/dot_config/ghostty/config @@ -37,14 +37,23 @@ keybind = ctrl+plus=increase_font_size:1 keybind = ctrl+minus=decrease_font_size:1 keybind = ctrl+zero=reset_font_size keybind = ctrl+shift+period=reload_config -keybind = shift+enter=text:\n +# shift+enter as CSI-u (ESC[13;2u), the newline-in-prompt key coding agents +# (omp, claude) read. Never \n: that is ctrl+j, tmux's pane-down key. +keybind = shift+enter=text:\x1b[13;2u # command palette: ctrl+space is tmux's root-table C-Space (tmux-palette); # sent explicitly as NUL so no keyboard-protocol mode can turn it into a CSI keybind = ctrl+space=text:\x00 # project tasks palette (pj): tmux prefix t +keybind = ctrl+shift+p=text:\x02t keybind = ctrl+shift+space=text:\x02t +# launchers (kitty's ctrl+shift chords), tmux prefix y/e/g/a +keybind = ctrl+shift+f=text:\x02y +keybind = ctrl+shift+e=text:\x02e +keybind = ctrl+shift+g=text:\x02g +keybind = ctrl+shift+a=text:\x02a + # tabs → tmux windows keybind = ctrl+shift+t=text:\x02c keybind = ctrl+shift+w=text:\x02k @@ -60,7 +69,6 @@ keybind = ctrl+shift+h=text:\x02p # splits → tmux panes keybind = ctrl+shift+l=text:\x02v -keybind = ctrl+shift+e=text:\x02h keybind = ctrl+shift+j=text:\x02h keybind = ctrl+shift+x=text:\x02x @@ -69,10 +77,8 @@ keybind = ctrl+shift+o=text:\x02o keybind = ctrl+shift+enter=text:\x02z keybind = ctrl+shift+z=text:\x02z -# scrollback, prompt, help -keybind = ctrl+shift+f=text:\x02/ +# scrollback, help (search scrollback: tmux prefix /) keybind = ctrl+shift+page_up=text:\x02[ -keybind = ctrl+shift+p=text:\x02: keybind = ctrl+shift+slash=text:\x02? keybind = ctrl+shift+alt+,=text:\x02q diff --git a/dot_config/tmux-palette/commands.json b/dot_config/tmux-palette/commands.json index 6b1acd9..9a43a94 100644 --- a/dot_config/tmux-palette/commands.json +++ b/dot_config/tmux-palette/commands.json @@ -2,6 +2,7 @@ { "icon": "", "title": "Lazygit", + "shortcut": "Ctrl+Shift+G", "description": "popup in the pane's directory", "category": "Tools", "aliases": ["lg"], @@ -10,6 +11,7 @@ { "icon": "", "title": "Yazi", + "shortcut": "Ctrl+Shift+F", "description": "new window in the pane's directory", "category": "Tools", "aliases": ["fm"], @@ -58,6 +60,7 @@ { "icon": "", "title": "omp", + "shortcut": "Ctrl+Shift+A", "description": "omp agent in a full-height split on the right, 33%", "category": "Tools", "aliases": ["agent", "ai"], @@ -76,7 +79,7 @@ "title": "Project Tasks", "description": "pj: install, dev, make, uv, scripts", "category": "Tools", - "shortcut": "Ctrl+Shift+Space", + "shortcut": "Ctrl+Shift+P", "aliases": ["pj", "run"], "action": { "palette": "tasks" } }, diff --git a/dot_config/tmux/tmux.conf b/dot_config/tmux/tmux.conf index cc8a42b..4a7224b 100644 --- a/dot_config/tmux/tmux.conf +++ b/dot_config/tmux/tmux.conf @@ -110,6 +110,11 @@ set -g detach-on-destroy no-detached set -g extended-keys on set -g extended-keys-format csi-u set -ag terminal-features "xterm-kitty:extkeys" +# shift+enter (Ghostty sends ESC[13;2u): pass it through as ESC[13;2u for +# coding agents (omp, claude) to insert a newline. With extended-keys `on`, +# tmux would flatten it to a plain Enter for any app that never asked for +# extended keys. +bind -N "Shift+Enter as CSI-u" -n S-Enter send-keys -H 1b 5b 31 33 3b 32 75 set -as terminal-features ",*:clipboard" set -sg escape-time 10 @@ -192,9 +197,16 @@ set -g @plugin 'eduwass/tmux-palette' # shortcut labels) lives in ~/.config/tmux-palette/. set -g @palette-key 'C-Space' # pj's task runner as a palette (pj-palette): quick actions + project tasks, -# each run in a new window. prefix + t (Ghostty ctrl+shift+space). +# each run in a bottom split. prefix + t (Ghostty ctrl+shift+p / +space). bind -N "Project tasks (pj)" t run-shell "~/.config/tmux/plugins/tmux-palette/bin/tmux-palette.sh tasks" +# Direct launchers, the kitty ctrl+shift chords (Ghostty sends prefix + key). +# Programs are exec'd so the tab icon is the program's. +bind -N "Yazi in a new window" y new-window -c "#{pane_current_path}" "exec yazi" +bind -N "Neovim in a new window" e new-window -c "#{pane_current_path}" "exec nvim" +bind -N "Lazygit popup" g display-popup -E -w 90% -h 90% -d "#{pane_current_path}" lazygit +bind -N "omp in a right split (33%)" a split-window -h -f -l 33% -c "#{pane_current_path}" "exec omp" + # sessionx: fuzzy session switcher/creator on prefix + o (Ghostty # ctrl+shift+o). A query with no match goes to zoxide; uses fzf --tmux. set -g @sessionx-bind 'o'