feat(cmd_duration): Make notification timeout configurable (#3515)
* Allow customization of notification timeout * Document new notification duration option * Check for out-of-bounds timeout and correct it * Implement ModuleConfig for u32 * Revert "Check for out-of-bounds timeout and correct it" This reverts commit 52109ab5f7c336b55c81bccafb3adbfc81514553. * Switch notification_timeout to u32 * Note notification_daemons might not honor timout * Notification timeout defaults to daemon timeout * Leave default value of notification_timeout blank in docs
This commit is contained in:
parent
6ca911b9fe
commit
e680540cfc
|
@ -597,15 +597,16 @@ running `eval $(starship init $0)`, and then proceed as normal.
|
||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Option | Default | Description |
|
| Option | Default | Description |
|
||||||
| -------------------- | ----------------------------- | ---------------------------------------------------------- |
|
| ---------------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| `min_time` | `2_000` | Shortest duration to show time for (in milliseconds). |
|
| `min_time` | `2_000` | Shortest duration to show time for (in milliseconds). |
|
||||||
| `show_milliseconds` | `false` | Show milliseconds in addition to seconds for the duration. |
|
| `show_milliseconds` | `false` | Show milliseconds in addition to seconds for the duration. |
|
||||||
| `format` | `"took [$duration]($style) "` | The format for the module. |
|
| `format` | `"took [$duration]($style) "` | The format for the module. |
|
||||||
| `style` | `"bold yellow"` | The style for the module. |
|
| `style` | `"bold yellow"` | The style for the module. |
|
||||||
| `disabled` | `false` | Disables the `cmd_duration` module. |
|
| `disabled` | `false` | Disables the `cmd_duration` module. |
|
||||||
| `show_notifications` | `false` | Show desktop notifications when command completes. |
|
| `show_notifications` | `false` | Show desktop notifications when command completes. |
|
||||||
| `min_time_to_notify` | `45_000` | Shortest duration for notification (in milliseconds). |
|
| `min_time_to_notify` | `45_000` | Shortest duration for notification (in milliseconds). |
|
||||||
|
| `notification_timeout` | | Duration to show notification for (in milliseconds). If unset, notification timeout will be determined by daemon. Not all notification daemons honor this option. |
|
||||||
|
|
||||||
::: tip
|
::: tip
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,23 @@ impl<'a> ModuleConfig<'a> for f64 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> ModuleConfig<'a> for u32 {
|
||||||
|
fn from_config(config: &Value) -> Option<Self> {
|
||||||
|
match config {
|
||||||
|
Value::Integer(value) => {
|
||||||
|
// Converting i64 to u32
|
||||||
|
if *value > 0 && *value <= u32::MAX.into() {
|
||||||
|
Some(*value as Self)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Value::String(value) => value.parse::<Self>().ok(),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a> ModuleConfig<'a> for usize {
|
impl<'a> ModuleConfig<'a> for usize {
|
||||||
fn from_config(config: &Value) -> Option<Self> {
|
fn from_config(config: &Value) -> Option<Self> {
|
||||||
match config {
|
match config {
|
||||||
|
|
|
@ -12,6 +12,9 @@ pub struct CmdDurationConfig<'a> {
|
||||||
pub disabled: bool,
|
pub disabled: bool,
|
||||||
pub show_notifications: bool,
|
pub show_notifications: bool,
|
||||||
pub min_time_to_notify: i64,
|
pub min_time_to_notify: i64,
|
||||||
|
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub notification_timeout: Option<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Default for CmdDurationConfig<'a> {
|
impl<'a> Default for CmdDurationConfig<'a> {
|
||||||
|
@ -24,6 +27,7 @@ impl<'a> Default for CmdDurationConfig<'a> {
|
||||||
disabled: false,
|
disabled: false,
|
||||||
show_notifications: false,
|
show_notifications: false,
|
||||||
min_time_to_notify: 45_000,
|
min_time_to_notify: 45_000,
|
||||||
|
notification_timeout: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,12 +79,17 @@ fn undistract_me<'a, 'b>(
|
||||||
unstyle(&ANSIStrings(&module.ansi_strings()))
|
unstyle(&ANSIStrings(&module.ansi_strings()))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let timeout = match config.notification_timeout {
|
||||||
|
Some(v) => Timeout::Milliseconds(v),
|
||||||
|
None => Timeout::Default,
|
||||||
|
};
|
||||||
|
|
||||||
let mut notification = Notification::new();
|
let mut notification = Notification::new();
|
||||||
notification
|
notification
|
||||||
.summary("Command finished")
|
.summary("Command finished")
|
||||||
.body(&body)
|
.body(&body)
|
||||||
.icon("utilities-terminal")
|
.icon("utilities-terminal")
|
||||||
.timeout(Timeout::Milliseconds(750));
|
.timeout(timeout);
|
||||||
|
|
||||||
if let Err(err) = notification.show() {
|
if let Err(err) = notification.show() {
|
||||||
log::trace!("Cannot show notification: {}", err);
|
log::trace!("Cannot show notification: {}", err);
|
||||||
|
|
Loading…
Reference in New Issue