aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJJ Liebig <jonathan.liebig@gmail.com>2026-09-05 14:30:00 +0200
committerGitHub <noreply@github.com>2026-09-05 14:30:00 +0200
commitaf7e189bd6749e7ecfa67d8c24f79c1bb1a498b0 (patch)
tree446a5543a3be41332ee3f24d306fba14fd9b0da5 /src
parent3a822e8106b45745f9d463d9167033f977353d9f (diff)
fix: retain mouse selections across unrelated terminal output (#3641)
Diffstat (limited to 'src')
-rw-r--r--src/client/shell/state.rs3
-rw-r--r--src/client/shell/tests/copy.rs10
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![RawInputEvent::Key(crate::input::TerminalKey::new(
KeyCode::Char('c'),
KeyModifiers::CONTROL,