diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index ba1975a29..010147203 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -276,6 +276,10 @@ impl MappableCommand { page_down, "Move page down", half_page_up, "Move half page up", half_page_down, "Move half page down", + page_cursor_up, "Move page and cursor up", + page_cursor_down, "Move page and cursor down", + page_cursor_half_up, "Move page and cursor half up", + page_cursor_half_down, "Move page and cursor half down", select_all, "Select whole document", select_regex, "Select all regex matches inside selections", split_selection, "Split selections on regex matches", @@ -1654,6 +1658,30 @@ fn half_page_down(cx: &mut Context) { scroll(cx, offset, Direction::Forward); } +fn page_cursor_up(cx: &mut Context) { + let view = view!(cx.editor); + let offset = view.inner_height(); + scroll_page_and_cursor(cx, offset, Direction::Backward); +} + +fn page_cursor_down(cx: &mut Context) { + let view = view!(cx.editor); + let offset = view.inner_height(); + scroll_page_and_cursor(cx, offset, Direction::Forward); +} + +fn page_cursor_half_up(cx: &mut Context) { + let view = view!(cx.editor); + let offset = view.inner_height() / 2; + scroll_page_and_cursor(cx, offset, Direction::Backward); +} + +fn page_cursor_half_down(cx: &mut Context) { + let view = view!(cx.editor); + let offset = view.inner_height() / 2; + scroll_page_and_cursor(cx, offset, Direction::Forward); +} + #[allow(deprecated)] // currently uses the deprecated `visual_coords_at_pos`/`pos_at_visual_coords` functions // as this function ignores softwrapping (and virtual text) and instead only cares