From 9d1cafa2f66c67c4101445631628208574f7f92f Mon Sep 17 00:00:00 2001 From: project-repo Date: Mon, 2 Jan 2023 07:51:51 +0100 Subject: [PATCH] Support printing commands as string over ipc --- keybinding.c | 4 +- keybinding.h | 107 ++++++++++++++++++++++++++++----------------------- 2 files changed, 61 insertions(+), 50 deletions(-) diff --git a/keybinding.c b/keybinding.c index cca943e..416ecac 100644 --- a/keybinding.c +++ b/keybinding.c @@ -1294,8 +1294,8 @@ keybinding_definekey(struct cg_server *server, struct keybinding *kb) { keybinding_list_push(server->keybindings, kb); ipc_send_event(server, "{\"event_name\":\"definekey\",\"modifiers\":%d,\"key\":" - "%d,\"command\":%d}", - kb->modifiers, kb->key, kb->action); + "%d,\"command\":\"%s\"}", + kb->modifiers, kb->key, keybinding_action_string[kb->action]); } void diff --git a/keybinding.h b/keybinding.h index 45784b5..a70709f 100644 --- a/keybinding.h +++ b/keybinding.h @@ -10,59 +10,70 @@ struct cg_server; +#define FOREACH_KEYBINDING(KEYBINDING) \ + KEYBINDING(KEYBINDING_RUN_COMMAND) /* data.c is the string to execute */ \ + KEYBINDING(KEYBINDING_CLOSE_VIEW) \ + KEYBINDING(KEYBINDING_SPLIT_VERTICAL) \ + KEYBINDING(KEYBINDING_SPLIT_HORIZONTAL) \ + KEYBINDING(KEYBINDING_CHANGE_TTY) /*data.u is the desired tty*/\ + KEYBINDING(KEYBINDING_LAYOUT_FULLSCREEN)\ + KEYBINDING(KEYBINDING_CYCLE_VIEWS) /* data.b is 0 if forward, 1 if reverse */\ + KEYBINDING(KEYBINDING_CYCLE_TILES) /* data.b is 0 if forward, 1 if reverse */\ + KEYBINDING(KEYBINDING_CYCLE_OUTPUT) /* data.b is 0 if forward, 1 if reverse */\ + KEYBINDING(KEYBINDING_CONFIGURE_OUTPUT) /* data.o_cfg is the desired output */\ +\ + KEYBINDING(KEYBINDING_CONFIGURE_MESSAGE) /* data.m_cfg is the desired config */\ + KEYBINDING(KEYBINDING_CONFIGURE_INPUT) /* data.i_cfg is the desired input configuration */\ +\ + KEYBINDING(KEYBINDING_QUIT)\ + KEYBINDING(KEYBINDING_NOOP)\ + KEYBINDING(KEYBINDING_SWITCH_OUTPUT) /* data.u is the desired output */\ + KEYBINDING(KEYBINDING_SWITCH_WORKSPACE) /* data.u is the desired workspace */\ + KEYBINDING(KEYBINDING_SWITCH_MODE) /* data.u is the desired mode */\ + KEYBINDING(KEYBINDING_SWITCH_DEFAULT_MODE) /* data.u is the desired mode */\ + KEYBINDING(KEYBINDING_RESIZE_TILE_HORIZONTAL) /* data.i is the number of pixels to add */\ +\ + KEYBINDING(KEYBINDING_RESIZE_TILE_VERTICAL) /* data.i is the number of pixels to add to */\ +\ + KEYBINDING(KEYBINDING_MOVE_VIEW_TO_WORKSPACE) /* data.u is the desired workspace */\ + KEYBINDING(KEYBINDING_MOVE_VIEW_TO_OUTPUT) /* data.u is the desired output */\ + KEYBINDING(KEYBINDING_MOVE_VIEW_TO_CYCLE_OUTPUT) /* data.b is 0 if forward, 1 if */\ +\ + KEYBINDING(KEYBINDING_DUMP)\ + KEYBINDING(KEYBINDING_SHOW_TIME)\ + KEYBINDING(KEYBINDING_SHOW_INFO)\ + KEYBINDING(KEYBINDING_DISPLAY_MESSAGE)\ + KEYBINDING(KEYBINDING_CURSOR)\ +\ + KEYBINDING(KEYBINDING_SWAP_LEFT)\ + KEYBINDING(KEYBINDING_SWAP_RIGHT)\ + KEYBINDING(KEYBINDING_SWAP_TOP)\ + KEYBINDING(KEYBINDING_SWAP_BOTTOM)\ +\ + KEYBINDING(KEYBINDING_FOCUS_LEFT)\ + KEYBINDING(KEYBINDING_FOCUS_RIGHT)\ + KEYBINDING(KEYBINDING_FOCUS_TOP)\ + KEYBINDING(KEYBINDING_FOCUS_BOTTOM)\ + KEYBINDING(KEYBINDING_FOCUS_TILE)\ +\ + KEYBINDING(KEYBINDING_DEFINEKEY) /* data.kb is the keybinding definition */\ + KEYBINDING(KEYBINDING_BACKGROUND) /* data.color is the background color */\ + KEYBINDING(KEYBINDING_DEFINEMODE) /* data.c is the mode name */\ + KEYBINDING(KEYBINDING_WORKSPACES) /* data.i is the number of workspaces */\ + + +#define GENERATE_ENUM(ENUM) ENUM, +#define GENERATE_STRING(STRING) #STRING, + /* Important: if you add a keybinding which uses data.c or requires "free" * to be called, don't forget to add it to the function "keybinding_list_free" * in keybinding.c */ enum keybinding_action { - KEYBINDING_RUN_COMMAND, // data.c is the string to execute - KEYBINDING_CLOSE_VIEW, - KEYBINDING_SPLIT_VERTICAL, - KEYBINDING_SPLIT_HORIZONTAL, - KEYBINDING_CHANGE_TTY, // data.u is the desired tty - KEYBINDING_LAYOUT_FULLSCREEN, - KEYBINDING_CYCLE_VIEWS, // data.b is 0 if forward, 1 if reverse - KEYBINDING_CYCLE_TILES, // data.b is 0 if forward, 1 if reverse - KEYBINDING_CYCLE_OUTPUT, // data.b is 0 if forward, 1 if reverse - KEYBINDING_CONFIGURE_OUTPUT, // data.o_cfg is the desired output - // configuration - KEYBINDING_CONFIGURE_MESSAGE, // data.m_cfg is the desired config - KEYBINDING_CONFIGURE_INPUT, // data.i_cfg is the desired input - // configuration - KEYBINDING_QUIT, - KEYBINDING_NOOP, - KEYBINDING_SWITCH_OUTPUT, // data.u is the desired output - KEYBINDING_SWITCH_WORKSPACE, // data.u is the desired workspace - KEYBINDING_SWITCH_MODE, // data.u is the desired mode - KEYBINDING_SWITCH_DEFAULT_MODE, // data.u is the desired mode - KEYBINDING_RESIZE_TILE_HORIZONTAL, // data.i is the number of pixels to add - // to the current width - KEYBINDING_RESIZE_TILE_VERTICAL, // data.i is the number of pixels to add to - // the current height - KEYBINDING_MOVE_VIEW_TO_WORKSPACE, // data.u is the desired workspace - KEYBINDING_MOVE_VIEW_TO_OUTPUT, // data.u is the desired output - KEYBINDING_MOVE_VIEW_TO_CYCLE_OUTPUT, // data.b is 0 if forward, 1 if - // reverse - KEYBINDING_DUMP, - KEYBINDING_SHOW_TIME, - KEYBINDING_SHOW_INFO, - KEYBINDING_DISPLAY_MESSAGE, - KEYBINDING_CURSOR, + FOREACH_KEYBINDING(GENERATE_ENUM) +}; - KEYBINDING_SWAP_LEFT, - KEYBINDING_SWAP_RIGHT, - KEYBINDING_SWAP_TOP, - KEYBINDING_SWAP_BOTTOM, - - KEYBINDING_FOCUS_LEFT, - KEYBINDING_FOCUS_RIGHT, - KEYBINDING_FOCUS_TOP, - KEYBINDING_FOCUS_BOTTOM, - KEYBINDING_FOCUS_TILE, - - KEYBINDING_DEFINEKEY, // data.kb is the keybinding definition - KEYBINDING_BACKGROUND, // data.color is the background color - KEYBINDING_DEFINEMODE, // data.c is the mode name - KEYBINDING_WORKSPACES, // data.i is the number of workspaces +static const char *keybinding_action_string[] = { + FOREACH_KEYBINDING(GENERATE_STRING) }; union keybinding_params {