feat(shlvl): add repeat_offset for repeated symbol (#5289)
Signed-off-by: Vivek Kushwaha <yoursvivek@users.noreply.github.com>
This commit is contained in:
parent
c5edb413dd
commit
3402f0e82a
|
@ -1499,6 +1499,7 @@
|
||||||
"disabled": true,
|
"disabled": true,
|
||||||
"format": "[$symbol$shlvl]($style) ",
|
"format": "[$symbol$shlvl]($style) ",
|
||||||
"repeat": false,
|
"repeat": false,
|
||||||
|
"repeat_offset": 0,
|
||||||
"style": "bold yellow",
|
"style": "bold yellow",
|
||||||
"symbol": "↕️ ",
|
"symbol": "↕️ ",
|
||||||
"threshold": 2
|
"threshold": 2
|
||||||
|
@ -5243,6 +5244,12 @@
|
||||||
"default": false,
|
"default": false,
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
|
"repeat_offset": {
|
||||||
|
"default": 0,
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint64",
|
||||||
|
"minimum": 0.0
|
||||||
|
},
|
||||||
"style": {
|
"style": {
|
||||||
"default": "bold yellow",
|
"default": "bold yellow",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|
|
@ -3772,14 +3772,15 @@ set to a number and meets or exceeds the specified threshold.
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Option | Default | Description |
|
| Option | Default | Description |
|
||||||
| ----------- | ---------------------------- | ------------------------------------------------------------- |
|
| --------------- | ---------------------------- | ------------------------------------------------------------------- |
|
||||||
| `threshold` | `2` | Display threshold. |
|
| `threshold` | `2` | Display threshold. |
|
||||||
| `format` | `'[$symbol$shlvl]($style) '` | The format for the module. |
|
| `format` | `'[$symbol$shlvl]($style) '` | The format for the module. |
|
||||||
| `symbol` | `'↕️ '` | The symbol used to represent the `SHLVL`. |
|
| `symbol` | `'↕️ '` | The symbol used to represent the `SHLVL`. |
|
||||||
| `repeat` | `false` | Causes `symbol` to be repeated by the current `SHLVL` amount. |
|
| `repeat` | `false` | Causes `symbol` to be repeated by the current `SHLVL` amount. |
|
||||||
| `style` | `'bold yellow'` | The style for the module. |
|
| `repeat_offset` | `0` | Decrements number of times `symbol` is repeated by the offset value |
|
||||||
| `disabled` | `true` | Disables the `shlvl` module. |
|
| `style` | `'bold yellow'` | The style for the module. |
|
||||||
|
| `disabled` | `true` | Disables the `shlvl` module. |
|
||||||
|
|
||||||
### Variables
|
### Variables
|
||||||
|
|
||||||
|
@ -3802,6 +3803,22 @@ format = '$shlvl level(s) down'
|
||||||
threshold = 3
|
threshold = 3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Using `repeat` and `repeat_offset` along with `character` module, one can get
|
||||||
|
prompt like `❯❯❯` where last character is colored appropriately for return
|
||||||
|
status code and preceeding characters are provided by `shlvl`.
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# ~/.config/starship.toml
|
||||||
|
|
||||||
|
[shlvl]
|
||||||
|
disabled = false
|
||||||
|
format = '[$symbol$shlvl]($style)'
|
||||||
|
repeat = true
|
||||||
|
symbol = '❯'
|
||||||
|
repeat_offset = 1
|
||||||
|
threshold = 0
|
||||||
|
```
|
||||||
|
|
||||||
## Singularity
|
## Singularity
|
||||||
|
|
||||||
The `singularity` module shows the current [Singularity](https://sylabs.io/singularity/) image, if inside a container
|
The `singularity` module shows the current [Singularity](https://sylabs.io/singularity/) image, if inside a container
|
||||||
|
|
|
@ -12,6 +12,7 @@ pub struct ShLvlConfig<'a> {
|
||||||
pub format: &'a str,
|
pub format: &'a str,
|
||||||
pub symbol: &'a str,
|
pub symbol: &'a str,
|
||||||
pub repeat: bool,
|
pub repeat: bool,
|
||||||
|
pub repeat_offset: u64,
|
||||||
pub style: &'a str,
|
pub style: &'a str,
|
||||||
pub disabled: bool,
|
pub disabled: bool,
|
||||||
}
|
}
|
||||||
|
@ -23,6 +24,7 @@ impl<'a> Default for ShLvlConfig<'a> {
|
||||||
format: "[$symbol$shlvl]($style) ",
|
format: "[$symbol$shlvl]($style) ",
|
||||||
symbol: "↕️ ", // extra space for emoji
|
symbol: "↕️ ", // extra space for emoji
|
||||||
repeat: false,
|
repeat: false,
|
||||||
|
repeat_offset: 0,
|
||||||
style: "bold yellow",
|
style: "bold yellow",
|
||||||
disabled: true,
|
disabled: true,
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,11 +22,20 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||||
|
|
||||||
let shlvl_str = &shlvl.to_string();
|
let shlvl_str = &shlvl.to_string();
|
||||||
|
|
||||||
let repeat_count = if config.repeat {
|
let mut repeat_count: usize = if config.repeat {
|
||||||
shlvl.try_into().unwrap_or(1)
|
shlvl.try_into().unwrap_or(1)
|
||||||
} else {
|
} else {
|
||||||
1
|
1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if config.repeat_offset > 0 {
|
||||||
|
repeat_count =
|
||||||
|
repeat_count.saturating_sub(config.repeat_offset.try_into().unwrap_or(usize::MAX));
|
||||||
|
if repeat_count == 0 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let symbol = if repeat_count != 1 {
|
let symbol = if repeat_count != 1 {
|
||||||
Cow::Owned(config.symbol.repeat(repeat_count))
|
Cow::Owned(config.symbol.repeat(repeat_count))
|
||||||
} else {
|
} else {
|
||||||
|
@ -219,4 +228,33 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(expected, actual);
|
assert_eq!(expected, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn repeat_offset() {
|
||||||
|
fn get_actual(shlvl: usize, repeat_offset: usize, threshold: usize) -> Option<String> {
|
||||||
|
ModuleRenderer::new("shlvl")
|
||||||
|
.config(toml::toml! {
|
||||||
|
[shlvl]
|
||||||
|
format = "[$symbol]($style)"
|
||||||
|
symbol = "~"
|
||||||
|
repeat = true
|
||||||
|
repeat_offset = repeat_offset
|
||||||
|
disabled = false
|
||||||
|
threshold = threshold
|
||||||
|
})
|
||||||
|
.env(SHLVL_ENV_VAR, format!("{}", shlvl))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
get_actual(2, 0, 0),
|
||||||
|
Some(format!("{}", style().paint("~~")))
|
||||||
|
);
|
||||||
|
assert_eq!(get_actual(2, 1, 0), Some(format!("{}", style().paint("~"))));
|
||||||
|
assert_eq!(get_actual(2, 2, 0), None); // offset same as shlvl; hide
|
||||||
|
assert_eq!(get_actual(2, 3, 0), None); // offset larger than shlvl; hide
|
||||||
|
assert_eq!(get_actual(2, 1, 3), None); // high threshold; hide
|
||||||
|
// threshold not high enough; hide
|
||||||
|
assert_eq!(get_actual(2, 1, 2), Some(format!("{}", style().paint("~"))));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue