make up/down keep cursor screen position
This commit is contained in:
+12
-3
@@ -91,24 +91,33 @@ impl App {
|
|||||||
self.cursor.clamp(self.scroll_position, self.screen_size());
|
self.cursor.clamp(self.scroll_position, self.screen_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: for up/down, keep cursor at same relative position on screen
|
|
||||||
(Mode::Normal, Event::Key(key_event), None)
|
(Mode::Normal, Event::Key(key_event), None)
|
||||||
if key_event.modifiers.contains(KeyModifiers::CONTROL) &&
|
if key_event.modifiers.contains(KeyModifiers::CONTROL) &&
|
||||||
key_event.code == KeyCode::Char('d') => {
|
key_event.code == KeyCode::Char('d') => {
|
||||||
|
let head_offset = self.cursor.head - self.scroll_position;
|
||||||
|
let tail_offset = self.cursor.tail - self.scroll_position;
|
||||||
|
|
||||||
self.scroll_position = min(
|
self.scroll_position = min(
|
||||||
self.scroll_position + self.screen_size() / 2,
|
self.scroll_position + self.screen_size() / 2,
|
||||||
self.contents.len() - (5 * BYTES_PER_LINE)
|
self.contents.len() - (5 * BYTES_PER_LINE)
|
||||||
);
|
);
|
||||||
self.cursor.clamp(self.scroll_position, self.screen_size());
|
|
||||||
|
self.cursor.head = (self.scroll_position + head_offset).min(self.contents.len() - 1);
|
||||||
|
self.cursor.tail = (self.scroll_position + tail_offset).min(self.contents.len() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
(Mode::Normal, Event::Key(key_event), None)
|
(Mode::Normal, Event::Key(key_event), None)
|
||||||
if key_event.modifiers.contains(KeyModifiers::CONTROL) &&
|
if key_event.modifiers.contains(KeyModifiers::CONTROL) &&
|
||||||
key_event.code == KeyCode::Char('u') => {
|
key_event.code == KeyCode::Char('u') => {
|
||||||
|
let head_offset = self.cursor.head - self.scroll_position;
|
||||||
|
let tail_offset = self.cursor.tail - self.scroll_position;
|
||||||
|
|
||||||
self.scroll_position = self.scroll_position.saturating_sub(
|
self.scroll_position = self.scroll_position.saturating_sub(
|
||||||
self.screen_size() / 2
|
self.screen_size() / 2
|
||||||
);
|
);
|
||||||
self.cursor.clamp(self.scroll_position, self.screen_size());
|
|
||||||
|
self.cursor.head = (self.scroll_position + head_offset).min(self.contents.len() - 1);
|
||||||
|
self.cursor.tail = (self.scroll_position + tail_offset).min(self.contents.len() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
(Mode::Normal, Event::Key(key_event), None)
|
(Mode::Normal, Event::Key(key_event), None)
|
||||||
|
|||||||
Reference in New Issue
Block a user