input: Add a transaction-based undo manager (#2728)
## Summary - implement transaction-first input history with explicit begin/commit and coalescing boundaries - coalesce adjacent same-kind typing and directional deletes without a time threshold, while isolating cursor/selection movement, newlines, paste, cut, command deletes, replacements, and programmatic edits - model editing-session boundaries: blur and non-inserting Return (`Input` / `submit_on_enter`) break coalescing, while multiline Return is an independent structural transaction - preserve exact selections across undo/redo, keep IME composition atomic, preserve redo across no-op edits, and clear redo only for real new edits - document the macOS accessibility-driven UI testing workflow and native AppKit behavior research ## Test Plan - native AppKit comparison of `NSTextField` and `NSTextView`: rapid typing, 2.5s pause, mouse/keyboard cursor changes, Return, focus sessions, multiline input, and deletion - signed Story Input and Editor via macOS accessibility tree: long multiline input, newline boundaries, single-line Return sessions, cut, paste, and repeated Backspace - `cargo fmt --check` - `git diff --check` - `cargo test -p gpui-base input_history -- --nocapture` (29 history scenarios) - `cargo test -p gpui-base` - `cargo clippy -p gpui-base --all-targets -- --deny warnings` Co-authored-by: Codex <codex@openai.com>
J
Jason Lee committed
41bee9c280b6708d3671b5e9b137a78f49394568
Parent: e443a9d
Committed by GitHub <noreply@github.com>
on 8/15/2026, 9:53:22 AM