mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
This adds support for a new OSC escape sequence: OSC 176, that lets terminal programs tell the terminal the name of the app that is running. foot then sets the app ID of the toplevel to that ID, which lets the compositor know which app is running, and typically sets the appropriate icon, window grouping, ... See: https://gist.github.com/delthas/d451e2cc1573bb2364839849c7117239
59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
#include "notify.h"
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
|
|
#define LOG_MODULE "notify"
|
|
#define LOG_ENABLE_DBG 0
|
|
#include "log.h"
|
|
#include "config.h"
|
|
#include "spawn.h"
|
|
#include "xmalloc.h"
|
|
|
|
void
|
|
notify_notify(const struct terminal *term, const char *title, const char *body)
|
|
{
|
|
LOG_DBG("notify: title=\"%s\", msg=\"%s\"", title, body);
|
|
|
|
if (term->conf->notify_focus_inhibit && term->kbd_focus) {
|
|
/* No notifications while we're focused */
|
|
return;
|
|
}
|
|
|
|
if (title == NULL || body == NULL)
|
|
return;
|
|
|
|
if (term->conf->notify.argv.args == NULL)
|
|
return;
|
|
|
|
char **argv = NULL;
|
|
size_t argc = 0;
|
|
|
|
if (!spawn_expand_template(
|
|
&term->conf->notify, 4,
|
|
(const char *[]){"app-id", "window-title", "title", "body"},
|
|
(const char *[]){term->app_id ? term->app_id : term->conf->app_id, term->window_title, title, body},
|
|
&argc, &argv))
|
|
{
|
|
return;
|
|
}
|
|
|
|
LOG_DBG("notify command:");
|
|
for (size_t i = 0; i < argc; i++)
|
|
LOG_DBG(" argv[%zu] = \"%s\"", i, argv[i]);
|
|
|
|
/* Redirect stdin to /dev/null, but ignore failure to open */
|
|
int devnull = open("/dev/null", O_RDONLY);
|
|
spawn(term->reaper, NULL, argv, devnull, -1, -1, NULL);
|
|
|
|
if (devnull >= 0)
|
|
close(devnull);
|
|
|
|
for (size_t i = 0; i < argc; i++)
|
|
free(argv[i]);
|
|
free(argv);
|
|
}
|