diff options
author | Blaž Hrastnik | 2021-07-04 09:07:58 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-07-04 09:07:58 +0000 |
commit | ebccc96cd42d552db7df13249d71177fc016f0f1 (patch) | |
tree | 29b0e5b1aedb0e80d3e31010970c0043d15d9c20 | |
parent | 6ce303977c4564704ca880353e16c995c7686bff (diff) |
Factor out goto t/m/b into a single function again
-rw-r--r-- | helix-term/src/commands.rs | 34 |
1 files changed, 17 insertions, 17 deletions
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, |