summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAzad <49314270+Akmadan23@users.noreply.github.com>2023-07-31 16:59:46 +0200
committerGitHub <noreply@github.com>2023-07-31 10:59:46 -0400
commit8d164f201b928c40b35100f73776af5dd2c44e3c (patch)
treed6f095af1f7d04527809eb925c1d519fab117932
parentc4df66f4981d5452d01b627a052579b40d594ab6 (diff)
feat: Add support for command aliases (#370)
* feat: Add support for command aliases * Comply with cargo-fmt style
-rw-r--r--docs/configuration/joshuto.toml.md5
-rw-r--r--src/commands/command_line.rs7
-rw-r--r--src/config/general/app.rs3
-rw-r--r--src/config/general/app_raw.rs4
4 files changed, 18 insertions, 1 deletions
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<String, String>,
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<String, String>,
#[serde(default, rename = "display")]
pub display_options: DisplayOptionRaw,
#[serde(default, rename = "preview")]
@@ -43,6 +46,7 @@ impl From<AppConfigRaw> 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),