@@ -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