diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e3cbc7e..27f92355 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,11 @@ ## Unreleased ### Added + +* `notify-focus-inhibit` boolean option, which can be used to control whether + desktop notifications should be inhibited when the terminal has keyboard + focus + ### Changed ### Deprecated ### Removed diff --git a/config.c b/config.c index e3b79e3e..3448cab6 100644 --- a/config.c +++ b/config.c @@ -1012,6 +1012,10 @@ parse_section_main(const char *key, const char *value, struct config *conf, } } + else if (strcmp(key, "notify-focus-inhibit") == 0) { + conf->notify_focus_inhibit = str_to_bool(value); + } + else if (strcmp(key, "url-launch") == 0) { deprecated_url_option( conf, "url-launch", "launch", path, lineno); @@ -2956,6 +2960,7 @@ config_load(struct config *conf, const char *conf_path, .notify = { .argv = {.args = NULL}, }, + .notify_focus_inhibit = true, .tweak = { .fcft_filter = FCFT_SCALING_FILTER_LANCZOS3, diff --git a/config.h b/config.h index 599bc464..66db5d2f 100644 --- a/config.h +++ b/config.h @@ -238,6 +238,7 @@ struct config { } selection_target; struct config_spawn_template notify; + bool notify_focus_inhibit; struct { enum fcft_scaling_filter fcft_filter; diff --git a/doc/foot.ini.5.scd b/doc/foot.ini.5.scd index 6bc93cc4..26116d62 100644 --- a/doc/foot.ini.5.scd +++ b/doc/foot.ini.5.scd @@ -279,11 +279,17 @@ in this order: - OSC 777: *\\e]777;notify;;<body>\\e\\\\* - Notifications are *inhibited* if the foot window has keyboard - focus. + By default, notifications are *inhibited* if the foot window + has keyboard focus. See _notify-focus-inhibit_. Default: _notify-send -a ${app-id} -i ${app-id} ${title} ${body}_. +*notify-focus-inhibit* + Boolean. If enabled, foot will not display notifications if the + terminal window has keyboard focus. + + Default: _yes_ + *selection-target* Clipboard target to automatically copy selected text to. One of *none*, *primary*, *clipboard* or *both*. Default: _primary_. @@ -316,8 +322,10 @@ in this order: *notify* When set to _yes_, foot will emit a desktop notification using the command specified in the *notify* option whenever *BEL* is - received and the window does *not* have keyboard focus. Default: - _no_ + received. By default, bell notifications are shown only when the + window does *not* have keyboard focus. See _notify-focus-inhibit_. + + Default: _no_ *command* When set, foot will execute this command when *BEL* is received. diff --git a/notify.c b/notify.c index a90cd317..13cee895 100644 --- a/notify.c +++ b/notify.c @@ -19,7 +19,7 @@ notify_notify(const struct terminal *term, const char *title, const char *body) { LOG_DBG("notify: title=\"%s\", msg=\"%s\"", title, body); - if (term->kbd_focus) { + if (term->conf->notify_focus_inhibit && term->kbd_focus) { /* No notifications while we’re focused */ return; } diff --git a/terminal.c b/terminal.c index 2738291d..0f5b4b62 100644 --- a/terminal.c +++ b/terminal.c @@ -3081,11 +3081,11 @@ term_bell(struct terminal *term) term_damage_margins(term); } } - - if (term->conf->bell.notify) - notify_notify(term, "Bell", "Bell in terminal"); } + if (term->conf->bell.notify) + notify_notify(term, "Bell", "Bell in terminal"); + if ((term->conf->bell.command.argv.args != NULL) && (!term->kbd_focus || term->conf->bell.command_focused)) {