Scroll the transcript the way a Mac scrolls `PageUp` scrolled it all along, which on a Mac laptop is `Fn+Up` -- a chord nobody should have to know to read what they just did. `Up` reaches the transcript only after the input history is exhausted, so on a fresh session it looks like nothing happens. The session now captures mouse events, so a two-finger trackpad scroll and a wheel move the transcript. Capture is released before leaving the alternate screen, so the terminal gets its own selection back on exit. The event loop also stopped discarding every non-key event unread; it dispatches mouse events and ignores the rest explicitly, which is the same shape. Checked under a pty: the binary emits the mouse-reporting enables (1000, 1002, 1003, 1006, 1015) on startup, and repaints when an SGR wheel-up arrives. The key list now names the trackpad first and says PageUp is Fn+Up on a Mac, since a list naming a key nobody can press is the defect that list exists to prevent.
Scroll the transcript the way a Mac scrolls
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
crates/coder-lite/src/commands.rs -
modified
crates/coder-lite/src/interactive.rs
Diff
2 files changed, +22 -5
crates/coder-lite/src/commands.rs modified +2 -1
@@ -50,7 +50,8 @@ const KEYS: &[(&str, &str)] = &[
| 50 | 50 |
|
| 51 | 51 |
|
| 52 | 52 |
|
| 53 |
|
|
| 53 |
|
|
| 54 |
|
|
| 54 | 55 |
|
| 55 | 56 |
|
| 56 | 57 |
|
crates/coder-lite/src/interactive.rs modified +20 -4
@@ -20,8 +20,8 @@ use crate::tui::{CoderUi, Entry, Role, ToolCall};
| 20 | 20 |
|
| 21 | 21 |
|
| 22 | 22 |
|
| 23 |
|
|
| 24 |
|
|
| 23 |
|
|
| 24 |
|
|
| 25 | 25 |
|
| 26 | 26 |
|
| 27 | 27 |
|
@@ -129,6 +129,11 @@ pub async fn run_tui(options: SessionOptions) -> Result<(), Box<dyn std::error::
| 129 | 129 |
|
| 130 | 130 |
|
| 131 | 131 |
|
| 132 |
|
|
| 133 |
|
|
| 134 |
|
|
| 135 |
|
|
| 136 |
|
|
| 132 | 137 |
|
| 133 | 138 |
|
| 134 | 139 |
|
@@ -164,8 +169,18 @@ pub async fn run_tui(options: SessionOptions) -> Result<(), Box<dyn std::error::
| 164 | 169 |
|
| 165 | 170 |
|
| 166 | 171 |
|
| 167 |
|
|
| 168 |
|
|
| 172 |
|
|
| 173 |
|
|
| 174 |
|
|
| 175 |
|
|
| 176 |
|
|
| 177 |
|
|
| 178 |
|
|
| 179 |
|
|
| 180 |
|
|
| 181 |
|
|
| 182 |
|
|
| 183 |
|
|
| 169 | 184 |
|
| 170 | 185 |
|
| 171 | 186 |
|
@@ -238,6 +253,7 @@ pub async fn run_tui(options: SessionOptions) -> Result<(), Box<dyn std::error::
| 238 | 253 |
|
| 239 | 254 |
|
| 240 | 255 |
|
| 256 |
|
|
| 241 | 257 |
|
| 242 | 258 |
|
| 243 | 259 |
|