Unnamed repository; edit this file 'description' to name the repository.
Enabled traversing multiple buffers at once (#10463)
* Enable traversing multiple buffers at once * run cargo fmt * simplify iterator call
Matthew Bourke 2024-04-16
parent 8256ca7 · commit 8e16172
-rw-r--r--helix-term/src/commands.rs19
-rw-r--r--helix-term/src/commands/typed.rs4
2 files changed, 12 insertions, 11 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();
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index 5d7057da..acbd8a8c 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -309,7 +309,7 @@ fn buffer_next(
return Ok(());
}
- goto_buffer(cx.editor, Direction::Forward);
+ goto_buffer(cx.editor, Direction::Forward, 1);
Ok(())
}
@@ -322,7 +322,7 @@ fn buffer_previous(
return Ok(());
}
- goto_buffer(cx.editor, Direction::Backward);
+ goto_buffer(cx.editor, Direction::Backward, 1);
Ok(())
}