# Fix horizontal autoscroll not following cursor on long selections \(\#62691\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/dfb696697e0a488cbfc4c59b3a50e6e118ba87ad)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: dfb696697e0a488cbfc4c59b3a50e6e118ba87ad

Requested commit: dfb696697e0a488cbfc4c59b3a50e6e118ba87ad

Commit: dfb696697e0a488cbfc4c59b3a50e6e118ba87ad

Tree: 8ab4f0da560cb79dcdf249984e297210e1fa24a9

Author: vinod akshat

Committer: GitHub

## Message

```
Fix horizontal autoscroll not following cursor on long selections (#62691)

# Objective

Fixes #62524

This bug was introduced in a regression from #61487, which fixed
horizontal autoscroll for multi-row selections (word wrap off) by
computing target_left/target_right from the selection's actual start/end
instead of just head.That fix changed target_left/target_right from
always being a single point (head's column) to spanning the full
selection width. This tripped an existing guard (if target_right -
target_left > viewport_width { return None; }) whenever a selection was
wider than the viewport, previously dead code, since
target_left/target_right were never far apart before #61487. The
function now bails out before adjusting scroll at all in that case.

## Solution

In `autoscroll_horizontally`, compute the selection's span width per
row. If it exceeds the viewport width, fall back to tracking just head
(the pre-#61487 behavior) instead of the full start/end span. If it
fits, keep using the full span so the #61409 fix is unaffected.

## Testing

- Did you test these changes? If so, how?
- Tested manually in-app on macOS: selecting a long line with
cmd+shift+end now scrolls correctly.
(NOTE: I used Claude to write these unit tests for me)
- Added test_autoscroll_horizontally_long_selection_tracks_cursor:
selects a 250-character line in a narrow viewport and asserts the scroll
position moves to follow the cursor, instead of staying frozen at 0.
- Added
test_autoscroll_horizontally_fitting_selection_reveals_full_span:
selects a short span that fits within the viewport and asserts the full
span is revealed, confirming the #61409 fix still holds.
- Ran the full editor test suite locally (cargo test --package editor
--lib), all passing.

## Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [ ] The content adheres to Zed's UI standards
([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
and
[icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md)
guidelines)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

---

Release Notes:

- Fixed horizontal scroll not following the cursor when selecting a line
longer than the viewport width

---------

Co-authored-by: Kirill Bulatov <kirill@zed.dev>
```

## Parents

- [a8b5f6b94f006850a79e0efb24446aa0e137d2b6](https://git.cafe/gitcafe/zed/commit/a8b5f6b94f006850a79e0efb24446aa0e137d2b6?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/dfb696697e0a488cbfc4c59b3a50e6e118ba87ad?format=markdown)
