# Objective Fixes #58970. With `terminal.copy_on_select` enabled, a left click that isn't a deliberate selection can still overwrite the system clipboard. It happens most often on the window-focusing click (clicking into the terminal from another app), where the pointer jitters by a pixel or two during the click. A perfectly motionless click is already safe (it produces a zero-length selection and the copy is skipped), but the drag handler treats *any* movement as the start of a selection, so a 1px jitter creates a stray selection that `copy_on_select` then copies, clobbering whatever was on the clipboard. ## Solution Apply a small drag-distance threshold before a left click begins a selection, matching the threshold gpui's `div` element already uses (`DRAG_THRESHOLD = 2.0`). `mouse_down` records the press position, and `mouse_drag` ignores movement below the threshold until a selection has actually started. Once a selection is in progress it keeps extending as before. This is the same click-vs-drag handling other terminals use (kitty's `drag_threshold`, iTerm2). ## Testing Added two unit tests in `crates/terminal/src/terminal.rs`: - `test_terminal_click_jitter_does_not_start_selection` — a 1px drag after mouse-down enqueues no `UpdateSelection` and leaves the selection phase `Ended`. - `test_terminal_deliberate_drag_starts_selection` — a drag well past the threshold still starts a selection. The first test fails on `main` (the jitter starts a selection) and passes with this change. The rest of the `terminal` suite is green and `script/clippy -p terminal` is clean. I tested on Linux. The fix lives in the shared `Terminal` mouse handling, so it's platform-independent, but I haven't manually reproduced the macOS focusing-click scenario from the report on a Mac. ## Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable --- Release Notes: - Fixed `terminal.copy_on_select` overwriting the clipboard when a click jittered without an intentional drag.
1 file changedLine totals unavailable