aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-07-04 09:07:58 +0000
committerBlaž Hrastnik2021-07-04 09:07:58 +0000
commitebccc96cd42d552db7df13249d71177fc016f0f1 (patch)
tree29b0e5b1aedb0e80d3e31010970c0043d15d9c20 /helix-term
parent6ce303977c4564704ca880353e16c995c7686bff (diff)
Factor out goto t/m/b into a single function again
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands.rs34
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,