aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenzo Bellina2023-09-04 03:39:48 +0000
committerGitHub2023-09-04 03:39:48 +0000
commite8fc77fe98a79473faacba544acae9e52b36903f (patch)
tree8861b0289ed8eb773651e17b82368233451d4dbc
parentbb3e6998e641f25f3f73d0805522b451c18ac633 (diff)
Maintain the current cursor's position and view in the vsplit/hsplit commands too (#8109)
Co-authored-by: Benjamin Bouvier <public@benj.me>
-rw-r--r--helix-term/src/commands.rs16
-rw-r--r--helix-term/src/commands/typed.rs8
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