v1.0: themes + stable release#9
Merged
sebasv merged 7 commits intofeat/v0.9-worktree-mgmtfrom Apr 22, 2026
Merged
Conversation
0d9ef17 to
efd83ee
Compare
9c1c78e to
ce2d5c0
Compare
efd83ee to
7858ae9
Compare
ce2d5c0 to
cebd159
Compare
7858ae9 to
741327a
Compare
- `src/theme.rs`: `Theme { accent, dim, success, warn, danger }` with
built-in palettes `default`, `tokyonight`, `gruvbox` (serde kebab-case).
- Config `[theme] base = "..."` drives the palette; unknown names fall
through to the default via serde's enum failure handling.
- `AppState.theme` is populated at startup; main-pane border uses
`theme.accent` instead of a hard-coded Cyan.
- Fix flaky `derive_worktree_path_avoids_collisions` — was relying on
`/tmp` being clean between runs; now builds an isolated parent dir.
Keybindings frozen for the 1.x series; configurability lands in v1.2.
87 tests green. Release build clean.
Version 1.0.0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
741327a to
c7a743d
Compare
cebd159 to
2822c05
Compare
ThemeName::next() wraps default → tokyonight → gruvbox → default. AppState gains theme_name alongside theme so the current position is tracked without touching config. F2 is intercepted globally (before PTY dispatch) so it works from any focus without sending an escape sequence to the shell. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
… watchers, scrollable help - Fix linked-worktree git watcher: RecursiveMode::Recursive so index changes in .git/worktrees/<name>/ trigger RepoDirty events - New worktree modal: branch picker (local + remote); Tab toggles to free-text mode; remote-only branches get a slug-suffixed local name with up to 5 collision retries - Kill worktree: offers to delete branch locally after removal; detects unmerged commits and shows a force-delete confirmation; warns when an open PR would be closed - Add repo modal: directory autocomplete on typed prefix (↑/↓ navigate, Tab accept); top 10 matches, hides dot-dirs - Help overlay: scrollable (j/k) and sizes to the terminal height so it no longer overflows on small screens - Update DESIGN.md to reflect all v1.0 decisions Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Previously Ctrl+H fell through to key_to_pty_bytes as \x08 (backspace) and Ctrl+L as \x0c (clear screen). Intercept both — plus Ctrl+Arrow — in main_reserved_keys before PTY dispatch. Also updates the help text which incorrectly listed Alt+h/l. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…window Replaced Paragraph::scroll() — which shifts the render start but can still allow content to bleed past the block border in ratatui 0.29 — with an explicit skip/take on the lines vector. Content outside the visible window is never passed to the renderer at all. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Applications like atuin send ESC[6n (Device Status Report) to query the cursor position before drawing their TUI. The vt100 parser consumed the sequence silently, leaving atuin waiting for a ESC[row;colR reply that never arrived — triggering its timeout error. The reader thread now detects ESC[6n in the PTY output stream, reads the current cursor position from the vt100 parser, and injects ESC[row;colR back into the PTY master writer. The writer is moved into an Arc<Mutex<>> so it can be shared safely with the reader thread. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
When the help content exceeds the visible area, a dim "↓ more" label appears on the bottom border. When the user has scrolled down, a dim "↑" label appears on the top-right of the border. Both disappear when no longer applicable. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Theme support (default / tokyonight / gruvbox) + stable 1.0.0 release. Stacked on #8.
Keybindings frozen for 1.x; v1.2 will add user configurability without breaking current bindings.
Test plan
🤖 Generated with Claude Code