mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-09 08:21:01 -04:00
osc: kitty notifications: implement query
This commit is contained in:
parent
511d4817d3
commit
70b4638a75
1 changed files with 27 additions and 6 deletions
33
osc.c
33
osc.c
|
|
@ -567,17 +567,19 @@ kitty_notification(struct terminal *term, char *string)
|
||||||
{
|
{
|
||||||
/* https://sw.kovidgoyal.net/kitty/desktop-notifications */
|
/* https://sw.kovidgoyal.net/kitty/desktop-notifications */
|
||||||
|
|
||||||
char *payload = strchr(string, ';');
|
char *payload_raw = strchr(string, ';');
|
||||||
if (payload == NULL)
|
if (payload_raw == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
char *parameters = string;
|
char *parameters = string;
|
||||||
*payload = '\0';
|
*payload_raw = '\0';
|
||||||
payload++;
|
payload_raw++;
|
||||||
|
|
||||||
char *id = xstrdup("0"); /* The 'i' parameter */
|
char *id = xstrdup("0"); /* The 'i' parameter */
|
||||||
char *icon_id = NULL; /* The 'g' parameter */
|
char *icon_id = NULL; /* The 'g' parameter */
|
||||||
char *symbolic_icon = NULL; /* The 'n' parameter */
|
char *symbolic_icon = NULL; /* The 'n' parameter */
|
||||||
|
char *payload = NULL;
|
||||||
|
|
||||||
bool focus = true; /* The 'a' parameter */
|
bool focus = true; /* The 'a' parameter */
|
||||||
bool report = false; /* The 'a' parameter */
|
bool report = false; /* The 'a' parameter */
|
||||||
bool done = true; /* The 'd' parameter */
|
bool done = true; /* The 'd' parameter */
|
||||||
|
|
@ -662,6 +664,25 @@ kitty_notification(struct terminal *term, char *string)
|
||||||
payload_type = PAYLOAD_BODY;
|
payload_type = PAYLOAD_BODY;
|
||||||
else if (strcmp(value, "icon") == 0)
|
else if (strcmp(value, "icon") == 0)
|
||||||
payload_type = PAYLOAD_ICON;
|
payload_type = PAYLOAD_ICON;
|
||||||
|
else if (strcmp(value, "?") == 0) {
|
||||||
|
/* Query capabilities */
|
||||||
|
|
||||||
|
char when_str[64];
|
||||||
|
strcpy(when_str, "unfocused");
|
||||||
|
if (!term->conf->desktop_notifications.inhibit_when_focused)
|
||||||
|
strcat(when_str, ",always");
|
||||||
|
|
||||||
|
const char *terminator = term->vt.osc.bel ? "\a" : "\033\\";
|
||||||
|
|
||||||
|
char reply[128];
|
||||||
|
int n = xsnprintf(
|
||||||
|
reply, sizeof(reply),
|
||||||
|
"\033]99;i=%s:p=?;p=title,body,?:a=focus,report:o=%s:u=0,1,2%s",
|
||||||
|
id, when_str, terminator);
|
||||||
|
|
||||||
|
term_to_slave(term, reply, n);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'o':
|
case 'o':
|
||||||
|
|
@ -701,11 +722,11 @@ kitty_notification(struct terminal *term, char *string)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (base64) {
|
if (base64) {
|
||||||
payload = base64_decode(payload, &payload_size);
|
payload = base64_decode(payload_raw, &payload_size);
|
||||||
if (payload == NULL)
|
if (payload == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
payload = xstrdup(payload);
|
payload = xstrdup(payload_raw);
|
||||||
payload_size = strlen(payload);
|
payload_size = strlen(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue