mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-27 02:48:34 +00:00
Highlight the selected line when typing in the go to line dialog
This commit is contained in:
parent
53a7da9d3f
commit
0854976691
8 changed files with 48 additions and 5 deletions
|
@ -263,6 +263,20 @@ impl EditorElement {
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(highlighted_row) = layout.highlighted_row {
|
||||
let origin = vec2f(
|
||||
bounds.origin_x(),
|
||||
bounds.origin_y() + (layout.line_height * highlighted_row as f32) - scroll_top,
|
||||
);
|
||||
let size = vec2f(bounds.width(), layout.line_height);
|
||||
cx.scene.push_quad(Quad {
|
||||
bounds: RectF::new(origin, size),
|
||||
background: Some(style.highlighted_line_background),
|
||||
border: Border::default(),
|
||||
corner_radius: 0.,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Draw block backgrounds
|
||||
|
@ -729,7 +743,9 @@ impl Element for EditorElement {
|
|||
|
||||
let mut selections = HashMap::new();
|
||||
let mut active_rows = BTreeMap::new();
|
||||
let mut highlighted_row = None;
|
||||
self.update_view(cx.app, |view, cx| {
|
||||
highlighted_row = view.highlighted_row();
|
||||
for selection_set_id in view.active_selection_sets(cx).collect::<Vec<_>>() {
|
||||
let mut set = Vec::new();
|
||||
for selection in view.selections_in_range(
|
||||
|
@ -786,6 +802,7 @@ impl Element for EditorElement {
|
|||
snapshot,
|
||||
style: self.settings.style.clone(),
|
||||
active_rows,
|
||||
highlighted_row,
|
||||
line_layouts,
|
||||
line_number_layouts,
|
||||
block_layouts,
|
||||
|
@ -915,6 +932,7 @@ pub struct LayoutState {
|
|||
style: EditorStyle,
|
||||
snapshot: Snapshot,
|
||||
active_rows: BTreeMap<u32, bool>,
|
||||
highlighted_row: Option<u32>,
|
||||
line_layouts: Vec<text_layout::Line>,
|
||||
line_number_layouts: Vec<Option<text_layout::Line>>,
|
||||
block_layouts: Vec<(Range<u32>, BlockStyle)>,
|
||||
|
|
|
@ -351,6 +351,7 @@ pub struct Editor {
|
|||
blinking_paused: bool,
|
||||
mode: EditorMode,
|
||||
placeholder_text: Option<Arc<str>>,
|
||||
highlighted_row: Option<u32>,
|
||||
}
|
||||
|
||||
pub struct Snapshot {
|
||||
|
@ -485,6 +486,7 @@ impl Editor {
|
|||
blinking_paused: false,
|
||||
mode: EditorMode::Full,
|
||||
placeholder_text: None,
|
||||
highlighted_row: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3248,15 +3250,19 @@ impl Editor {
|
|||
.text()
|
||||
}
|
||||
|
||||
// pub fn font_size(&self) -> f32 {
|
||||
// self.settings.font_size
|
||||
// }
|
||||
|
||||
pub fn set_wrap_width(&self, width: f32, cx: &mut MutableAppContext) -> bool {
|
||||
self.display_map
|
||||
.update(cx, |map, cx| map.set_wrap_width(Some(width), cx))
|
||||
}
|
||||
|
||||
pub fn set_highlighted_row(&mut self, row: Option<u32>) {
|
||||
self.highlighted_row = row;
|
||||
}
|
||||
|
||||
pub fn highlighted_row(&mut self) -> Option<u32> {
|
||||
self.highlighted_row
|
||||
}
|
||||
|
||||
fn next_blink_epoch(&mut self) -> usize {
|
||||
self.blink_epoch += 1;
|
||||
self.blink_epoch
|
||||
|
@ -3426,6 +3432,7 @@ impl EditorSettings {
|
|||
background: Default::default(),
|
||||
gutter_background: Default::default(),
|
||||
active_line_background: Default::default(),
|
||||
highlighted_line_background: Default::default(),
|
||||
line_number: Default::default(),
|
||||
line_number_active: Default::default(),
|
||||
selection: Default::default(),
|
||||
|
|
|
@ -95,11 +95,17 @@ impl GoToLine {
|
|||
let mut components = line_editor.trim().split(':');
|
||||
let row = components.next().and_then(|row| row.parse::<u32>().ok());
|
||||
let column = components.next().and_then(|row| row.parse::<u32>().ok());
|
||||
if let Some(point) = row.map(|row| Point::new(row, column.unwrap_or(0))) {
|
||||
if let Some(point) = row.map(|row| {
|
||||
Point::new(
|
||||
row.saturating_sub(1),
|
||||
column.map(|column| column.saturating_sub(1)).unwrap_or(0),
|
||||
)
|
||||
}) {
|
||||
self.active_editor.update(cx, |active_editor, cx| {
|
||||
let buffer = active_editor.buffer().read(cx);
|
||||
let point = buffer.clip_point(point, Bias::Left);
|
||||
active_editor.select_ranges([point..point], Some(Autoscroll::Center), cx);
|
||||
active_editor.set_highlighted_row(Some(point.row));
|
||||
});
|
||||
cx.notify();
|
||||
}
|
||||
|
@ -111,6 +117,12 @@ impl GoToLine {
|
|||
|
||||
impl Entity for GoToLine {
|
||||
type Event = Event;
|
||||
|
||||
fn release(&mut self, cx: &mut MutableAppContext) {
|
||||
self.active_editor.update(cx, |editor, cx| {
|
||||
editor.set_highlighted_row(None);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl View for GoToLine {
|
||||
|
|
|
@ -223,6 +223,7 @@ pub struct EditorStyle {
|
|||
pub selection: SelectionStyle,
|
||||
pub gutter_background: Color,
|
||||
pub active_line_background: Color,
|
||||
pub highlighted_line_background: Color,
|
||||
pub line_number: Color,
|
||||
pub line_number_active: Color,
|
||||
pub guest_selections: Vec<SelectionStyle>,
|
||||
|
@ -286,6 +287,7 @@ impl InputEditorStyle {
|
|||
selection: self.selection,
|
||||
gutter_background: Default::default(),
|
||||
active_line_background: Default::default(),
|
||||
highlighted_line_background: Default::default(),
|
||||
line_number: Default::default(),
|
||||
line_number_active: Default::default(),
|
||||
guest_selections: Default::default(),
|
||||
|
|
|
@ -231,6 +231,7 @@ text = "$text.1"
|
|||
background = "$surface.1"
|
||||
gutter_background = "$surface.1"
|
||||
active_line_background = "$state.active_line"
|
||||
highlighted_line_background = "$state.highlighted_line"
|
||||
line_number = "$text.2.color"
|
||||
line_number_active = "$text.0.color"
|
||||
selection = "$selection.host"
|
||||
|
|
|
@ -37,6 +37,7 @@ bad = "#b7372e"
|
|||
|
||||
[state]
|
||||
active_line = "#00000033"
|
||||
highlighted_line = "#faca5033"
|
||||
hover = "#00000033"
|
||||
|
||||
[editor.syntax]
|
||||
|
|
|
@ -37,6 +37,7 @@ bad = "#b7372e"
|
|||
|
||||
[state]
|
||||
active_line = "#00000022"
|
||||
highlighted_line = "#faca5033"
|
||||
hover = "#00000033"
|
||||
|
||||
[editor.syntax]
|
||||
|
|
|
@ -37,6 +37,7 @@ bad = "#b7372e"
|
|||
|
||||
[state]
|
||||
active_line = "#00000008"
|
||||
highlighted_line = "#faca5033"
|
||||
hover = "#0000000D"
|
||||
|
||||
[editor.syntax]
|
||||
|
|
Loading…
Reference in a new issue