diff options
author | Gokul Soumya | 2021-07-28 07:55:34 +0000 |
---|---|---|
committer | Ivan Tham | 2021-07-28 13:33:18 +0000 |
commit | b90450b9e8b995e96a723a5d8c7b179ad2967c5a (patch) | |
tree | 5f865bc8206c6cc662d4e494b0fc4cbd335f6c6f /helix-term/src/commands.rs | |
parent | 013bec407cc686a2cf29e3b8dfb579e585c27e6e (diff) |
Fix goto line number
Regression from #454. Go to line 10 with `10gg` or `10G`.
Diffstat (limited to 'helix-term/src/commands.rs')
-rw-r--r-- | helix-term/src/commands.rs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index baac8f00..42794d96 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -228,13 +228,14 @@ impl Command { goto_definition, "Goto definition", goto_type_definition, "Goto type definition", goto_implementation, "Goto implementation", - goto_file_start, "Goto file start", + goto_file_start, "Goto file start/line", goto_file_end, "Goto file end", goto_reference, "Goto references", goto_window_top, "Goto window top", goto_window_middle, "Goto window middle", goto_window_bottom, "Goto window bottom", goto_last_accessed_file, "Goto last accessed file", + goto_line, "Goto line", goto_first_diag, "Goto first diagnostic", goto_last_diag, "Goto last diagnostic", goto_next_diag, "Goto next diagnostic", @@ -566,9 +567,13 @@ fn move_next_long_word_end(cx: &mut Context) { } fn goto_file_start(cx: &mut Context) { - push_jump(cx.editor); - let (view, doc) = current!(cx.editor); - doc.set_selection(view.id, Selection::point(0)); + if cx.count.is_some() { + goto_line(cx); + } else { + push_jump(cx.editor); + let (view, doc) = current!(cx.editor); + doc.set_selection(view.id, Selection::point(0)); + } } fn goto_file_end(cx: &mut Context) { @@ -2387,6 +2392,17 @@ fn push_jump(editor: &mut Editor) { view.jumps.push(jump); } +fn goto_line(cx: &mut Context) { + if let Some(count) = cx.count { + push_jump(cx.editor); + + let (view, doc) = current!(cx.editor); + let line_idx = std::cmp::min(count.get() - 1, doc.text().len_lines().saturating_sub(2)); + let pos = doc.text().line_to_char(line_idx); + doc.set_selection(view.id, Selection::point(pos)); + } +} + fn goto_last_accessed_file(cx: &mut Context) { let alternate_file = view!(cx.editor).last_accessed_doc; if let Some(alt) = alternate_file { |