Add typed commands buffer-next and buffer-previous (#1940)
This commit is contained in:
parent
ec21de0844
commit
9782204f73
3 changed files with 43 additions and 10 deletions
|
@ -9,6 +9,8 @@
|
||||||
| `:buffer-close-others!`, `:bco!`, `:bcloseother!` | Close all buffers but the currently focused one. |
|
| `:buffer-close-others!`, `:bco!`, `:bcloseother!` | Close all buffers but the currently focused one. |
|
||||||
| `:buffer-close-all`, `:bca`, `:bcloseall` | Close all buffers, without quiting. |
|
| `:buffer-close-all`, `:bca`, `:bcloseall` | Close all buffers, without quiting. |
|
||||||
| `:buffer-close-all!`, `:bca!`, `:bcloseall!` | Close all buffers forcefully (ignoring unsaved changes), without quiting. |
|
| `:buffer-close-all!`, `:bca!`, `:bcloseall!` | Close all buffers forcefully (ignoring unsaved changes), without quiting. |
|
||||||
|
| `:buffer-next`, `:bn`, `:bnext` | Go to next buffer. |
|
||||||
|
| `:buffer-previous`, `:bp`, `:bprev` | Go to previous buffer. |
|
||||||
| `:write`, `:w` | Write changes to disk. Accepts an optional path (:write some/path.txt) |
|
| `:write`, `:w` | Write changes to disk. Accepts an optional path (:write some/path.txt) |
|
||||||
| `:new`, `:n` | Create a new scratch buffer. |
|
| `:new`, `:n` | Create a new scratch buffer. |
|
||||||
| `:format`, `:fmt` | Format the file using the LSP formatter. |
|
| `:format`, `:fmt` | Format the file using the LSP formatter. |
|
||||||
|
|
|
@ -637,36 +637,35 @@ fn goto_line_start(cx: &mut Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goto_next_buffer(cx: &mut Context) {
|
fn goto_next_buffer(cx: &mut Context) {
|
||||||
goto_buffer(cx, Direction::Forward);
|
goto_buffer(cx.editor, Direction::Forward);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goto_previous_buffer(cx: &mut Context) {
|
fn goto_previous_buffer(cx: &mut Context) {
|
||||||
goto_buffer(cx, Direction::Backward);
|
goto_buffer(cx.editor, Direction::Backward);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn goto_buffer(cx: &mut Context, direction: Direction) {
|
fn goto_buffer(editor: &mut Editor, direction: Direction) {
|
||||||
let current = view!(cx.editor).doc;
|
let current = view!(editor).doc;
|
||||||
|
|
||||||
let id = match direction {
|
let id = match direction {
|
||||||
Direction::Forward => {
|
Direction::Forward => {
|
||||||
let iter = cx.editor.documents.keys();
|
let iter = editor.documents.keys();
|
||||||
let mut iter = iter.skip_while(|id| *id != ¤t);
|
let mut iter = iter.skip_while(|id| *id != ¤t);
|
||||||
iter.next(); // skip current item
|
iter.next(); // skip current item
|
||||||
iter.next().or_else(|| cx.editor.documents.keys().next())
|
iter.next().or_else(|| editor.documents.keys().next())
|
||||||
}
|
}
|
||||||
Direction::Backward => {
|
Direction::Backward => {
|
||||||
let iter = cx.editor.documents.keys();
|
let iter = editor.documents.keys();
|
||||||
let mut iter = iter.rev().skip_while(|id| *id != ¤t);
|
let mut iter = iter.rev().skip_while(|id| *id != ¤t);
|
||||||
iter.next(); // skip current item
|
iter.next(); // skip current item
|
||||||
iter.next()
|
iter.next().or_else(|| editor.documents.keys().rev().next())
|
||||||
.or_else(|| cx.editor.documents.keys().rev().next())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let id = *id;
|
let id = *id;
|
||||||
|
|
||||||
cx.editor.switch(id, Action::Replace);
|
editor.switch(id, Action::Replace);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extend_to_line_start(cx: &mut Context) {
|
fn extend_to_line_start(cx: &mut Context) {
|
||||||
|
|
|
@ -172,6 +172,24 @@ fn force_buffer_close_all(
|
||||||
buffer_close_by_ids_impl(cx.editor, &document_ids, true)
|
buffer_close_by_ids_impl(cx.editor, &document_ids, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn buffer_next(
|
||||||
|
cx: &mut compositor::Context,
|
||||||
|
_args: &[Cow<str>],
|
||||||
|
_event: PromptEvent,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
|
goto_buffer(cx.editor, Direction::Forward);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn buffer_previous(
|
||||||
|
cx: &mut compositor::Context,
|
||||||
|
_args: &[Cow<str>],
|
||||||
|
_event: PromptEvent,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
|
goto_buffer(cx.editor, Direction::Backward);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn write_impl(cx: &mut compositor::Context, path: Option<&Cow<str>>) -> anyhow::Result<()> {
|
fn write_impl(cx: &mut compositor::Context, path: Option<&Cow<str>>) -> anyhow::Result<()> {
|
||||||
let jobs = &mut cx.jobs;
|
let jobs = &mut cx.jobs;
|
||||||
let doc = doc_mut!(cx.editor);
|
let doc = doc_mut!(cx.editor);
|
||||||
|
@ -1082,6 +1100,20 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
fun: force_buffer_close_all,
|
fun: force_buffer_close_all,
|
||||||
completer: None,
|
completer: None,
|
||||||
},
|
},
|
||||||
|
TypableCommand {
|
||||||
|
name: "buffer-next",
|
||||||
|
aliases: &["bn", "bnext"],
|
||||||
|
doc: "Go to next buffer.",
|
||||||
|
fun: buffer_next,
|
||||||
|
completer: None,
|
||||||
|
},
|
||||||
|
TypableCommand {
|
||||||
|
name: "buffer-previous",
|
||||||
|
aliases: &["bp", "bprev"],
|
||||||
|
doc: "Go to previous buffer.",
|
||||||
|
fun: buffer_previous,
|
||||||
|
completer: None,
|
||||||
|
},
|
||||||
TypableCommand {
|
TypableCommand {
|
||||||
name: "write",
|
name: "write",
|
||||||
aliases: &["w"],
|
aliases: &["w"],
|
||||||
|
|
Loading…
Add table
Reference in a new issue