mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
feat: add buffer-close-hidden commands
This commit is contained in:
parent
574f821308
commit
2bb5319922
@ -9,6 +9,8 @@
|
||||
| `:buffer-close-others!`, `:bco!`, `:bcloseother!` | Force close all buffers but the currently focused one. |
|
||||
| `:buffer-close-all`, `:bca`, `:bcloseall` | Close all buffers without quitting. |
|
||||
| `:buffer-close-all!`, `:bca!`, `:bcloseall!` | Force close all buffers ignoring unsaved changes without quitting. |
|
||||
| `:buffer-close-hidden`, `:bch`, `:bclosehidden` | Close all buffers that are not visible. |
|
||||
| `:buffer-close-hidden!`, `:bch!`, `:bclosehidden!` | Force close all buffers that are not visible ignoring unsaved changes. |
|
||||
| `:buffer-next`, `:bn`, `:bnext` | Goto next buffer. |
|
||||
| `:buffer-previous`, `:bp`, `:bprev` | Goto previous buffer. |
|
||||
| `:write`, `:w` | Write changes to disk. Accepts an optional path (:write some/path.txt) |
|
||||
|
@ -136,15 +136,18 @@ fn open(cx: &mut compositor::Context, args: &[Cow<str>], event: PromptEvent) ->
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn buffer_close_by_ids_impl(
|
||||
fn buffer_close_by_ids_impl<'a, T>(
|
||||
cx: &mut compositor::Context,
|
||||
doc_ids: &[DocumentId],
|
||||
doc_ids: T,
|
||||
force: bool,
|
||||
) -> anyhow::Result<()> {
|
||||
) -> anyhow::Result<()>
|
||||
where
|
||||
T: IntoIterator<Item = &'a DocumentId>,
|
||||
{
|
||||
cx.block_try_flush_writes()?;
|
||||
|
||||
let (modified_ids, modified_names): (Vec<_>, Vec<_>) = doc_ids
|
||||
.iter()
|
||||
.into_iter()
|
||||
.filter_map(|&doc_id| {
|
||||
if let Err(CloseError::BufferModified(name)) = cx.editor.close_document(doc_id, force) {
|
||||
Some((doc_id, name))
|
||||
@ -299,6 +302,46 @@ fn force_buffer_close_all(
|
||||
buffer_close_by_ids_impl(cx, &document_ids, true)
|
||||
}
|
||||
|
||||
fn buffer_close_hidden(
|
||||
cx: &mut compositor::Context,
|
||||
_args: &[Cow<str>],
|
||||
event: PromptEvent,
|
||||
) -> anyhow::Result<()> {
|
||||
if event != PromptEvent::Validate {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let mut visible_doc_ids = cx
|
||||
.editor
|
||||
.documents()
|
||||
.map(|doc| doc.id())
|
||||
.collect::<HashSet<_>>();
|
||||
for view in cx.editor.tree.views() {
|
||||
visible_doc_ids.remove(&view.0.doc);
|
||||
}
|
||||
buffer_close_by_ids_impl(cx, &visible_doc_ids, false)
|
||||
}
|
||||
|
||||
fn force_buffer_close_hidden(
|
||||
cx: &mut compositor::Context,
|
||||
_args: &[Cow<str>],
|
||||
event: PromptEvent,
|
||||
) -> anyhow::Result<()> {
|
||||
if event != PromptEvent::Validate {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let mut visible_doc_ids = cx
|
||||
.editor
|
||||
.documents()
|
||||
.map(|doc| doc.id())
|
||||
.collect::<HashSet<_>>();
|
||||
for view in cx.editor.tree.views() {
|
||||
visible_doc_ids.remove(&view.0.doc);
|
||||
}
|
||||
buffer_close_by_ids_impl(cx, &visible_doc_ids, true)
|
||||
}
|
||||
|
||||
fn buffer_next(
|
||||
cx: &mut compositor::Context,
|
||||
_args: &[Cow<str>],
|
||||
@ -2472,6 +2515,20 @@ fn redraw(
|
||||
fun: force_buffer_close_all,
|
||||
signature: CommandSignature::none(),
|
||||
},
|
||||
TypableCommand {
|
||||
name: "buffer-close-hidden",
|
||||
aliases: &["bch", "bclosehidden"],
|
||||
doc: "Close all buffers that are not visible.",
|
||||
fun: buffer_close_hidden,
|
||||
signature: CommandSignature::none(),
|
||||
},
|
||||
TypableCommand {
|
||||
name: "buffer-close-hidden!",
|
||||
aliases: &["bch!", "bclosehidden!"],
|
||||
doc: "Force close all buffers that are not visible ignoring unsaved changes.",
|
||||
fun: force_buffer_close_hidden,
|
||||
signature: CommandSignature::none(),
|
||||
},
|
||||
TypableCommand {
|
||||
name: "buffer-next",
|
||||
aliases: &["bn", "bnext"],
|
||||
|
Loading…
Reference in New Issue
Block a user