editor: Add support for customizable soft wrap indentation (#63468)
# Objective
- Soft wrapped lines currently inherit the indentation of their first
line. This can be challenging for those coming from different editors,
or with different expectations.
- Allow users to customize the soft wrap behavior to wrap with extra
indent, or no indent at all.
- Fixes #18687
## Solution
- Introduce 3 soft-wrap indent configuration values (in addition to the
default of `same`): `none`, `extra_one`, and `extra_two` (where they are
multiples of the indent column width).
- Plumb indent configuration through to the various gpui and editor
components that are concerned with wrapping.
- Update code action icon placement to accommodate `none`-level wrap
indentation (preceded by a refactor of the function used to calculate
its display row).
- Fixed an existing bug in `WrapSnapshot::soft_wrap_indent` where
querying a 0-indent wrap returned `None` instead of `Some(0)`
## Testing
- Added tests to `wrap_map.rs` for all indentation levels.
- Updated the random wrap tests to include indent setting combinations.
- Added tests for code action icon placement.
- Validated locally by toggling between the various settings and
observing how the wrap behaved.
## 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
## Showcase
Changes are grouped by commit to ease review.
Screenshots below!
<details>
<summary>Click to view showcase</summary>
**`same` indent** (current Zed behavior)
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-45-54"
src="https://github.com/user-attachments/assets/83e1465c-0e8e-445d-a172-9e1b446406b7"
/>
**`none` indent**
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-45-39"
src="https://github.com/user-attachments/assets/99b282b6-d308-453d-b08b-e10af824f307"
/>
**`extra_one` indent**
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-46-06"
src="https://github.com/user-attachments/assets/c7480c84-f1a2-485d-b831-b97fe55c0b03"
/>
**`extra_two` indent**
<img width="764" height="844" alt="Screenshot from 2026-08-02 22-46-19"
src="https://github.com/user-attachments/assets/badc4996-e1bf-4237-9add-babf08f13897"
/>
**the setting**
<img width="826" height="336" alt="Screenshot from 2026-08-02 22-42-19"
src="https://github.com/user-attachments/assets/906b4e8e-1366-4a4e-a2cf-4f8bd67fd604"
/>
</details>
---
Release Notes:
- Added a `soft_wrap_indent` setting (`"none"`, `"same"`, `"extra_one"`,
`"extra_two"`) to configure indentation for soft-wrapped continuation
lines.
- Fixed soft-wrap continuation line indentation calculation for
unindented lines starting at column 0.
- [GPUI] Added `IndentAdjustment` enum to `LineWrapper` to control
indentation of soft-wrapped continuation lines.
---------
Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
4f70d91bdaAru Sahni committed on 9/28/2026, 7:16:22 AM· committed by GitHubparentd3ccd57