aboutsummaryrefslogtreecommitdiff
path: root/src/app
AgeCommit message (Collapse)Author
2026-08-05feat(theme): add optional sidebar backgroundOgulcan Celik
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-05fix(layout): return focus to the pane a split was opened from (#2266)Jon Kinney
Closing a focused pane handed focus to the next pane in tree order. For a pane opened beside another one -- a plugin split, a file viewer, any transient tool pane -- that is rarely where the user was: it lands on some unrelated neighbour rather than the pane that opened it. Track the pane focus came from in TileLayout and prefer it when the focused pane closes, falling back to tree order when there is no history, when it points at the pane being closed, or when it points at a pane that has since gone away. The history lives in the layout, so it can only ever name a pane in the same tab. A one-slot history is only sound if internal focus excursions never write it, so the tree edits that used to bounce focus around now go through target-taking primitives instead. close_pane removes a background pane directly, so detach_pane and take_pane_for_move stop focus-close-refocusing. split_pane splits a target without moving focus: the runtime split path only focuses the new pane once the spawn succeeds, which makes a failed split a pure rollback, and the targeted and unfocused workspace split paths stop fabricating history. insert_pane_near now takes the focus intent, so an unfocused pane move leaves the target tab's history alone. The layout-level focused-split helpers become test-only; production splits all flow through the target-taking path. Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-08-04fix(ui): search single-tab names in navigator (#2320)akbash
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-04feat(ui): add distinct status indicators (#2282)Can Celik
refs #2260
2026-08-04fix(input): preserve shift-tab in pane automation (#2259)Can Celik
refs #1561
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-02fix(client): query host cell size when the ioctl reports no pixels (#2160)WakaTaira
2026-08-01feat(ui): make pane scrollbars optional (#2166)Can Celik
refs #2167
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-08-01chore: remove experiments from settings tuiOgulcan Celik
2026-07-31feat: support bottom tab bar placement (#2118)Can Celik
* feat: support bottom tab bar placement * fix: preserve mouse cleanup under bottom mode bar refs #2117
2026-07-31fix: read alternate-screen agent historyOgulcan Celik
2026-07-30chore: finish repository organization migrationOgulcan Celik
2026-07-30Update rose pine surface_dim colour to "Overlay" (#2002)Bradley
Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-07-29fix: preserve navigate mode after pane focus (#1993)Adam Lau
refs #1850 Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-07-28perf: skip rendering hidden pty updatesOgulcan Celik
2026-07-28fix: preserve linked worktree workspace labelsOgulcan Celik
2026-07-28perf: replace agent spinners with static status marksOgulcan Celik
2026-07-28fix: resolve relative plugin commands from plugin rootOgulcan Celik
refs #1949
2026-07-27fix: keep focus on the current workspace when another self-closes (#1912)Season Saw
handle_pane_died only clamped the stale active/selected indices after removing a workspace that closed itself, so it never shifted them down when the removed workspace sat before the focused one. With workspaces [x, y, z] and focus on y, removing x left active pointing at z, silently moving the user into a workspace they did not select. Resolve both indices by workspace id across the removal, as close_selected_workspace already does, keeping the clamp as the fallback for when the removed workspace was the focused one. Also scroll the focused workspace back into view, which the explicit-close path already did and this one did not. refs #1621 Co-authored-by: Can Celik <ogulcancelik@gmail.com>
2026-07-27fix: close workspace when api closes its last tab (#1899)Season Saw
herdr tab close on a workspace's only tab returned tab_close_failed, while the TUI close-tab action on the same tab closes the tab and cascades to closing the workspace. Cascade in the API too, emitting tab.closed then workspace.closed. When the cascade would close a whole worktree group, return confirmation_required instead, matching pane.close and the TUI prompt. refs #1760
2026-07-27fix: preserve shift-enter in windows panes (#1909)JJ Liebig
refs #1743
2026-07-27fix: delay agent prompt submissionOgulcan Celik
refs #1878
2026-07-26fix: preserve prefix mode for modifier eventsOgulcan Celik
refs #1870
2026-07-26fix: preserve focus when closing a non-focused workspace (#1877)Yi-An Lai
refs #1328
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-26fix: improve sidebar worktree hierarchy and reordering (#1873)Can Celik
* fix: clarify sidebar worktree hierarchy refs #1694 * feat: reorder worktree groups as a unit refs #1694
2026-07-26fix: avoid renders for passive mouse motion (#1872)Can Celik
refs #1865
2026-07-25feat: switch IME to ASCII in prefix mode on Windows (Korean IME) (#1823)joonhwan
* feat: switch IME to ASCII in prefix mode on Windows Extend switch_ascii_input_source_in_prefix to Windows: detect IME state via WM_IME_CONTROL and toggle to ASCII with SendInput for the Korean IME. Other IME languages are detected and left unchanged. refs #1802 * docs: clarify Windows (Korean IME) support for prefix ASCII switching Follow-up to the Windows prefix ASCII switch, which extended switch_ascii_input_source_in_prefix to Windows but left the surrounding text describing macOS only. - Settings row label: "(macOS)" -> "(macOS/Windows)", plus its test. - Generalize the Windows behavior wording to "switches the IME to English (ASCII) input" in the config-reference.json entry and the model.rs doc comment, and state that Windows support is currently limited to the Korean IME. - Add a :::caution aside noting the Korean-IME-only limitation to the en/ja/zh preview docs, keeping the three translations in sync. refs #1802 * fix: warn when prefix IME toggle injection is incomplete SendInput can queue fewer events than requested (for example when blocked by UIPI), which would otherwise leave the IME silently stuck in ASCII or native mode. Log a warning with the sent and expected counts so the failure is diagnosable. refs #1802 * fix: guard prefix IME restore and correct open-status naming Address maintainer review on the Windows prefix ASCII switch: - Restore only when safe: store the foreground window at switch time and, before toggling back, require that the same window is still focused and the IME is still in English. This stops restore from toggling another application or overriding a manual return to Hangul during prefix mode. - Report injection success from send_vk_tap and only arm restoration when the initial toggle landed; on a partial injection retry the dropped key-up so a key is not left logically held down. The injection policy is split into send_vk_tap_with(inject) so the success, partial, and failure branches are unit-tested without the real SendInput. - Correct the WM_IME_CONTROL sub-command naming: 0x0005 is IMC_GETOPENSTATUS (IME open state), not IMC_GETCONVERSIONMODE. Behavior is unchanged; the constant, comments, and tests now describe the open-status read. refs #1802 * fix: bound IME open-status read with a timeout The prefix IME switch reads IMC_GETOPENSTATUS via WM_IME_CONTROL, which crosses into the terminal-emulator process. A plain SendMessageW would block herdr's client thread until that process responds, indefinitely if it hangs. Read through SendMessageTimeoutW with SMTO_ABORTIFHUNG and a short timeout instead; on timeout the switch is skipped and restore does nothing, so a hung host process can no longer freeze prefix-mode entry or exit. refs #1802 * fix: preserve windows ime restoration after partial injection refs #1802 --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-25perf: eliminate repeated workspace git discovery (#1842)Can Celik
* perf: eliminate repeated workspace git discovery refs #1838 * fix: keep workspace labels current without extra redraws refs #1838 * fix: retain discovered workspace git metadata refs #1838
2026-07-25fix: copy retained mouse selections with keyboard shortcutsOgulcan Celik
refs #1782
2026-07-24feat: filter keybind help (#1832)corrius
* feat: filter keybind help refs #1825 * fix: recognize shifted slash in keybind help --------- Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-24fix: report truncated pane readsOgulcan Celik
refs #1717
2026-07-24fix: make known-agent exit process-ownedOgulcan Celik
refs #1792 refs #1648
2026-07-24fix: consume handled url click gesturesOgulcan Celik
refs #1761
2026-07-24fix: preserve kitty graphics during host repaintsOgulcan Celik
refs #1628
2026-07-24fix: inherit host palette in pane queries (#1759)akbash
refs #1752 Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-23fix: preserve kitty printable key releasesOgulcan Celik
refs #1746
2026-07-22refactor: centralize new terminal cwd selectionOgulcan Celik
replaces contributions from Pitchfork-and-Torch
2026-07-22refactor: replace pane mouse and clipboard internalsOgulcan Celik
replaces contributions from othavi0
2026-07-20fix: make plugin state global across sessionsOgulcan Celik
refs #1174
2026-07-20feat: add plugin-driven agent views and startup hooksOgulcan Celik
2026-07-19feat: make agent automation a first-class cli primitiveOgulcan Celik
2026-07-19fix: preserve plugin command arguments (#1613)akbash
2026-07-19feat: connected tree glyphs, workspace grouping, and search auto-select in ↵Ogulcan Celik
navigator refs #1611
2026-07-18fix: report unknown config keys (#1575)akbash
* fix: report unknown config keys refs #1573 * fix: preserve mixed config warning context refs #1573 --------- Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-18feat: add optional workspace name promptOgulcan Celik