feat(username): add aliases option (#5855)

* Create place to put it in the config

* Initial functional version

* Fix grammar

* Add option documentation to README

* Add test for two aliases and emoji translation

* Remove println

* Rewrite match as iflet

* Improve converting the reference

* Format file

* Try to restore autoformat of markdown

* Replace toml:Map with concrete IndexMap

* Update schema

* Add option that got lost
This commit is contained in:
Alper Cugun 2024-04-05 23:57:13 +02:00 committed by GitHub
parent 335c514e9e
commit 9c1eaddae1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 53 additions and 0 deletions

View File

@ -1784,6 +1784,7 @@
},
"username": {
"default": {
"aliases": {},
"detect_env_vars": [],
"disabled": false,
"format": "[$user]($style) in ",
@ -6129,6 +6130,13 @@
"disabled": {
"default": false,
"type": "boolean"
},
"aliases": {
"default": {},
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false

View File

@ -4505,6 +4505,7 @@ these variables, one workaround is to set one of them with a dummy value.
| `format` | `'[$user]($style) in '` | The format for the module. |
| `show_always` | `false` | Always shows the `username` module. |
| `disabled` | `false` | Disables the `username` module. |
| `aliases` | `{}` | Translate system usernames to something else |
### Variables
@ -4526,6 +4527,7 @@ style_root = 'black bold'
format = 'user: [$user]($style) '
disabled = false
show_always = true
aliases = { "corpuser034g" = "matchai" }
```
#### Hide the hostname in remote tmux sessions

View File

@ -1,3 +1,4 @@
use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
#[derive(Clone, Deserialize, Serialize)]
@ -14,6 +15,7 @@ pub struct UsernameConfig<'a> {
pub style_user: &'a str,
pub show_always: bool,
pub disabled: bool,
pub aliases: IndexMap<String, &'a str>,
}
impl<'a> Default for UsernameConfig<'a> {
@ -25,6 +27,7 @@ impl<'a> Default for UsernameConfig<'a> {
style_user: "yellow bold",
show_always: false,
disabled: false,
aliases: IndexMap::new(),
}
}
}

View File

@ -40,6 +40,10 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
return None; // [A]
}
if let Some(&alias) = config.aliases.get(&username) {
username = alias.to_string();
}
let parsed = StringFormatter::new(config.format).and_then(|formatter| {
formatter
.map_style(|variable| match variable {
@ -323,4 +327,40 @@ mod tests {
assert_eq!(expected, actual.as_deref());
}
#[test]
fn test_alias() {
let actual = ModuleRenderer::new("username")
.env(super::USERNAME_ENV_VAR, "astronaut")
.config(toml::toml! {
[username]
show_always = true
aliases = { "astronaut" = "skywalker" }
style_root = ""
style_user = ""
})
.collect();
let expected = Some("skywalker in ");
assert_eq!(expected, actual.as_deref());
}
#[test]
fn test_alias_emoji() {
let actual = ModuleRenderer::new("username")
.env(super::USERNAME_ENV_VAR, "kaas")
.config(toml::toml! {
[username]
show_always = true
aliases = { "a" = "b", "kaas" = "🧀" }
style_root = ""
style_user = ""
})
.collect();
let expected = Some("🧀 in ");
assert_eq!(expected, actual.as_deref());
}
}