Preload DWM plugins (dialer, calllog, xdrawer) with resident X11/Pango state and FIFO IPC

This commit is contained in:
Luxferre
2026-10-21 11:57:23 +03:00
parent 0a02400505
commit 996e80b095
16 changed files with 753 additions and 407 deletions
+40 -3
View File
@@ -1572,19 +1572,56 @@ host_spawn_command(const char *const *argv)
spawn(&a);
}
static int
is_plugin_daemon_alive(const char *plugin_name)
{
char pidpath[128], buf[32];
snprintf(pidpath, sizeof(pidpath), "/tmp/dwm_plugin_%s.pid", plugin_name);
read_sysfs_str(pidpath, buf, sizeof(buf));
int pid = atoi(buf);
return (pid > 0 && kill(pid, 0) == 0);
}
static void
host_spawn_plugin(const char *plugin_name, const char *arg)
{
if (!plugin_name || !plugin_name[0])
return;
if (arg && strcmp(arg, "--preload") == 0) {
if (is_plugin_daemon_alive(plugin_name))
return;
const char *cmd[4] = { "dwm-plugin", plugin_name, "--preload", NULL };
Arg a = { .v = cmd };
spawn(&a);
return;
}
XUngrabKeyboard(dpy, CurrentTime);
XFlush(dpy);
if (is_plugin_daemon_alive(plugin_name)) {
char fifopath[128], msg[128];
snprintf(fifopath, sizeof(fifopath), "/tmp/dwm_plugin_%s.fifo", plugin_name);
int fd = open(fifopath, O_WRONLY | O_NONBLOCK | O_CLOEXEC);
if (fd >= 0) {
int len;
if (strcmp(plugin_name, "xdrawer") == 0)
len = snprintf(msg, sizeof(msg), "TOGGLE\n");
else if (arg && arg[0])
len = snprintf(msg, sizeof(msg), "OPEN %s\n", arg);
else
len = snprintf(msg, sizeof(msg), "OPEN\n");
if (write(fd, msg, len) == len) {
close(fd);
return;
}
close(fd);
}
}
const char *cmd[4];
cmd[0] = "dwm-plugin";
cmd[1] = plugin_name;
cmd[2] = (arg && arg[0]) ? arg : NULL;
cmd[3] = NULL;
Arg a = { .v = cmd };
XUngrabKeyboard(dpy, CurrentTime);
XFlush(dpy);
spawn(&a);
}
@@ -2849,7 +2886,7 @@ unmapnotify(XEvent *e)
setclientstate(c, WithdrawnState);
else
unmanage(c, 0);
} else if (selmon && !selmon->sel) {
} else {
focus(NULL);
}
}