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
|
// Draw block backgrounds
|
||||||
|
@ -729,7 +743,9 @@ impl Element for EditorElement {
|
||||||
|
|
||||||
let mut selections = HashMap::new();
|
let mut selections = HashMap::new();
|
||||||
let mut active_rows = BTreeMap::new();
|
let mut active_rows = BTreeMap::new();
|
||||||
|
let mut highlighted_row = None;
|
||||||
self.update_view(cx.app, |view, cx| {
|
self.update_view(cx.app, |view, cx| {
|
||||||
|
highlighted_row = view.highlighted_row();
|
||||||
for selection_set_id in view.active_selection_sets(cx).collect::<Vec<_>>() {
|
for selection_set_id in view.active_selection_sets(cx).collect::<Vec<_>>() {
|
||||||
let mut set = Vec::new();
|
let mut set = Vec::new();
|
||||||
for selection in view.selections_in_range(
|
for selection in view.selections_in_range(
|
||||||
|
@ -786,6 +802,7 @@ impl Element for EditorElement {
|
||||||
snapshot,
|
snapshot,
|
||||||
style: self.settings.style.clone(),
|
style: self.settings.style.clone(),
|
||||||
active_rows,
|
active_rows,
|
||||||
|
highlighted_row,
|
||||||
line_layouts,
|
line_layouts,
|
||||||
line_number_layouts,
|
line_number_layouts,
|
||||||
block_layouts,
|
block_layouts,
|
||||||
|
@ -915,6 +932,7 @@ pub struct LayoutState {
|
||||||
style: EditorStyle,
|
style: EditorStyle,
|
||||||
snapshot: Snapshot,
|
snapshot: Snapshot,
|
||||||
active_rows: BTreeMap<u32, bool>,
|
active_rows: BTreeMap<u32, bool>,
|
||||||
|
highlighted_row: Option<u32>,
|
||||||
line_layouts: Vec<text_layout::Line>,
|
line_layouts: Vec<text_layout::Line>,
|
||||||
line_number_layouts: Vec<Option<text_layout::Line>>,
|
line_number_layouts: Vec<Option<text_layout::Line>>,
|
||||||
block_layouts: Vec<(Range<u32>, BlockStyle)>,
|
block_layouts: Vec<(Range<u32>, BlockStyle)>,
|
||||||
|
|
|
@ -351,6 +351,7 @@ pub struct Editor {
|
||||||
blinking_paused: bool,
|
blinking_paused: bool,
|
||||||
mode: EditorMode,
|
mode: EditorMode,
|
||||||
placeholder_text: Option<Arc<str>>,
|
placeholder_text: Option<Arc<str>>,
|
||||||
|
highlighted_row: Option<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Snapshot {
|
pub struct Snapshot {
|
||||||
|
@ -485,6 +486,7 @@ impl Editor {
|
||||||
blinking_paused: false,
|
blinking_paused: false,
|
||||||
mode: EditorMode::Full,
|
mode: EditorMode::Full,
|
||||||
placeholder_text: None,
|
placeholder_text: None,
|
||||||
|
highlighted_row: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3248,15 +3250,19 @@ impl Editor {
|
||||||
.text()
|
.text()
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub fn font_size(&self) -> f32 {
|
|
||||||
// self.settings.font_size
|
|
||||||
// }
|
|
||||||
|
|
||||||
pub fn set_wrap_width(&self, width: f32, cx: &mut MutableAppContext) -> bool {
|
pub fn set_wrap_width(&self, width: f32, cx: &mut MutableAppContext) -> bool {
|
||||||
self.display_map
|
self.display_map
|
||||||
.update(cx, |map, cx| map.set_wrap_width(Some(width), cx))
|
.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 {
|
fn next_blink_epoch(&mut self) -> usize {
|
||||||
self.blink_epoch += 1;
|
self.blink_epoch += 1;
|
||||||
self.blink_epoch
|
self.blink_epoch
|
||||||
|
@ -3426,6 +3432,7 @@ impl EditorSettings {
|
||||||
background: Default::default(),
|
background: Default::default(),
|
||||||
gutter_background: Default::default(),
|
gutter_background: Default::default(),
|
||||||
active_line_background: Default::default(),
|
active_line_background: Default::default(),
|
||||||
|
highlighted_line_background: Default::default(),
|
||||||
line_number: Default::default(),
|
line_number: Default::default(),
|
||||||
line_number_active: Default::default(),
|
line_number_active: Default::default(),
|
||||||
selection: Default::default(),
|
selection: Default::default(),
|
||||||
|
|
|
@ -95,11 +95,17 @@ impl GoToLine {
|
||||||
let mut components = line_editor.trim().split(':');
|
let mut components = line_editor.trim().split(':');
|
||||||
let row = components.next().and_then(|row| row.parse::<u32>().ok());
|
let row = components.next().and_then(|row| row.parse::<u32>().ok());
|
||||||
let column = 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| {
|
self.active_editor.update(cx, |active_editor, cx| {
|
||||||
let buffer = active_editor.buffer().read(cx);
|
let buffer = active_editor.buffer().read(cx);
|
||||||
let point = buffer.clip_point(point, Bias::Left);
|
let point = buffer.clip_point(point, Bias::Left);
|
||||||
active_editor.select_ranges([point..point], Some(Autoscroll::Center), cx);
|
active_editor.select_ranges([point..point], Some(Autoscroll::Center), cx);
|
||||||
|
active_editor.set_highlighted_row(Some(point.row));
|
||||||
});
|
});
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
@ -111,6 +117,12 @@ impl GoToLine {
|
||||||
|
|
||||||
impl Entity for GoToLine {
|
impl Entity for GoToLine {
|
||||||
type Event = Event;
|
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 {
|
impl View for GoToLine {
|
||||||
|
|
|
@ -223,6 +223,7 @@ pub struct EditorStyle {
|
||||||
pub selection: SelectionStyle,
|
pub selection: SelectionStyle,
|
||||||
pub gutter_background: Color,
|
pub gutter_background: Color,
|
||||||
pub active_line_background: Color,
|
pub active_line_background: Color,
|
||||||
|
pub highlighted_line_background: Color,
|
||||||
pub line_number: Color,
|
pub line_number: Color,
|
||||||
pub line_number_active: Color,
|
pub line_number_active: Color,
|
||||||
pub guest_selections: Vec<SelectionStyle>,
|
pub guest_selections: Vec<SelectionStyle>,
|
||||||
|
@ -286,6 +287,7 @@ impl InputEditorStyle {
|
||||||
selection: self.selection,
|
selection: self.selection,
|
||||||
gutter_background: Default::default(),
|
gutter_background: Default::default(),
|
||||||
active_line_background: Default::default(),
|
active_line_background: Default::default(),
|
||||||
|
highlighted_line_background: Default::default(),
|
||||||
line_number: Default::default(),
|
line_number: Default::default(),
|
||||||
line_number_active: Default::default(),
|
line_number_active: Default::default(),
|
||||||
guest_selections: Default::default(),
|
guest_selections: Default::default(),
|
||||||
|
|
|
@ -231,6 +231,7 @@ text = "$text.1"
|
||||||
background = "$surface.1"
|
background = "$surface.1"
|
||||||
gutter_background = "$surface.1"
|
gutter_background = "$surface.1"
|
||||||
active_line_background = "$state.active_line"
|
active_line_background = "$state.active_line"
|
||||||
|
highlighted_line_background = "$state.highlighted_line"
|
||||||
line_number = "$text.2.color"
|
line_number = "$text.2.color"
|
||||||
line_number_active = "$text.0.color"
|
line_number_active = "$text.0.color"
|
||||||
selection = "$selection.host"
|
selection = "$selection.host"
|
||||||
|
|
|
@ -37,6 +37,7 @@ bad = "#b7372e"
|
||||||
|
|
||||||
[state]
|
[state]
|
||||||
active_line = "#00000033"
|
active_line = "#00000033"
|
||||||
|
highlighted_line = "#faca5033"
|
||||||
hover = "#00000033"
|
hover = "#00000033"
|
||||||
|
|
||||||
[editor.syntax]
|
[editor.syntax]
|
||||||
|
|
|
@ -37,6 +37,7 @@ bad = "#b7372e"
|
||||||
|
|
||||||
[state]
|
[state]
|
||||||
active_line = "#00000022"
|
active_line = "#00000022"
|
||||||
|
highlighted_line = "#faca5033"
|
||||||
hover = "#00000033"
|
hover = "#00000033"
|
||||||
|
|
||||||
[editor.syntax]
|
[editor.syntax]
|
||||||
|
|
|
@ -37,6 +37,7 @@ bad = "#b7372e"
|
||||||
|
|
||||||
[state]
|
[state]
|
||||||
active_line = "#00000008"
|
active_line = "#00000008"
|
||||||
|
highlighted_line = "#faca5033"
|
||||||
hover = "#0000000D"
|
hover = "#0000000D"
|
||||||
|
|
||||||
[editor.syntax]
|
[editor.syntax]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue