From ebccc96cd42d552db7df13249d71177fc016f0f1 Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Sun, 4 Jul 2021 18:07:58 +0900 Subject: Factor out goto t/m/b into a single function again --- helix-term/src/commands.rs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'helix-term/src') diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index c345f3ba..d8892c9c 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 pos = doc.text().line_to_char(line); - doc.set_selection(view.id, Selection::point(pos)); -} + let last_line = view.last_line(doc); -fn goto_window_middle(cx: &mut Context) { - let (view, doc) = current!(cx.editor); + 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 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)); } -fn goto_window_bottom(cx: &mut Context) { - let (view, doc) = current!(cx.editor); +fn goto_window_top(cx: &mut Context) { + goto_window(cx, Align::Top) +} - 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); +fn goto_window_middle(cx: &mut Context) { + goto_window(cx, Align::Center) +} - doc.set_selection(view.id, Selection::point(pos)); +fn goto_window_bottom(cx: &mut Context) { + 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, -- cgit v1.2.3-70-g09d2