on master help sign in
Fix jumplist jumps, keep the selection on vsplit.
ed827e9Blaž Hrastnik
helix-term/src/commands.rs+13−2
@@ -2167,6 +2167,7 @@ pub fn jump_forward(cx: &mut Context) {
2167 if let Some((id, selection)) = view.jumps.forward(count) {
2167 if let Some((id, selection)) = view.jumps.forward(count) {
2168 view.doc = *id;
2168 view.doc = *id;
2169 let selection = selection.clone();
2169 let selection = selection.clone();
2170+ let (view, doc) = cx.current(); // refetch doc
2170 doc.set_selection(view.id, selection);
2171 doc.set_selection(view.id, selection);
2171
2172
2172 align_view(doc, view, Align::Center);
2173 align_view(doc, view, Align::Center);
@@ -2179,7 +2180,9 @@ pub fn jump_backward(cx: &mut Context) {
2179
2180
2180 if let Some((id, selection)) = view.jumps.backward(count) {
2181 if let Some((id, selection)) = view.jumps.backward(count) {
2181 view.doc = *id;
2182 view.doc = *id;
2183+ let selection = selection.clone();
2184+ let (view, doc) = cx.current(); // refetch doc
2182− doc.set_selection(view.id, selection.clone());
2185+ doc.set_selection(view.id, selection);
2183
2186
2184 align_view(doc, view, Align::Center);
2187 align_view(doc, view, Align::Center);
2185 };
2188 };
@@ -2189,9 +2192,17 @@ pub fn jump_backward(cx: &mut Context) {
2189
2192
2190pub fn vsplit(cx: &mut Context) {
2193pub fn vsplit(cx: &mut Context) {
2191 use helix_view::editor::Action;
2194 use helix_view::editor::Action;
2192− let id = cx.doc().id();
2195+ let (view, doc) = cx.current();
2196+ let id = doc.id();
2197+ let selection = doc.selection(view.id).clone();
2198+ let first_line = view.first_line;
2193
2199
2194 cx.editor.switch(id, Action::VerticalSplit);
2200 cx.editor.switch(id, Action::VerticalSplit);
2201+
2202+ // match the selection in the previous view
2203+ let (view, doc) = cx.current();
2204+ view.first_line = first_line;
2205+ doc.set_selection(view.id, selection);
2195}
2206}
2196
2207
2197pub fn space_mode(cx: &mut Context) {
2208pub fn space_mode(cx: &mut Context) {