From 5c286318597b657fa30cc9c662e6b2ed9753ea7d Mon Sep 17 00:00:00 2001 From: nuxsh Date: Wed, 25 Aug 2021 21:26:27 +0530 Subject: [PATCH] ipc: add support for multiple arguments see https://github.com/mihirlad55/dwm-ipc/issues/20 --- config.def.h | 64 +++++++++++++++++++++++++-------------------------- dwm.c | 1 - lib/ipc/ipc.h | 7 ++++-- 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/config.def.h b/config.def.h index 8d03aa4..9767095 100644 --- a/config.def.h +++ b/config.def.h @@ -311,36 +311,36 @@ static Button buttons[] = { static const char *ipcsockpath = "/tmp/dwm.sock"; static IPCCommand ipccommands[] = { - IPCCOMMAND( view, 1, {ARG_TYPE_UINT} ), - IPCCOMMAND( toggleview, 1, {ARG_TYPE_UINT} ), - IPCCOMMAND( tag, 1, {ARG_TYPE_UINT} ), - IPCCOMMAND( toggletag, 1, {ARG_TYPE_UINT} ), - IPCCOMMAND( tagmon, 1, {ARG_TYPE_UINT} ), - IPCCOMMAND( focusmon, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( focusstack, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( zoom, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( incnmaster, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( killclient, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( togglefloating, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( setattachmode, 1, {ARG_TYPE_STR} ), - IPCCOMMAND( setmfact, 1, {ARG_TYPE_FLOAT} ), - IPCCOMMAND( setlayoutsafe, 1, {ARG_TYPE_PTR} ), - IPCCOMMAND( quit, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( floatpos, 1, {ARG_TYPE_STR} ), - IPCCOMMAND( defaultgaps, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( incrgaps, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( incrigaps, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( incrogaps, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( incrihgaps, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( incrivgaps, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( incrohgaps, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( incrovgaps, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( incnmaster, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( rioresize, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( setlayoutex, 1, {ARG_TYPE_SINT} ), - IPCCOMMAND( togglebar, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( togglefullscreen, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( togglefakefullscreen,1, {ARG_TYPE_NONE} ), - IPCCOMMAND( togglefloating, 1, {ARG_TYPE_NONE} ), - IPCCOMMAND( togglegaps, 1, {ARG_TYPE_NONE} ), + IPCCOMMAND( view, ARG_TYPE_UINT ), + IPCCOMMAND( toggleview, ARG_TYPE_UINT ), + IPCCOMMAND( tag, ARG_TYPE_UINT ), + IPCCOMMAND( toggletag, ARG_TYPE_UINT ), + IPCCOMMAND( tagmon, ARG_TYPE_UINT ), + IPCCOMMAND( focusmon, ARG_TYPE_SINT ), + IPCCOMMAND( focusstack, ARG_TYPE_SINT ), + IPCCOMMAND( zoom, ARG_TYPE_NONE ), + IPCCOMMAND( incnmaster, ARG_TYPE_SINT ), + IPCCOMMAND( killclient, ARG_TYPE_NONE ), + IPCCOMMAND( togglefloating, ARG_TYPE_NONE ), + IPCCOMMAND( setattachmode, ARG_TYPE_STR ), + IPCCOMMAND( setmfact, ARG_TYPE_FLOAT ), + IPCCOMMAND( setlayoutsafe, ARG_TYPE_PTR ), + IPCCOMMAND( quit, ARG_TYPE_NONE ), + IPCCOMMAND( floatpos, ARG_TYPE_STR ), + IPCCOMMAND( defaultgaps, ARG_TYPE_NONE ), + IPCCOMMAND( incrgaps, ARG_TYPE_SINT ), + IPCCOMMAND( incrigaps, ARG_TYPE_SINT ), + IPCCOMMAND( incrogaps, ARG_TYPE_SINT ), + IPCCOMMAND( incrihgaps, ARG_TYPE_SINT ), + IPCCOMMAND( incrivgaps, ARG_TYPE_SINT ), + IPCCOMMAND( incrohgaps, ARG_TYPE_SINT ), + IPCCOMMAND( incrovgaps, ARG_TYPE_SINT ), + IPCCOMMAND( incnmaster, ARG_TYPE_SINT ), + IPCCOMMAND( rioresize, ARG_TYPE_NONE ), + IPCCOMMAND( setlayoutex, ARG_TYPE_SINT ), + IPCCOMMAND( togglebar, ARG_TYPE_NONE ), + IPCCOMMAND( togglefullscreen, ARG_TYPE_NONE ), + IPCCOMMAND( togglefakefullscreen, ARG_TYPE_NONE ), + IPCCOMMAND( togglefloating, ARG_TYPE_NONE ), + IPCCOMMAND( togglegaps, ARG_TYPE_NONE ), }; diff --git a/dwm.c b/dwm.c index a0b1847..f02fa7e 100644 --- a/dwm.c +++ b/dwm.c @@ -362,7 +362,6 @@ static pid_t winpid(Window w); /* variables */ static const char broken[] = "broken"; -static char rawstatustext[NUM_STATUSES][512]; static char stext[1024]; static int screen; static int sw, sh; /* X display screen geometry width, height */ diff --git a/lib/ipc/ipc.h b/lib/ipc/ipc.h index e3b5bba..aee972b 100644 --- a/lib/ipc/ipc.h +++ b/lib/ipc/ipc.h @@ -12,8 +12,11 @@ #define IPC_MAGIC_ARR { 'D', 'W', 'M', '-', 'I', 'P', 'C'} #define IPC_MAGIC_LEN 7 // Not including null char -#define IPCCOMMAND(FUNC, ARGC, TYPES) \ - { #FUNC, {FUNC }, ARGC, (ArgType[ARGC])TYPES } +#define IPCCOMMAND(FUNC, TYPE) \ + { #FUNC, {.single_param=FUNC }, 1, (ArgType[1]){TYPE} } + +#define IPCCOMMANDS(FUNC, ARGC, ...) \ + { #FUNC, {.array_param=FUNC }, ARGC, (ArgType[ARGC]){__VA_ARGS__} } // clang-format on typedef enum IPCMessageType {