mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 01:16:18 +04:00
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>
This commit is contained in:
parent
2f53644c6d
commit
19b7864062
@ -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);
|
||||
}
|
||||
|
||||
|
@ -874,7 +874,12 @@ pub fn switch(&mut self, id: DocumentId, action: Action) {
|
||||
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 {
|
||||
|
@ -271,12 +271,16 @@ pub fn views_mut(&mut self) -> impl Iterator<Item = (&mut View, bool)> {
|
||||
}
|
||||
|
||||
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,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,6 +64,7 @@ pub fn get(&self) -> &[Jump] {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct View {
|
||||
pub id: ViewId,
|
||||
pub offset: Position,
|
||||
|
Loading…
Reference in New Issue
Block a user