aboutsummaryrefslogtreecommitdiff
path: root/src/app/input/terminal.rs
AgeCommit message (Collapse)Author
2026-09-01refactor: render the shell in the client (#3487)Can Celik
* feat: add opt-in client-rendered shell * feat: add client-owned shell mouse controls * feat: complete client-owned shell chrome * feat: add client-owned shell settings and notifications * feat: run client shell custom commands * feat: render popup terminals in client shell * feat: add client-owned scrollback and copy mode * fix: preserve client worktree trust defaults * feat: render startup diagnostics in client shell * feat: render onboarding in client shell * feat: render product announcements in client shell * feat: render release notes in client shell * feat: render mobile switcher in client shell * feat: render kitty graphics in client shell * fix: preserve client shell lifecycle coherence * refactor: route client shell commands through endpoint connections * refactor: make the client-rendered shell the default * refactor: remove monolithic launch mode * refactor: complete client-rendered shell cutover * perf: retain client pane surface updates * perf: scale retained pane surface updates * perf: remove remote pane input latency * test: make client shell checks platform-independent * fix: prevent client timer starvation * test: fix client shell platform gates * test: accept retained surfaces in cross-area checks * test: make client mode assertions platform-neutral * fix: badge only outdated integrations
2026-08-25fix: route osc 8 file links to plugin handlers (#2942)akbash
refs #2941 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-08-19fix(perf): eliminate redundant terminal wake work (#2962)Can Celik
* fix(perf): eliminate redundant terminal wake work * fix(perf): harden release benchmark gate * test(perf): strengthen performance guardrails
2026-08-18fix: reap ctrl-click url openers (#2906)akbash
* fix: reap ctrl-click url openers refs #2903 * fix: scope linux opener test import refs #2903 * test: isolate url opener regression refs #2903 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-08-13fix: keep tab and sidebar clicks when the terminal reports a stray drag (#2736)Michael Hackner
* fix: keep tab and sidebar clicks when the terminal reports a stray drag This works around a Ghostty bug that causes herdr tabs to be unclickable in fullscreen mode. Ghostty on macOS in native fullscreen emits one motion report after a fresh press in the strip where the menu bar reveals, with the row shifted to near the bottom of the grid. The cause is upstream: macOS delivers one mouse event whose y is nearly a window height away from the real pointer, and Ghostty reports it as it arrives (iTerm2 and Terminal.app report the same clicks correctly). Herdr treated the stray report as a real drag and lost the click two ways: it opened a tab reorder with no drop target, making the release a no-op, and it handed the release to the pane under the bogus coordinates. Now, a press on the tab bar or sidebar owns the gesture until release, and a tab drag only starts once the pointer is over a real drop target. refs #796 * fix: scope chrome mouse gestures to their input source * fix: preserve chrome drag input source * fix: preserve concurrent chrome presses --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-08-05fix(input): preserve modifyOtherKeys key releases (#2303)akbash
refs #2302 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-08-04fix(input): keep pending url clicks across host focus loss (#2291)Kataoka Katsuki
Opening a URL raises the browser, which takes focus away from the host terminal before the mouse release arrives. release_input_source(_headless) cleared pending_url_click_sources on that focus loss, so the release was forwarded to the pane and the agent opened the same URL again. Clear the set in clear_input_source instead, whose only production caller is remove_client. refs #2290 Co-authored-by: kataokatsuki <kataokatsuki@users.noreply.github.com>
2026-08-03fix: page keys scroll pane scrollback at zsh and REPL prompts (#2191)Michael Hackner
* fix: page keys scroll pane scrollback at zsh and REPL prompts PageUp/PageDown were forwarded to the pane whenever DECCKM (application cursor) was on, assuming only primary-screen pagers enable it, but zsh's line editor also enables DECCKM, as do REPLs such as python3. The result was PageUp scrolling shell history instead of Herdr scrollback. Bracketed paste discriminates the two: it means the app accepts typed or pasted text at a prompt, so line editors enable it and pagers do not. * test: update page key state fixture --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-08-03fix: propagate host color scheme to pane apps (#2214)Can Celik
refs #714
2026-08-01fix(input): preserve native key lifecycle across routing (#2142)Can Celik
refs #2077 Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
2026-07-30chore: finish repository organization migrationOgulcan Celik
2026-07-26fix: support non-us shifted keybindings (#1876)Can Celik
* fix: support non-us shifted keybindings refs #1870 * docs: require current pull request base
2026-07-25fix: copy retained mouse selections with keyboard shortcutsOgulcan Celik
refs #1782
2026-07-24fix: consume handled url click gesturesOgulcan Celik
refs #1761
2026-07-23fix: preserve kitty printable key releasesOgulcan Celik
refs #1746
2026-07-22refactor: replace pane mouse and clipboard internalsOgulcan Celik
replaces contributions from othavi0
2026-07-20feat: add plugin-driven agent views and startup hooksOgulcan Celik
2026-07-16fix: preserve selection when auto-copy is disabled (#1496)akbash
refs #1471 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-15feat: add floating popup panesOgulcan Celik
refs #1125
2026-07-11feat: add copy-on-select settingOgulcan Celik
2026-07-08fix: match shifted indexed number keybindsOgulcan Celik
refs #1184
2026-07-08fix: avoid render-time plain url scansOgulcan Celik
2026-07-06fix: preserve wrapped pane links (#1099)akbash
refs #1098 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-07-03fix: forward page keys to primary-screen pagersOgulcan Celik
refs #953
2026-06-29refactor: route tui mutations through runtime authorityOgulcan Celik
2026-06-15fix: use ctrl-click for captured pane links on macosOgulcan Celik
2026-06-07feat: add native windows beta supportOgulcan Celik
2026-06-05feat: add pane navigation controlsOgulcan Celik
refs #421 refs #330 related discussions: https://github.com/ogulcancelik/herdr/discussions/422 https://github.com/ogulcancelik/herdr/discussions/438 https://github.com/ogulcancelik/herdr/discussions/442
2026-06-01fix: restore agents through pane shellsOgulcan Celik
2026-05-31feat: support custom command descriptionsOgulcan Celik
refs #362
2026-05-30fix: use login shells for macos panesOgulcan Celik
refs #350
2026-05-26feat: open pane links with ctrl-clickOgulcan Celik
refs #307
2026-05-26Add tmux-style double-click word copy (#296)Zack Drach
* feat: add tmux-style double-click copy Double-clicking terminal output now selects and copies the token under the cursor, similar to tmux. The copied token briefly stays highlighted as feedback, and token detection handles common shell output like paths, URLs, variables, CJK text, and surrounding punctuation. Mouse events are still forwarded unchanged when the child terminal has mouse reporting enabled. refs #142 * fix: tighten double-click copy refs #142 --------- Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-05-21refactor: separate server client boundariesOgulcan Celik
2026-05-20feat: add keybinding v2Ogulcan Celik
refs #154 refs #201 refs #202 refs #219
2026-05-20fix: stop auto-opening release notes on startupOgulcan Celik
2026-05-18fix: preserve alt backspace in panes (#165)kangal-bot
refs #155 Co-authored-by: kangal-bot <kangal-bot@users.noreply.github.com>
2026-05-17feat: add selection autoscroll and fix stale selection on transitions (#129)leeeanh
When dragging to select text near pane edges, a 30ms recurring tick now continues scrolling and extending the selection while the mouse is idle. The autoscroll stops on MouseUp, key input, navigate action, cursor leaving the hot zone, scrollback boundary, missing metrics, or pane rect change. Also fixes pre-existing bugs where workspace/tab/pane transitions failed to clear selection state, which could cause stale selections to persist across views. Selection clearing on pane death is scoped to only the dying pane. Also fixes anchor_screen_pos returning pane-relative coordinates instead of screen coordinates, which caused false drag detection and spurious edge autoscroll on same-cell events when the pane has a non-zero origin. refs #128 Co-authored-by: leeanh <mac@macs-MacBook-Pro.local>
2026-05-17feat: add direct terminal attach streamOgulcan Celik
2026-05-17refactor: extract terminal state and runtime from panesOgulcan Celik
2026-05-15fix(input): only host-scroll plain page key pressesOgulcan Celik
2026-05-14fix(input): scroll pane scrollback with pageup/pagedown and parse enhanced ↵Ogulcan Celik
tilde sequences
2026-05-05feat: add mobile terminal layoutOgulcan Celik
2026-04-21feat: add persistent server-client sessionsCan Celik
Make herdr persistent by default. Launching herdr now starts or reattaches to a background session server. Clients can detach and reattach while panes and agent processes keep running. Session mode now supports multi-client attach, auto-detect startup, and a thin-client/headless-server split. This also refactors the large app, ui, input, pane, config, workspace, and persistence modules into smaller focused submodules, while preserving behavior and colocating tests with the code they exercise. Upgrade notes: - persistence mode is now the default - in-app quit detaches the current client instead of stopping the server - use `herdr server stop` to stop the background session - use `--no-session` for the old single-process behavior - default socket paths now live under the config directory