summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin2022-07-22 01:23:00 +0000
committerGitHub2022-07-22 01:23:00 +0000
commit19b7864062462e56545cfcca8402659573524f60 (patch)
tree27f799efac383ad2e20d845b2dce1825aa34c0b2
parent2f53644c6d7d70b680a5d734c8732e5f367aacf3 (diff)
keep jump/file history when using :split (#3031)
* keep jump/file history when using :split * move history cloning into the switch function Co-authored-by: Robin <robinvandijk@klippa.com>
-rw-r--r--helix-term/src/commands.rs2
-rw-r--r--helix-view/src/editor.rs7
-rw-r--r--helix-view/src/tree.rs8
-rw-r--r--helix-view/src/view.rs1
4 files changed, 13 insertions, 5 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 12d988d0..6fdc215a 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -4083,13 +4083,11 @@ fn split(cx: &mut Context, action: Action) {
let (view, doc) = current!(cx.editor);
let id = doc.id();
let selection = doc.selection(view.id).clone();
- let offset = view.offset;
cx.editor.switch(id, action);
// match the selection in the previous view
let (view, doc) = current!(cx.editor);
- view.offset = offset;
doc.set_selection(view.id, selection);
}
diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs
index 7ac52f50..6cd4515c 100644
--- a/helix-view/src/editor.rs
+++ b/helix-view/src/editor.rs
@@ -874,7 +874,12 @@ impl Editor {
return;
}
Action::HorizontalSplit | Action::VerticalSplit => {
- let view = View::new(id, self.config().gutters.clone());
+ // copy the current view, unless there is no view yet
+ let view = self
+ .tree
+ .try_get(self.tree.focus)
+ .cloned()
+ .unwrap_or_else(|| View::new(id, self.config().gutters.clone()));
let view_id = self.tree.split(
view,
match action {
diff --git a/helix-view/src/tree.rs b/helix-view/src/tree.rs
index 3ba85b56..c4474c33 100644
--- a/helix-view/src/tree.rs
+++ b/helix-view/src/tree.rs
@@ -271,12 +271,16 @@ impl Tree {
}
pub fn get(&self, index: ViewId) -> &View {
+ self.try_get(index).unwrap()
+ }
+
+ pub fn try_get(&self, index: ViewId) -> Option<&View> {
match &self.nodes[index] {
Node {
content: Content::View(view),
..
- } => view,
- _ => unreachable!(),
+ } => Some(view),
+ _ => None,
}
}
diff --git a/helix-view/src/view.rs b/helix-view/src/view.rs
index e74e0f65..e7fc16ab 100644
--- a/helix-view/src/view.rs
+++ b/helix-view/src/view.rs
@@ -64,6 +64,7 @@ impl JumpList {
}
}
+#[derive(Clone)]
pub struct View {
pub id: ViewId,
pub offset: Position,