Support printing commands as string over ipc

This commit is contained in:
project-repo 2023-01-02 07:51:51 +01:00
commit 9d1cafa2f6
2 changed files with 61 additions and 50 deletions

View file

@ -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

View file

@ -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 {