diff options
| author | JJ Liebig <jonathan.liebig@gmail.com> | 2026-09-05 14:30:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-05 14:30:00 +0200 |
| commit | af7e189bd6749e7ecfa67d8c24f79c1bb1a498b0 (patch) | |
| tree | 446a5543a3be41332ee3f24d306fba14fd9b0da5 | |
| parent | 3a822e8106b45745f9d463d9167033f977353d9f (diff) | |
fix: retain mouse selections across unrelated terminal output (#3641)
| -rw-r--r-- | src/client/shell/state.rs | 3 | ||||
| -rw-r--r-- | src/client/shell/tests/copy.rs | 10 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/client/shell/state.rs b/src/client/shell/state.rs index 6b00e6c3..60307f66 100644 --- a/src/client/shell/state.rs +++ b/src/client/shell/state.rs @@ -1564,8 +1564,7 @@ impl ClientShellState { return false; }; previous.content_revision != next.content_revision - && (!selection.is_in_progress() - || !previous.content_revision.is_multiple_of(2) + && (!previous.content_revision.is_multiple_of(2) || !next.content_revision.is_multiple_of(2) || previous.inner_rect.width != next.inner_rect.width || previous.inner_rect.height != next.inner_rect.height diff --git a/src/client/shell/tests/copy.rs b/src/client/shell/tests/copy.rs index 64cc78e6..e8555db6 100644 --- a/src/client/shell/tests/copy.rs +++ b/src/client/shell/tests/copy.rs @@ -199,6 +199,16 @@ fn retained_mouse_selection_copies_only_on_exact_copy_shortcut() { .as_ref() .is_some_and(crate::selection::Selection::is_finalized)); + // Agent output outside the selected text must not cancel a pending copy. + let mut updated = state.pane_surface.clone().expect("pane surface"); + updated.panes[0].content_revision = 2; + updated.frame.cells[4].symbol = "-".into(); + state.set_pane_surface(updated); + assert!(state + .selection + .as_ref() + .is_some_and(crate::selection::Selection::is_finalized)); + let copy = state.handle_raw_events(vec