mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 17:36:19 +04:00
Enabled traversing multiple buffers at once (#10463)
* Enable traversing multiple buffers at once * run cargo fmt * simplify iterator call
This commit is contained in:
parent
8256ca7bc3
commit
8e161723ee
@ -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 != ¤t);
|
||||
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 != ¤t).nth(count)
|
||||
}
|
||||
Direction::Backward => {
|
||||
let iter = editor.documents.keys();
|
||||
let mut iter = iter.rev().skip_while(|id| *id != ¤t);
|
||||
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 != ¤t)
|
||||
.nth(count)
|
||||
}
|
||||
}
|
||||
.unwrap();
|
||||
|
@ -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(())
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user