mirror of
https://github.com/helix-editor/helix.git
synced 2025-01-19 13:37:06 +04:00
Implement "Goto next buffer / Goto previous buffer" commands
This commit is contained in:
parent
e2560f427e
commit
78c68fae91
@ -161,6 +161,8 @@ #### Goto mode
|
|||||||
| `r` | Go to references | `goto_reference` |
|
| `r` | Go to references | `goto_reference` |
|
||||||
| `i` | Go to implementation | `goto_implementation` |
|
| `i` | Go to implementation | `goto_implementation` |
|
||||||
| `a` | Go to the last accessed/alternate file | `goto_last_accessed_file` |
|
| `a` | Go to the last accessed/alternate file | `goto_last_accessed_file` |
|
||||||
|
| `n` | Go to next buffer | `goto_next_buffer` |
|
||||||
|
| `p` | Go to previous buffer | `goto_previous_buffer` |
|
||||||
|
|
||||||
#### Match mode
|
#### Match mode
|
||||||
|
|
||||||
|
@ -262,6 +262,8 @@ pub fn doc(&self) -> &'static str {
|
|||||||
goto_prev_diag, "Goto previous diagnostic",
|
goto_prev_diag, "Goto previous diagnostic",
|
||||||
goto_line_start, "Goto line start",
|
goto_line_start, "Goto line start",
|
||||||
goto_line_end, "Goto line end",
|
goto_line_end, "Goto line end",
|
||||||
|
goto_next_buffer, "Goto next buffer",
|
||||||
|
goto_previous_buffer, "Goto previous buffer",
|
||||||
// TODO: different description ?
|
// TODO: different description ?
|
||||||
goto_line_end_newline, "Goto line end",
|
goto_line_end_newline, "Goto line end",
|
||||||
goto_first_nonwhitespace, "Goto first non-blank in line",
|
goto_first_nonwhitespace, "Goto first non-blank in line",
|
||||||
@ -519,6 +521,33 @@ fn goto_line_start(cx: &mut Context) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn goto_next_buffer(cx: &mut Context) {
|
||||||
|
goto_buffer(cx, Direction::Forward);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn goto_previous_buffer(cx: &mut Context) {
|
||||||
|
goto_buffer(cx, Direction::Backward);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn goto_buffer(cx: &mut Context, direction: Direction) {
|
||||||
|
let buf_cur = current!(cx.editor).1.id();
|
||||||
|
|
||||||
|
if let Some(pos) = cx.editor.documents.iter().position(|(id, _)| id == buf_cur) {
|
||||||
|
let goto_id = if direction == Direction::Forward {
|
||||||
|
if pos < cx.editor.documents.iter().count() - 1 {
|
||||||
|
cx.editor.documents.iter().nth(pos + 1).unwrap().0
|
||||||
|
} else {
|
||||||
|
cx.editor.documents.iter().next().unwrap().0
|
||||||
|
}
|
||||||
|
} else if pos > 0 {
|
||||||
|
cx.editor.documents.iter().nth(pos - 1).unwrap().0
|
||||||
|
} else {
|
||||||
|
cx.editor.documents.iter().last().unwrap().0
|
||||||
|
};
|
||||||
|
cx.editor.switch(goto_id, Action::Replace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn extend_to_line_start(cx: &mut Context) {
|
fn extend_to_line_start(cx: &mut Context) {
|
||||||
let (view, doc) = current!(cx.editor);
|
let (view, doc) = current!(cx.editor);
|
||||||
goto_line_start_impl(view, doc, Movement::Extend)
|
goto_line_start_impl(view, doc, Movement::Extend)
|
||||||
|
@ -453,6 +453,8 @@ fn default() -> Keymaps {
|
|||||||
"m" => goto_window_middle,
|
"m" => goto_window_middle,
|
||||||
"b" => goto_window_bottom,
|
"b" => goto_window_bottom,
|
||||||
"a" => goto_last_accessed_file,
|
"a" => goto_last_accessed_file,
|
||||||
|
"n" => goto_next_buffer,
|
||||||
|
"p" => goto_previous_buffer,
|
||||||
},
|
},
|
||||||
":" => command_mode,
|
":" => command_mode,
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user