spkp

Stacking wayland compositor
git clone git://git.z3bra.org/sp:kp.git
Log | Files | Refs

commit 2d59a0706e0f4c00478a50b3b7e027a179bf7a78
parent b441298945c16788b62304a66c43a3ceb3204eb0
Author: Willy Goiffon <dev@z3bra.org>
Date:   Fri, 13 Nov 2020 10:56:06 +0100

Add function to run a process

Diffstat:
Mcompositor.c | 27+++++++++++++++++++++++++--
Mconfig.def.h | 1+
2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/compositor.c b/compositor.c @@ -1,9 +1,12 @@ -#include <assert.h> +#include <signal.h> #include <stdio.h> #include <stdlib.h> #include <time.h> -#include <wayland-server.h> +#include <unistd.h> + +#include <sys/types.h> +#include <wayland-server.h> #include <wlr/backend.h> #include <wlr/render/wlr_renderer.h> #include <wlr/types/wlr_compositor.h> @@ -191,6 +194,7 @@ static struct window *underneath(struct state *, double, double); /* keybinding functions, see config.h */ static void kb_terminate(struct state *, union keyarg *); static void kb_alttab(struct state *, union keyarg *); +static void kb_exec(struct state *, union keyarg *); #include "config.h" @@ -1010,6 +1014,25 @@ kb_alttab(struct state *server, union keyarg *arg) focus(w); } +/* + * Run the given command + */ +void +kb_exec(struct state *server, union keyarg *arg) +{ + (void)server; + if (!fork()) { + setsid(); + sigset_t set; + sigemptyset(&set); + sigprocmask(SIG_SETMASK, &set, NULL); + close(1); + close(2); + execl("/bin/sh", "/bin/sh", "-c", (char *)arg->v, (void *)NULL); + exit(1); /* NOTREACHED */ + } +} + int main(int argc, char *argv[]) { diff --git a/config.def.h b/config.def.h @@ -14,4 +14,5 @@ struct key keys[] = { { LOGO , XKB_KEY_Escape, kb_terminate, {0 } }, { ALT , XKB_KEY_Tab , kb_alttab , {.i = 0} }, { ALT|SHFT , XKB_KEY_Tab , kb_alttab , {.i = 1} }, + { LOGO , XKB_KEY_Return, kb_exec , {.v = "alacritty"} }, };