on master help sign in
Fix jump behavior, goto_implementation now jump

Better jump behavior since we override the first jump if it's on the first document. At the same time, ctrl-i is now working with gd jumps.

commit6b3c9d8ed37fd36f8be8c217ec2c71fb73de63e7 authorIvan Tham <pickfire@riseup.net> dateWed 9 Jun 2021, 00:40 (5 years ago) parent4dbc23f
3 files changed+20−10
helix-term/src/commands.rs+2−2 helix-term/src/keymap.rs+4−1 helix-view/src/view.rs+14−7
helix-term/src/commands.rs+2−2
@@ -1308,7 +1308,7 @@ pub fn normal_mode(cx: &mut Context) {
13081308// Store a jump on the jumplist.
13091309fn push_jump(editor: &mut Editor) {
13101310 let (view, doc) = editor.current();
1311− let jump = { (doc.id(), doc.selection(view.id).clone()) };
1311+ let jump = (doc.id(), doc.selection(view.id).clone());
13121312 view.jumps.push(jump);
13131313}
13141314
@@ -2446,7 +2446,7 @@ pub fn jump_backward(cx: &mut Context) {
24462446 let count = cx.count();
24472447 let (view, doc) = cx.current();
24482448
2449− if let Some((id, selection)) = view.jumps.backward(count) {
2449+ if let Some((id, selection)) = view.jumps.backward(view.id, doc, count) {
24502450 view.doc = *id;
24512451 let selection = selection.clone();
24522452 let (view, doc) = cx.current(); // refetch doc
helix-term/src/keymap.rs+4−1
@@ -280,7 +280,10 @@ pub fn default() -> Keymaps {
280280
281281 // z family for save/restore/combine from/to sels from register
282282
283− ctrl!('i') => commands::jump_forward, // TODO: ctrl-i conflicts tab
283+ KeyEvent { // supposedly ctrl!('i') but did not work
284+ code: KeyCode::Tab,
285+ modifiers: KeyModifiers::NONE,
286+ } => commands::jump_forward,
284287 ctrl!('o') => commands::jump_backward,
285288 // ctrl!('s') => commands::save_selection,
286289
helix-view/src/view.rs+14−7
@@ -37,17 +37,24 @@ impl JumpList {
3737 pub fn forward(&mut self, count: usize) -> Option<&Jump> {
3838 if self.current + count < self.jumps.len() {
3939 self.current += count;
40− return self.jumps.get(self.current);
40+ self.jumps.get(self.current)
41+ } else {
42+ None
4143 }
42− None
4344 }
4445
45− pub fn backward(&mut self, count: usize) -> Option<&Jump> {
46− if self.current.checked_sub(count).is_some() {
47− self.current -= count;
48− return self.jumps.get(self.current);
46+ // Taking view and doc to prevent unnecessary cloning when jump is not required.
47+ pub fn backward(&mut self, view_id: ViewId, doc: &mut Document, count: usize) -> Option<&Jump> {
48+ if let Some(current) = self.current.checked_sub(count) {
49+ if self.current == self.jumps.len() {
50+ let jump = (doc.id(), doc.selection(view_id).clone());
51+ self.push(jump);
52+ }
53+ self.current = current;
54+ self.jumps.get(self.current)
55+ } else {
56+ None
4957 }
50− None
5158 }
5259}
5360