Enabled traversing multiple buffers at once (#10463)

* Enable traversing multiple buffers at once

* run cargo fmt

* simplify iterator call
pull/10484/head
Matthew Bourke 7 months ago committed by GitHub
parent 8256ca7bc3
commit 8e161723ee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -799,28 +799,29 @@ fn goto_line_start(cx: &mut Context) {
} }
fn goto_next_buffer(cx: &mut Context) { fn goto_next_buffer(cx: &mut Context) {
goto_buffer(cx.editor, Direction::Forward); goto_buffer(cx.editor, Direction::Forward, cx.count());
} }
fn goto_previous_buffer(cx: &mut Context) { fn goto_previous_buffer(cx: &mut Context) {
goto_buffer(cx.editor, Direction::Backward); goto_buffer(cx.editor, Direction::Backward, cx.count());
} }
fn goto_buffer(editor: &mut Editor, direction: Direction) { fn goto_buffer(editor: &mut Editor, direction: Direction, count: usize) {
let current = view!(editor).doc; let current = view!(editor).doc;
let id = match direction { let id = match direction {
Direction::Forward => { Direction::Forward => {
let iter = editor.documents.keys(); let iter = editor.documents.keys();
let mut iter = iter.skip_while(|id| *id != &current); // skip 'count' times past current buffer
iter.next(); // skip current item iter.cycle().skip_while(|id| *id != &current).nth(count)
iter.next().or_else(|| editor.documents.keys().next())
} }
Direction::Backward => { Direction::Backward => {
let iter = editor.documents.keys(); let iter = editor.documents.keys();
let mut iter = iter.rev().skip_while(|id| *id != &current); // skip 'count' times past current buffer
iter.next(); // skip current item iter.rev()
iter.next().or_else(|| editor.documents.keys().next_back()) .cycle()
.skip_while(|id| *id != &current)
.nth(count)
} }
} }
.unwrap(); .unwrap();

@ -309,7 +309,7 @@ fn buffer_next(
return Ok(()); return Ok(());
} }
goto_buffer(cx.editor, Direction::Forward); goto_buffer(cx.editor, Direction::Forward, 1);
Ok(()) Ok(())
} }
@ -322,7 +322,7 @@ fn buffer_previous(
return Ok(()); return Ok(());
} }
goto_buffer(cx.editor, Direction::Backward); goto_buffer(cx.editor, Direction::Backward, 1);
Ok(()) Ok(())
} }

Loading…
Cancel
Save