summaryrefslogtreecommitdiff
path: root/keybindings.html
diff options
context:
space:
mode:
authort <t@tjp.lol>2026-07-06 15:00:37 -0600
committert <t@tjp.lol>2026-07-06 15:00:48 -0600
commitb350e4dee2412e450b3844061f5c1bc2ec995923 (patch)
treec518b3c14af460f31c624f9ba84902713cb8a117 /keybindings.html
parentc21a4ebd001ca305d862b5390f090f2ef14163cf (diff)
catch up with latest panto cli developmentsHEADmain
Diffstat (limited to 'keybindings.html')
-rw-r--r--keybindings.html4
1 files changed, 2 insertions, 2 deletions
diff --git a/keybindings.html b/keybindings.html
index 09739d8..747db1f 100644
--- a/keybindings.html
+++ b/keybindings.html
@@ -20,9 +20,9 @@
<div class="pd-header__right"><a class="pd-ghlink" href="https://code.tjp.lol/pantograph.git/" target="_blank" rel="noreferrer"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 .5 5 .5 5 .5c-.3 1.15-.3 2.35 0 3.5A5.4 5.4 0 0 0 4 7.5c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"/><path d="M9 18c-4.51 2-5-2-7-2"/></svg> Source</a></div>
</header>
<div class="pd-shell">
-<aside class="pd-sidebar"><div class="pd-sidebar__scroll"><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"/><circle cx="12" cy="12" r="10"/></svg>Getting started</p><ul class="pd-navsec__list"><li><a href="index.html#overview" class="pd-navsec__link">Overview</a></li><li><a href="index.html#install" class="pd-navsec__link">Install</a></li><li><a href="index.html#first-run" class="pd-navsec__link">First run</a></li><li><a href="index.html#authenticate" class="pd-navsec__link">Authenticate</a></li></ul></div><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="m4 17 6-6-6-6"/><path d="M12 19h8"/></svg>Command line</p><ul class="pd-navsec__list"><li><a href="cli.html#starting" class="pd-navsec__link">Starting a session</a></li><li><a href="cli.html#sessions" class="pd-navsec__link"><code>panto sessions</code></a></li><li><a href="cli.html#models" class="pd-navsec__link"><code>panto models</code></a></li><li><a href="cli.html#auth" class="pd-navsec__link"><code>panto auth</code></a></li><li><a href="cli.html#bootstrap" class="pd-navsec__link"><code>panto bootstrap</code></a></li><li><a href="cli.html#lua" class="pd-navsec__link"><code>panto lua</code></a></li><li><a href="cli.html#slash-commands" class="pd-navsec__link">Slash commands</a></li><li><a href="cli.html#environment" class="pd-navsec__link">Environment</a></li></ul></div><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="M3 5h11"/><path d="M19 5h2"/><path d="M3 12h6"/><path d="M14 12h7"/><path d="M3 19h10"/><path d="M18 19h3"/><circle cx="16" cy="5" r="2"/><circle cx="11" cy="12" r="2"/><circle cx="15" cy="19" r="2"/></svg>Configuration</p><ul class="pd-navsec__list"><li><a href="configuration.html#files" class="pd-navsec__link">Files &amp; layers</a></li><li><a href="configuration.html#providers" class="pd-navsec__link"><code>[providers]</code></a></li><li><a href="configuration.html#auth" class="pd-navsec__link"><code>[auth]</code></a></li><li><a href="configuration.html#defaults" class="pd-navsec__link"><code>[defaults]</code></a></li><li><a href="configuration.html#policies" class="pd-navsec__link">Tools &amp; extensions</a></li><li><a href="configuration.html#compaction" class="pd-navsec__link"><code>[compaction]</code></a></li><li><a href="configuration.html#models" class="pd-navsec__link"><code>models.toml</code></a></li><li><a href="configuration.html#system-prompt" class="pd-navsec__link">System prompt</a></li></ul></div><div class="pd-navsec pd-navsec--current"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="M6 8h.001"/><path d="M10 8h.001"/><path d="M14 8h.001"/><path d="M18 8h.001"/><path d="M8 12h.001"/><path d="M12 12h.001"/><path d="M16 12h.001"/><path d="M7 16h10"/></svg>Key bindings</p><ul class="pd-navsec__list"><li><a href="keybindings.html#editing" class="pd-navsec__link pd-navsec__link--active">Editing &amp; cursor</a></li><li><a href="keybindings.html#submit" class="pd-navsec__link">Submit &amp; newline</a></li><li><a href="keybindings.html#control" class="pd-navsec__link">Selectors &amp; control</a></li><li><a href="keybindings.html#terminal" class="pd-navsec__link">Terminal protocol</a></li></ul></div><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z"/><path d="m7 16.5-4.74-2.85"/><path d="m7 16.5 5-3"/><path d="M7 16.5v5.17"/><path d="M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z"/><path d="m17 16.5-5-3"/><path d="m17 16.5 4.74-2.85"/><path d="M17 16.5v5.17"/><path d="M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z"/><path d="M12 8 7.26 5.15"/><path d="m12 8 4.74-2.85"/><path d="M12 13.5V8"/></svg>Lua extensions</p><ul class="pd-navsec__list"><li><a href="lua.html#overview" class="pd-navsec__link">Overview</a></li><li><a href="lua.html#loading" class="pd-navsec__link">Loading extensions</a></li><li><a href="lua.html#tools" class="pd-navsec__link"><code>register_tool</code></a></li><li><a href="lua.html#commands" class="pd-navsec__link"><code>register_command</code></a></li><li><a href="lua.html#events" class="pd-navsec__link">Events: on &amp; emit</a></li><li><a href="lua.html#components" class="pd-navsec__link">Lua components</a></li><li><a href="lua.html#runtime" class="pd-navsec__link">Runtime &amp; luarocks</a></li></ul></div></div></aside>
+<aside class="pd-sidebar"><div class="pd-sidebar__scroll"><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"/><circle cx="12" cy="12" r="10"/></svg>Getting started</p><ul class="pd-navsec__list"><li><a href="index.html#overview" class="pd-navsec__link">Overview</a></li><li><a href="index.html#install" class="pd-navsec__link">Install</a></li><li><a href="index.html#first-run" class="pd-navsec__link">First run</a></li><li><a href="index.html#authenticate" class="pd-navsec__link">Authenticate</a></li></ul></div><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="m4 17 6-6-6-6"/><path d="M12 19h8"/></svg>Command line</p><ul class="pd-navsec__list"><li><a href="cli.html#starting" class="pd-navsec__link">Starting a session</a></li><li><a href="cli.html#sessions" class="pd-navsec__link"><code>panto sessions</code></a></li><li><a href="cli.html#models" class="pd-navsec__link"><code>panto models</code></a></li><li><a href="cli.html#auth" class="pd-navsec__link"><code>panto auth</code></a></li><li><a href="cli.html#bootstrap" class="pd-navsec__link"><code>panto bootstrap</code></a></li><li><a href="cli.html#lua" class="pd-navsec__link"><code>panto lua</code></a></li><li><a href="cli.html#slash-commands" class="pd-navsec__link">Slash commands</a></li><li><a href="cli.html#environment" class="pd-navsec__link">Environment</a></li></ul></div><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="M3 5h11"/><path d="M19 5h2"/><path d="M3 12h6"/><path d="M14 12h7"/><path d="M3 19h10"/><path d="M18 19h3"/><circle cx="16" cy="5" r="2"/><circle cx="11" cy="12" r="2"/><circle cx="15" cy="19" r="2"/></svg>Configuration</p><ul class="pd-navsec__list"><li><a href="configuration.html#files" class="pd-navsec__link">Files &amp; layers</a></li><li><a href="configuration.html#providers" class="pd-navsec__link"><code>[providers]</code></a></li><li><a href="configuration.html#auth" class="pd-navsec__link"><code>[auth]</code></a></li><li><a href="configuration.html#defaults" class="pd-navsec__link"><code>[defaults]</code></a></li><li><a href="configuration.html#policies" class="pd-navsec__link">Extensions policy</a></li><li><a href="configuration.html#compaction" class="pd-navsec__link"><code>[compaction]</code></a></li><li><a href="configuration.html#models" class="pd-navsec__link"><code>models.toml</code></a></li><li><a href="configuration.html#system-prompt" class="pd-navsec__link">System prompt</a></li></ul></div><div class="pd-navsec pd-navsec--current"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="M6 8h.001"/><path d="M10 8h.001"/><path d="M14 8h.001"/><path d="M18 8h.001"/><path d="M8 12h.001"/><path d="M12 12h.001"/><path d="M16 12h.001"/><path d="M7 16h10"/></svg>Key bindings</p><ul class="pd-navsec__list"><li><a href="keybindings.html#editing" class="pd-navsec__link pd-navsec__link--active">Editing &amp; cursor</a></li><li><a href="keybindings.html#submit" class="pd-navsec__link">Submit &amp; newline</a></li><li><a href="keybindings.html#control" class="pd-navsec__link">Selectors &amp; control</a></li><li><a href="keybindings.html#terminal" class="pd-navsec__link">Terminal protocol</a></li></ul></div><div class="pd-navsec"><p class="pd-navsec__title"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="1em" height="1em"><path d="M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z"/><path d="m7 16.5-4.74-2.85"/><path d="m7 16.5 5-3"/><path d="M7 16.5v5.17"/><path d="M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z"/><path d="m17 16.5-5-3"/><path d="m17 16.5 4.74-2.85"/><path d="M17 16.5v5.17"/><path d="M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z"/><path d="M12 8 7.26 5.15"/><path d="m12 8 4.74-2.85"/><path d="M12 13.5V8"/></svg>Lua extensions</p><ul class="pd-navsec__list"><li><a href="lua.html#overview" class="pd-navsec__link">Overview</a></li><li><a href="lua.html#loading" class="pd-navsec__link">Loading extensions</a></li><li><a href="lua.html#tools" class="pd-navsec__link"><code>register_tool</code></a></li><li><a href="lua.html#commands" class="pd-navsec__link"><code>register_command</code></a></li><li><a href="lua.html#events" class="pd-navsec__link">Events: on &amp; emit</a></li><li><a href="lua.html#components" class="pd-navsec__link">Lua components</a></li><li><a href="lua.html#runtime" class="pd-navsec__link">Runtime &amp; luarocks</a></li></ul></div></div></aside>
<div class="pd-scrim"></div>
-<main class="pd-main"><article class="pd-doc" data-screen-label="Key bindings"><p class="panto-eyebrow pd-eyebrow">Reference</p><h1 class="pd-doc__h1">Key bindings</h1><div class="pd-doc__meta"><span class="pg-badge pg-badge--neutral">TUI input</span></div><p class="pd-lead">The session UI reads raw keystrokes and turns them into editing actions. These are the keys it recognises today; panto negotiates richer terminal protocols at startup so the important ones (notably Shift+Enter) work wherever the terminal allows.</p><h2 id="editing" class="pd-h2">Editing &amp; cursor</h2><p class="pd-body">The input box is a multi-line editor. Printable keys insert text (full Unicode), and the usual motion keys move the cursor.</p><div class="pd-table-wrap"><table class="pd-table pd-keytable"><thead><tr><th style="width:34%">Key</th><th>Action</th></tr></thead><tbody><tr><td>any printable key</td><td>Insert the character (multi-byte UTF-8 supported).</td></tr><tr><td><span class="pd-kbd">←</span> / <span class="pd-kbd">→</span></td><td>Move the cursor one character.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">←</span> / <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">→</span><br><span class="pd-kbd">Alt</span>+<span class="pd-kbd">←</span> / <span class="pd-kbd">Alt</span>+<span class="pd-kbd">→</span> · <span class="pd-kbd">Alt</span>+<span class="pd-kbd">B</span> / <span class="pd-kbd">Alt</span>+<span class="pd-kbd">F</span></td><td>Move the cursor by word (terminals vary which form they send).</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">A</span> / <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">E</span></td><td>Jump to the start / end of the current line.</td></tr><tr><td><span class="pd-kbd">Home</span> / <span class="pd-kbd">End</span></td><td>Jump to the very start / end of the whole input.</td></tr><tr><td><span class="pd-kbd">Backspace</span></td><td>Delete the character before the cursor.</td></tr><tr><td><span class="pd-kbd">Delete</span></td><td>Delete the character under the cursor.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">W</span> · <span class="pd-kbd">Alt</span>+<span class="pd-kbd">Backspace</span> · <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">Backspace</span></td><td>Delete the previous word.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">U</span></td><td>Delete from the cursor back to the start of the line.</td></tr><tr><td>paste</td><td>Pasted text is inserted literally as one run (bracketed paste), not interpreted key-by-key.</td></tr></tbody></table></div><h2 id="submit" class="pd-h2">Submit &amp; newline</h2><div class="pd-table-wrap"><table class="pd-table pd-keytable"><thead><tr><th style="width:34%">Key</th><th>Action</th></tr></thead><tbody><tr><td><span class="pd-kbd">Enter</span></td><td>Send the message to the model.</td></tr><tr><td><span class="pd-kbd">Shift</span>+<span class="pd-kbd">Enter</span></td><td>Insert a newline instead of sending (terminal permitting — see below).</td></tr></tbody></table></div><p class="pd-body">Whether <span class="pd-kbd">Shift</span>+<span class="pd-kbd">Enter</span> inserts a newline depends on your terminal, because in the bare legacy protocol it is indistinguishable from plain <span class="pd-kbd">Enter</span>. panto works around this where it can — see <a href="#terminal">Terminal protocol</a>.</p><h2 id="control" class="pd-h2">Selectors &amp; control</h2><p class="pd-body">Control keys switch the model and reasoning effort mid-session, collapse tool output, hand off to your editor, interrupt a running turn, and exit. The selectors, tool-collapse, and the <span class="pd-kbd">Esc</span> interrupt stay responsive even while the agent is mid-turn.</p><div class="pd-table-wrap"><table class="pd-table pd-keytable"><thead><tr><th style="width:34%">Key</th><th>Action</th></tr></thead><tbody><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">M</span></td><td>Open the model selector.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">R</span></td><td>Open the reasoning-effort selector.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">O</span></td><td>Collapse / expand all tool-call output.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">G</span></td><td>Edit the current draft in <code>$EDITOR</code>, then read it back.</td></tr><tr><td><span class="pd-kbd">Esc</span></td><td>Interrupt the running agent turn; dismiss an open selector.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">C</span> / <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">D</span></td><td>Exit cleanly.</td></tr></tbody></table></div><div class="pg-callout pg-callout--note"><span class="pg-callout__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span><div class="pg-callout__body"><p class="pg-callout__title">Selectors are live-only</p>Picking a model (<span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">M</span>) or reasoning level (<span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">R</span>) rebuilds the active provider config and applies it to the running agent for this session — nothing is written back to <a href="configuration.html#models"><code>config.toml</code></a>.</div></div><h2 id="terminal" class="pd-h2">Terminal protocol</h2><p class="pd-body">Two TUI behaviours depend on the terminal’s keyboard protocol. panto negotiates the best available at startup and degrades gracefully.</p><h3 id="terminal-shiftenter" class="pd-h3">Shift + Enter</h3><p class="pd-body">In the bare legacy protocol, <span class="pd-kbd">Enter</span> and <span class="pd-kbd">Shift</span>+<span class="pd-kbd">Enter</span> send the same byte. To tell them apart, panto pushes the <strong>Kitty keyboard protocol</strong> (disambiguate + report-alternates) and queries the terminal; if that’s unavailable it falls back to xterm’s <strong>modifyOtherKeys</strong> mode (which tmux and xterm honour).</p><div class="pd-table-wrap"><table class="pd-table"><thead><tr><th>Terminal</th><th>Shift + Enter</th></tr></thead><tbody><tr><td>Kitty, Ghostty, foot (Kitty protocol)</td><td>Newline — fully supported.</td></tr><tr><td>xterm, tmux (modifyOtherKeys)</td><td>Newline — via the fallback.</td></tr><tr><td>macOS Terminal.app (neither)</td><td>Indistinguishable from Enter — submits.</td></tr></tbody></table></div><div class="pg-callout pg-callout--warn"><span class="pg-callout__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg></span><div class="pg-callout__body"><p class="pg-callout__title">No newline in Terminal.app</p>On terminals that support neither protocol, <span class="pd-kbd">Shift</span>+<span class="pd-kbd">Enter</span> can’t be distinguished from <span class="pd-kbd">Enter</span>, so it submits. Use a terminal with the Kitty protocol (Ghostty, Kitty, foot) — or tmux — if you want multi-line input.</div></div><h3 id="terminal-paste" class="pd-h3">Bracketed paste</h3><p class="pd-body">panto enables bracketed paste, so multi-line pastes arrive as a single literal block rather than being re-interpreted as a stream of keypresses (a stray newline in a paste won’t submit your message early).</p><div class="pg-callout pg-callout--note"><span class="pg-callout__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span><div class="pg-callout__body"><p class="pg-callout__title">What isn’t here yet</p>The input model reserves space for richer behaviour — key-release events and super/hyper modifiers under the full Kitty protocol — but those aren’t consumed today, so they’re not bindings yet.</div></div><nav class="pd-prevnext"><a class="pd-pn pd-pn--prev" href="configuration.html"><span class="pd-pn__dir">← Previous</span><span class="pd-pn__title">Configuration</span></a><a class="pd-pn pd-pn--next" href="lua.html"><span class="pd-pn__dir">Next →</span><span class="pd-pn__title">Lua extensions</span></a></nav></article></main>
+<main class="pd-main"><article class="pd-doc" data-screen-label="Key bindings"><p class="panto-eyebrow pd-eyebrow">Reference</p><h1 class="pd-doc__h1">Key bindings</h1><div class="pd-doc__meta"><span class="pg-badge pg-badge--neutral">TUI input</span></div><p class="pd-lead">The session UI reads raw keystrokes and negotiates richer terminal keyboard protocols at startup. These are the bindings the current TUI recognizes.</p><h2 id="editing" class="pd-h2">Editing &amp; cursor</h2><p class="pd-body">The input box is multi-line and accepts full UTF-8 text. Pasted text arrives as one literal block via bracketed paste.</p><div class="pd-table-wrap"><table class="pd-table pd-keytable"><thead><tr><th style="width:34%">Key</th><th>Action</th></tr></thead><tbody><tr><td>any printable key</td><td>Insert text at the cursor.</td></tr><tr><td><span class="pd-kbd">←</span> / <span class="pd-kbd">→</span></td><td>Move one character.</td></tr><tr><td><span class="pd-kbd">Alt</span>+<span class="pd-kbd">B</span> / <span class="pd-kbd">Alt</span>+<span class="pd-kbd">F</span><br><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">←</span> / <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">→</span></td><td>Move by word. Terminals vary in which encoding they send; panto accepts the common ones.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">A</span> / <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">E</span></td><td>Jump to start / end of the current line.</td></tr><tr><td><span class="pd-kbd">Backspace</span> / <span class="pd-kbd">Delete</span></td><td>Delete backward / forward.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">U</span> / <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">W</span></td><td>Delete to line start / delete previous word.</td></tr><tr><td>paste</td><td>Insert the pasted bytes literally; pasted newlines do not auto-submit.</td></tr></tbody></table></div><h2 id="submit" class="pd-h2">Submit &amp; newline</h2><div class="pd-table-wrap"><table class="pd-table pd-keytable"><thead><tr><th style="width:34%">Key</th><th>Action</th></tr></thead><tbody><tr><td><span class="pd-kbd">Enter</span></td><td>Submit the current input.</td></tr><tr><td><span class="pd-kbd">Shift</span>+<span class="pd-kbd">Enter</span></td><td>Insert a newline when the terminal can report it distinctly.</td></tr></tbody></table></div><p class="pd-body">Whether <span class="pd-kbd">Shift</span>+<span class="pd-kbd">Enter</span> works depends on keyboard-protocol support. panto negotiates Kitty first, then falls back to xterm <code>modifyOtherKeys</code>.</p><h2 id="control" class="pd-h2">Selectors &amp; control</h2><div class="pd-table-wrap"><table class="pd-table pd-keytable"><thead><tr><th style="width:34%">Key</th><th>Action</th></tr></thead><tbody><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">T</span></td><td>Open the model selector.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">R</span></td><td>Open the reasoning selector.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">O</span></td><td>Collapse / expand all tool output.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">G</span></td><td>Edit the current draft in <code>$EDITOR</code> (or <code>[tui] editor</code>).</td></tr><tr><td><span class="pd-kbd">Esc</span></td><td>Interrupt the running turn, close an open selector, or clear the input when idle.</td></tr><tr><td><span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">C</span> / <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">D</span></td><td>Exit cleanly.</td></tr></tbody></table></div><p class="pd-body">Selectors are filterable: type to narrow the list, move with <span class="pd-kbd">↑</span>/<span class="pd-kbd">↓</span> or <span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">N</span>/<span class="pd-kbd">Ctrl</span>+<span class="pd-kbd">P</span>, and accept with <span class="pd-kbd">Enter</span> (or <span class="pd-kbd">Tab</span> for completion-style pickers).</p><div class="pg-callout pg-callout--note"><span class="pg-callout__icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span><div class="pg-callout__body"><p class="pg-callout__title">Selectors are session-local</p>Choosing a model or reasoning level changes the live session only. Nothing is written back to <code>config.toml</code> or <code>models.toml</code>.</div></div><h2 id="terminal" class="pd-h2">Terminal protocol</h2><p class="pd-body">panto enables bracketed paste and probes for keyboard protocol support at startup.</p><h3 id="terminal-shiftenter" class="pd-h3">Shift + Enter</h3><p class="pd-body">With the legacy terminal protocol, <span class="pd-kbd">Enter</span> and <span class="pd-kbd">Shift</span>+<span class="pd-kbd">Enter</span> are the same byte. panto pushes the Kitty keyboard protocol and queries the terminal; if that is unavailable it falls back to xterm <code>modifyOtherKeys</code>.</p><div class="pd-table-wrap"><table class="pd-table"><thead><tr><th>Terminal</th><th>Shift + Enter</th></tr></thead><tbody><tr><td>Kitty, Ghostty, foot</td><td>Supported via Kitty keyboard protocol.</td></tr><tr><td>xterm, tmux</td><td>Supported via <code>modifyOtherKeys</code> fallback.</td></tr><tr><td>Terminal.app and similar</td><td>Indistinguishable from Enter, so it submits.</td></tr></tbody></table></div><h3 id="terminal-paste" class="pd-h3">Bracketed paste</h3><p class="pd-body">Bracketed paste means multi-line pastes are inserted literally instead of being reinterpreted as a sequence of keypresses.</p><nav class="pd-prevnext"><a class="pd-pn pd-pn--prev" href="configuration.html"><span class="pd-pn__dir">← Previous</span><span class="pd-pn__title">Configuration</span></a><a class="pd-pn pd-pn--next" href="lua.html"><span class="pd-pn__dir">Next →</span><span class="pd-pn__title">Lua extensions</span></a></nav></article></main>
<aside class="pd-toc"><p class="pd-toc__title">On this page</p><ul class="pd-toc__list"><li><a href="#editing" class="pd-toc__link pd-toc__link--active">Editing &amp; cursor</a></li><li><a href="#submit" class="pd-toc__link">Submit &amp; newline</a></li><li><a href="#control" class="pd-toc__link">Selectors &amp; control</a></li><li><a href="#terminal" class="pd-toc__link">Terminal protocol</a></li></ul></aside>
</div>
</div>