editor: Do not offset text in single line editors by default (#30599)

Follow-up to #30138

In the linked PR, I enabled the content offset for all editors by
default. However, this introduced a small regression: There are some
editors where we do not want the text to be offset, most notably the
rename and the filename editor.

This PR adds a method to disable the content offset for specific
editors. I specifically decided on an opt-out approach, since I think
that having the small offset for most editors is actually a benefit
instead of a disadvantage. However, open to change that or to disable
the offset for all editors but full mode editors by default if that
should be preferred.

| `main` | This PR |
| --- | --- |
|
![main](https://github.com/user-attachments/assets/a7e9249e-ac5c-422f-9f30-021ebf21850b)
|
![pr](https://github.com/user-attachments/assets/c5eef4e6-fad8-46ab-9f2d-d0ebdca01e2c)
|


Release Notes:

- N/A
This commit is contained in:
Finn Evers 2025-05-26 13:47:10 +02:00 committed by GitHub
parent e6f51966a1
commit 6363fdab88
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 4 deletions

View file

@ -107,6 +107,7 @@ impl MessageEditor {
let this = cx.entity().downgrade();
editor.update(cx, |editor, cx| {
editor.set_soft_wrap_mode(SoftWrap::EditorWidth, cx);
editor.set_offset_content(false, cx);
editor.set_use_autoclose(false);
editor.set_show_gutter(false, cx);
editor.set_show_wrap_guides(false, cx);

View file

@ -923,6 +923,7 @@ pub struct Editor {
show_gutter: bool,
show_scrollbars: bool,
minimap_visibility: MinimapVisibility,
offset_content: bool,
disable_expand_excerpt_buttons: bool,
show_line_numbers: Option<bool>,
use_relative_line_numbers: Option<bool>,
@ -1761,6 +1762,7 @@ impl Editor {
show_local_selections: true,
show_scrollbars: full_mode,
minimap_visibility: MinimapVisibility::for_mode(&mode, cx),
offset_content: !matches!(mode, EditorMode::SingleLine { .. }),
show_breadcrumbs: EditorSettings::get_global(cx).toolbar.breadcrumbs,
show_gutter: mode.is_full(),
show_line_numbers: None,
@ -16921,6 +16923,17 @@ impl Editor {
self.set_minimap_visibility(MinimapVisibility::Disabled, window, cx);
}
/// Normally the text in full mode and auto height editors is padded on the
/// left side by roughly half a character width for improved hit testing.
///
/// Use this method to disable this for cases where this is not wanted (e.g.
/// if you want to align the editor text with some other text above or below)
/// or if you want to add this padding to single-line editors.
pub fn set_offset_content(&mut self, offset_content: bool, cx: &mut Context<Self>) {
self.offset_content = offset_content;
cx.notify();
}
pub fn set_show_line_numbers(&mut self, show_line_numbers: bool, cx: &mut Context<Self>) {
self.show_line_numbers = Some(show_line_numbers);
cx.notify();

View file

@ -7343,9 +7343,12 @@ impl Element for EditorElement {
self.max_line_number_width(&snapshot, window, cx),
cx,
)
.unwrap_or_else(|| {
GutterDimensions::default_with_margin(font_id, font_size, cx)
});
.or_else(|| {
self.editor.read(cx).offset_content.then(|| {
GutterDimensions::default_with_margin(font_id, font_size, cx)
})
})
.unwrap_or_default();
let text_width = bounds.size.width - gutter_dimensions.width;
let settings = EditorSettings::get_global(cx);
@ -9391,7 +9394,12 @@ fn compute_auto_height_layout(
let mut snapshot = editor.snapshot(window, cx);
let gutter_dimensions = snapshot
.gutter_dimensions(font_id, font_size, max_line_number_width, cx)
.unwrap_or_else(|| GutterDimensions::default_with_margin(font_id, font_size, cx));
.or_else(|| {
editor
.offset_content
.then(|| GutterDimensions::default_with_margin(font_id, font_size, cx))
})
.unwrap_or_default();
editor.gutter_dimensions = gutter_dimensions;
let text_width = width - gutter_dimensions.width;