Add get_bindings IPC interface

The new get_bindings IPC interface (IPC_GET_BINDINGS) allows swaymsg (and
other IPC clients) to interrogate sway's input bindings for all configured
binding modes.

The output of get_bindings is a JSON object mapping each configured binding
mode (e.g. "default", "resize", etc.) to an array of binding objects. The
binding JSON objects are of the same form as those in IPC_EVENT_BINDING.

N.B. a big chunk of code from ipc_event_binding() is moved to a new
ipc_json_describe_binding() function which services both the new
IPC_GET_BINDINGS as well as the existing IPC_EVENT_BINDING commands.

Signed-off-by: Peter Grayson <pete@jpgrayson.net>
This commit is contained in:
Peter Grayson 2019-03-08 12:43:04 -05:00
parent b7fe5097e9
commit 331bcac3ea
10 changed files with 124 additions and 62 deletions

View file

@ -21,6 +21,7 @@ enum ipc_command_type {
// sway-specific command types
IPC_GET_INPUTS = 100,
IPC_GET_SEATS = 101,
IPC_GET_BINDINGS = 102,
// Events sent from sway to clients. Events have the highest bits set.
IPC_EVENT_WORKSPACE = ((1<<31) | 0),

View file

@ -354,9 +354,10 @@ enum ipc_feature {
IPC_FEATURE_EVENT_BINDING = 4096,
IPC_FEATURE_EVENT_INPUT = 8192,
IPC_FEATURE_GET_SEATS = 16384,
IPC_FEATURE_GET_BINDINGS = 32768,
IPC_FEATURE_ALL_COMMANDS =
1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 16384,
1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 16384 | 32768,
IPC_FEATURE_ALL_EVENTS = 256 | 512 | 1024 | 2048 | 4096 | 8192,
IPC_FEATURE_ALL = IPC_FEATURE_ALL_COMMANDS | IPC_FEATURE_ALL_EVENTS,

View file

@ -12,5 +12,7 @@ json_object *ipc_json_describe_node_recursive(struct sway_node *node);
json_object *ipc_json_describe_input(struct sway_input_device *device);
json_object *ipc_json_describe_seat(struct sway_seat *seat);
json_object *ipc_json_describe_bar_config(struct bar_config *bar);
json_object *ipc_json_describe_binding(struct sway_binding *binding);
json_object *ipc_json_describe_mode_bindings(struct sway_mode *mode);
#endif