commit 45859be03f14fa0506ab8518feaec5ddb157e318
parent f9361ae36c586d78db34307f538508ab0dd8f486
Author: Jason Nader <jason.nader@protonmail.com>
Date: Sat, 13 Jun 2020 12:32:24 +0900
i3-compat: add GET_BINDING_STATE IPC command
Diffstat:
10 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/completions/bash/swaymsg b/completions/bash/swaymsg
@@ -15,6 +15,7 @@ _swaymsg()
'get_bar_config'
'get_version'
'get_binding_modes'
+ 'get_binding_state'
'get_config'
'send_tick'
'subscribe'
diff --git a/completions/fish/swaymsg.fish b/completions/fish/swaymsg.fish
@@ -18,6 +18,7 @@ complete -c swaymsg -s t -l type -fra 'get_marks' --description "Get a JSON-enco
complete -c swaymsg -s t -l type -fra 'get_bar_config' --description "Get a JSON-encoded configuration for swaybar."
complete -c swaymsg -s t -l type -fra 'get_version' --description "Get JSON-encoded version information for the running instance of sway."
complete -c swaymsg -s t -l type -fra 'get_binding_modes' --description "Gets a JSON-encoded list of currently configured binding modes."
+complete -c swaymsg -s t -l type -fra 'get_binding_state' --description "Get JSON-encoded info about the current binding state."
complete -c swaymsg -s t -l type -fra 'get_config' --description "Gets a JSON-encoded copy of the current configuration."
complete -c swaymsg -s t -l type -fra 'get_seats' --description "Gets a JSON-encoded list of all seats, its properties and all assigned devices."
complete -c swaymsg -s t -l type -fra 'send_tick' --description "Sends a tick event to all subscribed clients."
diff --git a/completions/zsh/_swaymsg b/completions/zsh/_swaymsg
@@ -23,6 +23,7 @@ types=(
'get_bar_config'
'get_version'
'get_binding_modes'
+'get_binding_state'
'get_config'
'send_tick'
'subscribe'
diff --git a/include/ipc.h b/include/ipc.h
@@ -17,6 +17,7 @@ enum ipc_command_type {
IPC_GET_CONFIG = 9,
IPC_SEND_TICK = 10,
IPC_SYNC = 11,
+ IPC_GET_BINDING_STATE = 12,
// sway-specific command types
IPC_GET_INPUTS = 100,
diff --git a/include/sway/ipc-json.h b/include/sway/ipc-json.h
@@ -6,6 +6,8 @@
json_object *ipc_json_get_version(void);
+json_object *ipc_json_get_binding_mode(void);
+
json_object *ipc_json_describe_disabled_output(struct sway_output *o);
json_object *ipc_json_describe_node(struct sway_node *node);
json_object *ipc_json_describe_node_recursive(struct sway_node *node);
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
@@ -1261,3 +1261,10 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
#endif
return json;
}
+
+json_object *ipc_json_get_binding_mode(void) {
+ json_object *current_mode = json_object_new_object();
+ json_object_object_add(current_mode, "name",
+ json_object_new_string(config->current_mode->name));
+ return current_mode;
+}
diff --git a/sway/ipc-server.c b/sway/ipc-server.c
@@ -876,6 +876,16 @@ void ipc_client_handle_command(struct ipc_client *client, uint32_t payload_lengt
goto exit_cleanup;
}
+ case IPC_GET_BINDING_STATE:
+ {
+ json_object *current_mode = ipc_json_get_binding_mode();
+ const char *json_string = json_object_to_json_string(current_mode);
+ ipc_send_reply(client, payload_type, json_string,
+ (uint32_t)strlen(json_string));
+ json_object_put(current_mode); // free
+ goto exit_cleanup;
+ }
+
case IPC_GET_CONFIG:
{
json_object *json = json_object_new_object();
diff --git a/sway/sway-ipc.7.scd b/sway/sway-ipc.7.scd
@@ -75,6 +75,9 @@ supported. *For all replies, any properties not listed are subject to removal.*
|- 11
: SYNC
: Replies failure object for i3 compatibility
+|- 12
+: GET_BINDING_STATE
+: Request the current binding state, e.g. the currently active binding mode name.
|- 100
: GET_INPUTS
: Get the list of input devices
@@ -1067,6 +1070,23 @@ boolean value _false_.
}
```
+## 12. GET_BINDING_STATE
+
+*MESSAGE*++
+Returns the currently active binding mode.
+
+*REPLY*++
+A single object that contains the property _name_, which is set to the
+currently active binding mode as a string.
+
+*Exact Reply:*
+```
+{
+ "name": "default"
+}
+```
+
+
## 100. GET_INPUTS
*MESSAGE*++
diff --git a/swaymsg/main.c b/swaymsg/main.c
@@ -440,6 +440,8 @@ int main(int argc, char **argv) {
type = IPC_GET_VERSION;
} else if (strcasecmp(cmdtype, "get_binding_modes") == 0) {
type = IPC_GET_BINDING_MODES;
+ } else if (strcasecmp(cmdtype, "get_binding_state") == 0) {
+ type = IPC_GET_BINDING_STATE;
} else if (strcasecmp(cmdtype, "get_config") == 0) {
type = IPC_GET_CONFIG;
} else if (strcasecmp(cmdtype, "send_tick") == 0) {
diff --git a/swaymsg/swaymsg.1.scd b/swaymsg/swaymsg.1.scd
@@ -80,6 +80,9 @@ _swaymsg_ [options...] [message]
*get\_binding\_modes*
Gets a JSON-encoded list of currently configured binding modes.
+*get\_binding\_state*
+ Gets JSON-encoded info about the current binding state.
+
*get\_config*
Gets a JSON-encoded copy of the current configuration.