use crate::action::DirectKind;
pub struct CommandBind {
pub name: &'static str,
pub aliases: &'static [&'static str],
pub description: &'static str,
pub kind: DirectKind,
}
impl CommandBind {
pub fn find(name: &str) -> Option<&'static CommandBind> {
COMMAND_BINDS
.iter()
.find(|b| b.name == name || b.aliases.contains(&name))
}
pub fn all_names(&self) -> impl Iterator<Item = &'static str> {
std::iter::once(self.name).chain(self.aliases.iter().copied())
}
}
pub const COMMAND_BINDS: &[CommandBind] = &[
CommandBind {
name: "q",
aliases: &["quit"],
description: "quit",
kind: DirectKind::Quit,
},
CommandBind {
name: "q!",
aliases: &["quit!"],
description: "force quit",
kind: DirectKind::QuitForce,
},
CommandBind {
name: "w",
aliases: &["write"],
description: "save (or :w <path>)",
kind: DirectKind::Save,
},
CommandBind {
name: "wq",
aliases: &["x"],
description: "save & quit",
kind: DirectKind::SaveAndQuit,
},
CommandBind {
name: "e",
aliases: &["edit"],
description: "open <path>",
kind: DirectKind::Open,
},
CommandBind {
name: "bn",
aliases: &["bnext"],
description: "next buffer",
kind: DirectKind::BufferNext,
},
CommandBind {
name: "bp",
aliases: &["bprev"],
description: "previous buffer",
kind: DirectKind::BufferPrev,
},
CommandBind {
name: "bd",
aliases: &["bdelete", "bc"],
description: "delete buffer",
kind: DirectKind::BufferDelete,
},
CommandBind {
name: "bd!",
aliases: &["bdelete!", "bc!"],
description: "force delete buffer",
kind: DirectKind::BufferDeleteForce,
},
CommandBind {
name: "bls",
aliases: &["buffers"],
description: "buffer picker",
kind: DirectKind::BufferList,
},
CommandBind {
name: "goto",
aliases: &[],
description: "go to line <n>",
kind: DirectKind::GotoLine,
},
CommandBind {
name: "noh",
aliases: &["nohl", "nohlsearch"],
description: "clear search highlight",
kind: DirectKind::ClearSearch,
},
];