From ebccc96cd42d552db7df13249d71177fc016f0f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Sun, 4 Jul 2021 18:07:58 +0900 Subject: [PATCH] Factor out goto t/m/b into a single function again --- helix-term/src/commands.rs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index c345f3ba6..d8892c9c1 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -441,35 +441,35 @@ fn goto_first_nonwhitespace(cx: &mut Context) { doc.set_selection(view.id, selection); } -fn goto_window_top(cx: &mut Context) { +fn goto_window(cx: &mut Context, align: Align) { let (view, doc) = current!(cx.editor); let scrolloff = PADDING.min(view.area.height as usize / 2); // TODO: user pref - let line = (view.first_line + scrolloff).min(view.last_line(doc).saturating_sub(scrolloff)); + + let last_line = view.last_line(doc); + + let line = match align { + Align::Top => (view.first_line + scrolloff), + Align::Center => (view.first_line + (view.area.height as usize / 2)), + Align::Bottom => last_line.saturating_sub(scrolloff), + } + .min(last_line.saturating_sub(scrolloff)); + let pos = doc.text().line_to_char(line); doc.set_selection(view.id, Selection::point(pos)); } +fn goto_window_top(cx: &mut Context) { + goto_window(cx, Align::Top) +} + fn goto_window_middle(cx: &mut Context) { - let (view, doc) = current!(cx.editor); - - let scrolloff = PADDING.min(view.area.height as usize / 2); // TODO: user pref - let line = view.first_line + (view.area.height as usize / 2); - let line = line.min(view.last_line(doc).saturating_sub(scrolloff)); - let pos = doc.text().line_to_char(line); - - doc.set_selection(view.id, Selection::point(pos)); + goto_window(cx, Align::Center) } fn goto_window_bottom(cx: &mut Context) { - let (view, doc) = current!(cx.editor); - - let scrolloff = PADDING.min(view.area.height as usize / 2); // TODO: user pref - let line = view.last_line(doc).saturating_sub(scrolloff); - let pos = doc.text().line_to_char(line); - - doc.set_selection(view.id, Selection::point(pos)); + goto_window(cx, Align::Bottom) } // TODO: move vs extend could take an extra type Extend/Move that would @@ -3722,7 +3722,7 @@ mode_info! { "i" => goto_implementation, /// window top "t" => goto_window_top, - /// window center + /// window middle "m" => goto_window_middle, /// window bottom "b" => goto_window_bottom,