editor: Fix panic when showing pending input in a read-only buffer (#64730)
# Objective
Fixes ZED-BTA, ZED-8MC, ZED-875 and ZED-80K. Fixes FR-489.
When you have a binding like `j k`, Zed shows the `j` underlined while
it waits for the next key. We figured out where that `j` went by
assuming it was always inserted. In a read-only buffer it isn't, so with
the cursor at the end of the file we ended up pointing one character
past the end and crashed.
## Solution
We now take anchors at each cursor before inserting and read the
positions back from them afterwards, so we only highlight text that
actually made it into the buffer. This also covers other cases where the
insert gets dropped, like a read-only file inside project search. Also
removed the editor's own read-only check there, since it's no longer
needed.
## Testing
- `test_jk_pending_input_at_end_of_read_only_buffer` covers this and
panics without the fix.
- To reproduce on `main`: bind `"j k": "editor::Cancel"` in the `Editor`
context, put the cursor at the end of a file, run *workspace: toggle
read only file*, and press `j`.
## Self-Review Checklist:
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] 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 a crash when typing the start of a multi-key binding at the end
of a read-only file.
5becf8b591Agus Zubiaga committed on 9/28/2026, 1:24:52 PM· committed by GitHubparent2440236