diff options
author | Lorenzo Bellina | 2023-09-04 03:39:48 +0000 |
---|---|---|
committer | GitHub | 2023-09-04 03:39:48 +0000 |
commit | e8fc77fe98a79473faacba544acae9e52b36903f (patch) | |
tree | 8861b0289ed8eb773651e17b82368233451d4dbc /helix-term | |
parent | bb3e6998e641f25f3f73d0805522b451c18ac633 (diff) |
Maintain the current cursor's position and view in the vsplit/hsplit commands too (#8109)
Co-authored-by: Benjamin Bouvier <public@benj.me>
Diffstat (limited to 'helix-term')
-rw-r--r-- | helix-term/src/commands.rs | 16 | ||||
-rw-r--r-- | helix-term/src/commands/typed.rs | 8 |
2 files changed, 11 insertions, 13 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 6e3fb939..0fd011cc 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -4886,17 +4886,19 @@ fn transpose_view(cx: &mut Context) { cx.editor.transpose_view() } -// split helper, clear it later -fn split(cx: &mut Context, action: Action) { - let (view, doc) = current!(cx.editor); +/// Open a new split in the given direction specified by the action. +/// +/// Maintain the current view (both the cursor's position and view in document). +fn split(editor: &mut Editor, action: Action) { + let (view, doc) = current!(editor); let id = doc.id(); let selection = doc.selection(view.id).clone(); let offset = view.offset; - cx.editor.switch(id, action); + editor.switch(id, action); // match the selection in the previous view - let (view, doc) = current!(cx.editor); + let (view, doc) = current!(editor); doc.set_selection(view.id, selection); // match the view scroll offset (switch doesn't handle this fully // since the selection is only matched after the split) @@ -4904,7 +4906,7 @@ fn split(cx: &mut Context, action: Action) { } fn hsplit(cx: &mut Context) { - split(cx, Action::HorizontalSplit); + split(cx.editor, Action::HorizontalSplit); } fn hsplit_new(cx: &mut Context) { @@ -4912,7 +4914,7 @@ fn hsplit_new(cx: &mut Context) { } fn vsplit(cx: &mut Context) { - split(cx, Action::VerticalSplit); + split(cx.editor, Action::VerticalSplit); } fn vsplit_new(cx: &mut Context) { diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index 0e1d9431..e38853c0 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1536,10 +1536,8 @@ fn vsplit( return Ok(()); } - let id = view!(cx.editor).doc; - if args.is_empty() { - cx.editor.switch(id, Action::VerticalSplit); + split(cx.editor, Action::VerticalSplit); } else { for arg in args { cx.editor @@ -1559,10 +1557,8 @@ fn hsplit( return Ok(()); } - let id = view!(cx.editor).doc; - if args.is_empty() { - cx.editor.switch(id, Action::HorizontalSplit); + split(cx.editor, Action::HorizontalSplit); } else { for arg in args { cx.editor |