From 8d164f201b928c40b35100f73776af5dd2c44e3c Mon Sep 17 00:00:00 2001 From: Azad <49314270+Akmadan23@users.noreply.github.com> Date: Mon, 31 Jul 2023 16:59:46 +0200 Subject: feat: Add support for command aliases (#370) * feat: Add support for command aliases * Comply with cargo-fmt style --- docs/configuration/joshuto.toml.md | 5 +++++ src/commands/command_line.rs | 7 ++++++- src/config/general/app.rs | 3 +++ src/config/general/app_raw.rs | 4 ++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/configuration/joshuto.toml.md b/docs/configuration/joshuto.toml.md index 3f8ce51..4a19692 100644 --- a/docs/configuration/joshuto.toml.md +++ b/docs/configuration/joshuto.toml.md @@ -74,4 +74,9 @@ directories_first = true # sort in reverse reverse = false + +# Optional list of command aliases (empty by default) +[cmd_aliases] +# q = "quit" +# ... ``` diff --git a/src/commands/command_line.rs b/src/commands/command_line.rs index 5a311b9..ae9b3af 100644 --- a/src/commands/command_line.rs +++ b/src/commands/command_line.rs @@ -23,8 +23,13 @@ pub fn read_and_execute( .get_input(backend, context, &mut listener); if let Some(s) = user_input { - let trimmed = s.trim_start(); + let mut trimmed = s.trim_start(); let _ = context.commandline_context_mut().history_mut().add(trimmed); + + if let Some(alias) = context.config_ref().cmd_aliases.get(trimmed) { + trimmed = alias; + } + let command = Command::from_str(trimmed)?; command.execute(context, backend, keymap_t) } else { diff --git a/src/config/general/app.rs b/src/config/general/app.rs index f2602b0..9ee900e 100644 --- a/src/config/general/app.rs +++ b/src/config/general/app.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use super::app_raw::AppConfigRaw; use super::DEFAULT_CONFIG_FILE_PATH; @@ -10,6 +12,7 @@ pub struct AppConfig { pub xdg_open: bool, pub xdg_open_fork: bool, pub watch_files: bool, + pub cmd_aliases: HashMap, pub _display_options: DisplayOption, pub _preview_options: PreviewOption, pub _tab_options: TabOption, diff --git a/src/config/general/app_raw.rs b/src/config/general/app_raw.rs index 3c0cb9c..bebcb9c 100644 --- a/src/config/general/app_raw.rs +++ b/src/config/general/app_raw.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::convert::From; use serde_derive::Deserialize; @@ -28,6 +29,8 @@ pub struct AppConfigRaw { pub xdg_open_fork: bool, #[serde(default = "default_true")] pub watch_files: bool, + #[serde(default)] + pub cmd_aliases: HashMap, #[serde(default, rename = "display")] pub display_options: DisplayOptionRaw, #[serde(default, rename = "preview")] @@ -43,6 +46,7 @@ impl From for AppConfig { xdg_open: raw.xdg_open, xdg_open_fork: raw.xdg_open_fork, watch_files: raw.watch_files, + cmd_aliases: raw.cmd_aliases, _display_options: DisplayOption::from(raw.display_options), _preview_options: PreviewOption::from(raw.preview_options), _tab_options: TabOption::from(raw.tab_options), -- cgit v1.2.3