Add left/right cursor mvments to execute bar

async
Manos Pitsidianakis 2020-02-23 00:17:10 +02:00
parent c88d1cae51
commit 44da24fc96
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
2 changed files with 35 additions and 2 deletions

View File

@ -814,7 +814,7 @@ impl StatusBar {
fn draw_execute_bar(&mut self, grid: &mut CellBuffer, area: Area, context: &mut Context) {
clear_area(grid, area, crate::conf::value(context, "theme_default"));
let (x, y) = write_string_to_grid(
let (_, y) = write_string_to_grid(
self.ex_buffer.as_str(),
grid,
Color::Byte(219),
@ -823,7 +823,12 @@ impl StatusBar {
area,
None,
);
grid[(x, y)].set_attrs(Attr::Underline);
if let Some(ref mut cell) = grid.get_mut(
pos_inc(upper_left!(area), (self.ex_buffer.cursor(), 0)).0,
y,
) {
cell.set_attrs(Attr::Underline);
}
change_colors(grid, area, Color::Byte(219), Color::Byte(88));
context.dirty_areas.push_back(area);
}
@ -1154,6 +1159,26 @@ impl Component for StatusBar {
self.auto_complete.inc_cursor();
self.dirty = true;
}
UIEvent::ExInput(Key::Left) => {
if let Field::Text(ref mut utext, _) = self.ex_buffer {
utext.cursor_dec();
} else {
unsafe {
std::hint::unreachable_unchecked();
}
}
self.dirty = true;
}
UIEvent::ExInput(Key::Right) => {
if let Field::Text(ref mut utext, _) = self.ex_buffer {
utext.cursor_inc();
} else {
unsafe {
std::hint::unreachable_unchecked();
}
}
self.dirty = true;
}
UIEvent::ExInput(Key::Ctrl('p')) => {
let pos = self.ex_buffer_cmd_history_pos.map(|p| p + 1).unwrap_or(0);
let pos = Some(std::cmp::min(pos, self.cmd_history.len().saturating_sub(1)));

View File

@ -74,6 +74,14 @@ impl Field {
}
}
}
pub fn cursor(&self) -> usize {
match self {
Text(ref s, _) => s.grapheme_pos(),
Choice(_, ref cursor) => *cursor,
}
}
pub fn is_empty(&self) -> bool {
self.as_str().is_empty()
}