notify: split up the ${action} template parameter

Split it up into two, ${action-name} and ${action-label}.

Dunstify, for example, has a different syntax compared to notify-send:

notify-send: default=foobar
dunstify: default,foobar
This commit is contained in:
Daniel Eklöf 2024-07-23 19:08:21 +02:00
parent d5c773a58b
commit ecbec57a47
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 14 additions and 18 deletions

View file

@ -75,8 +75,8 @@
* `desktop-notifications.command` option, replaces `notify`.
* `desktop-notifications.inhibit-when-focused` option, replaces
`notify-focus-inhibit`.
* `${icon}`, `${urgency}` and `${action}` added to the
`desktop-notifications.command` template.
* `${icon}`, `${urgency}`,`${action-name}` and `${action-label}` added
to the `desktop-notifications.command` template.
[1707]: https://codeberg.org/dnkl/foot/issues/1707
[1738]: https://codeberg.org/dnkl/foot/issues/1738

View file

@ -3225,7 +3225,7 @@ config_load(struct config *conf, const char *conf_path,
parse_modifiers(XKB_MOD_NAME_SHIFT, 5, &conf->mouse.selection_override_modifiers);
tokenize_cmdline(
"notify-send --wait --app-name ${app-id} --icon ${icon} --urgency ${urgency} --action ${action} -- ${title} ${body}",
"notify-send --wait --app-name ${app-id} --icon ${icon} --urgency ${urgency} --action ${action-name},${action-label} --print-id -- ${title} ${body}",
&conf->desktop_notifications.command.argv.args);
tokenize_cmdline("xdg-open ${url}", &conf->url.launch.argv.args);

View file

@ -470,12 +470,9 @@ Note: do not set *TERM* here; use the *term* option in the main
There are two parts to handle this. First, the notification
must define an action. For this purpose, foot definse the
template parameter *${action}*. It is intended to be used with
e.g. notify-send's *-A,--action* option. The contents of
*${action}* is not configurable, but will be on the form
'name=label', where name is a notification internal reference
to the action, and label is what is displayed in the
notification.
template parameters *${action-name}* and
*${action-label}*. They are intended to be used with
e.g. notify-send's *-A,--action* option.
Second, foot needs to know when the notification activated,
and it needs to get hold of the XDG activation token.
@ -489,7 +486,7 @@ Note: do not set *TERM* here; use the *term* option in the main
line, prefixed with *xdgtoken=*.
Example:
activate-foot
default
xdgtoken=18179adf579a7a904ce73754964b1ec3
The expected format of stdout may change at any time. Please
@ -499,7 +496,8 @@ Note: do not set *TERM* here; use the *term* option in the main
reporting the XDG activation token in any way. This means
window activation will not work by default.
Default: _notify-send --wait --app-name ${app-id} --icon ${icon} --urgency ${urgency} --action ${action} -- ${title} ${body}_.
Default: _notify-send --wait --app-name ${app-id} --icon ${icon} --urgency ${urgency} --action ${action-name},${action-label} --print-id -- ${title} ${body}_.
*inhibit-when-focused*
Boolean. If enabled, foot will not display notifications if the

View file

@ -47,7 +47,7 @@
# command-focused=no
[desktop-notifications]
# command=notify-send --wait --app-name ${app-id} --icon ${icon} --urgency ${urgency} --action ${action} -- ${title} ${body}
# command=notify-send --wait --app-name ${app-id} --icon ${icon} --urgency ${urgency} --action ${action-name},${action-label} --print-id -- ${title} ${body}
# inhibit-when-focused=yes

View file

@ -78,7 +78,6 @@ fdm_notify_stdout(struct fdm *fdm, int fd, int events, void *data)
const struct terminal *term = data;
struct notification *notif = NULL;
/* Find notification */
tll_foreach(term->active_notifications, it) {
if (it->item.stdout_fd == fd) {
@ -225,13 +224,13 @@ notify_notify(struct terminal *term, struct notification *notif)
? "normal" : "critical";
if (!spawn_expand_template(
&term->conf->desktop_notifications.command, 7,
&term->conf->desktop_notifications.command, 8,
(const char *[]){
"app-id", "window-title", "icon", "title", "body", "urgency", "action"},
"app-id", "window-title", "icon", "title", "body", "urgency", "action-name", "action-label"},
(const char *[]){
term->app_id ? term->app_id : term->conf->app_id,
term->window_title, icon_name_or_path, title, body, urgency_str,
"default=Click to activate"},
"default", "Click to activate"},
&argc, &argv))
{
return false;
@ -253,7 +252,7 @@ notify_notify(struct terminal *term, struct notification *notif)
notif->title = NULL;
notif->body = NULL;
notif->icon_id = NULL;
notif->icon_symbolic_name= NULL;
notif->icon_symbolic_name = NULL;
notif->icon_data = NULL;
notif->icon_data_sz = 0;
notif = &tll_back(term->active_notifications);
@ -262,7 +261,6 @@ notify_notify(struct terminal *term, struct notification *notif)
if (stdout_fds[0] >= 0) {
xassert(notif->xdg_token == NULL);
fdm_add(term->fdm, stdout_fds[0], EPOLLIN,
&fdm_notify_stdout, (void *)term);
}