Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/commands.rs')
-rw-r--r--helix-term/src/commands.rs19
1 files changed, 10 insertions, 9 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 6cda93dc..8f7675bc 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -799,28 +799,29 @@ fn goto_line_start(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) {
- 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 id = match direction {
Direction::Forward => {
let iter = editor.documents.keys();
- let mut iter = iter.skip_while(|id| *id != &current);
- iter.next(); // skip current item
- iter.next().or_else(|| editor.documents.keys().next())
+ // skip 'count' times past current buffer
+ iter.cycle().skip_while(|id| *id != &current).nth(count)
}
Direction::Backward => {
let iter = editor.documents.keys();
- let mut iter = iter.rev().skip_while(|id| *id != &current);
- iter.next(); // skip current item
- iter.next().or_else(|| editor.documents.keys().next_back())
+ // skip 'count' times past current buffer
+ iter.rev()
+ .cycle()
+ .skip_while(|id| *id != &current)
+ .nth(count)
}
}
.unwrap();