aboutsummaryrefslogtreecommitdiff
path: root/swaymsg
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-10-08 11:05:54 -0400
committerGitHub <noreply@github.com>2017-10-08 11:05:54 -0400
commit6d83a59b461d07c4c9c5ee5809da658f5c56afc3 (patch)
tree6fd6b55d7f335a3fb4a2f06d81417464087f1dfc /swaymsg
parent5ecedc7199fcd9788ae2d96f0ed1f25a2cbe7364 (diff)
parent1cca551c6fc69bca76a4992b33ef685371cac26b (diff)
Merge pull request #1263 from nyorain/master
Implement get_clipboard ipc message
Diffstat (limited to 'swaymsg')
-rw-r--r--swaymsg/main.c57
-rw-r--r--swaymsg/swaymsg.1.txt6
2 files changed, 57 insertions, 6 deletions
diff --git a/swaymsg/main.c b/swaymsg/main.c
index efd0ec25..2f9cfb14 100644
--- a/swaymsg/main.c
+++ b/swaymsg/main.c
@@ -19,15 +19,17 @@ void sway_terminate(int exit_code) {
exit(exit_code);
}
-static void pretty_print_cmd(json_object *r) {
- bool _success;
+static bool success(json_object *r, bool fallback) {
json_object *success;
if (!json_object_object_get_ex(r, "success", &success)) {
- _success = true;
+ return fallback;
} else {
- _success = json_object_get_boolean(success);
+ return json_object_get_boolean(success);
}
- if (!_success) {
+}
+
+static void pretty_print_cmd(json_object *r) {
+ if (!success(r, true)) {
json_object *error;
if (!json_object_object_get_ex(r, "error", &error)) {
printf("An unknkown error occured");
@@ -144,10 +146,43 @@ static void pretty_print_version(json_object *v) {
printf("sway version %s\n", json_object_get_string(ver));
}
+static void pretty_print_clipboard(json_object *v) {
+ if (success(v, true)) {
+ if (json_object_is_type(v, json_type_array)) {
+ for (int i = 0; i < json_object_array_length(v); ++i) {
+ json_object *o = json_object_array_get_idx(v, i);
+ printf("%s\n", json_object_get_string(o));
+ }
+ } else {
+ // NOTE: could be extended to print all received types
+ // instead just the first one when sways ipc server
+ // supports it
+ struct json_object_iterator iter = json_object_iter_begin(v);
+ struct json_object_iterator end = json_object_iter_end(v);
+ if (!json_object_iter_equal(&iter, &end)) {
+ json_object *obj = json_object_iter_peek_value(&iter);
+ if (success(obj, false)) {
+ json_object *content;
+ json_object_object_get_ex(obj, "content", &content);
+ printf("%s\n", json_object_get_string(content));
+ } else {
+ json_object *error;
+ json_object_object_get_ex(obj, "error", &error);
+ printf("Error: %s\n", json_object_get_string(error));
+ }
+ }
+ }
+ } else {
+ json_object *error;
+ json_object_object_get_ex(v, "error", &error);
+ printf("Error: %s\n", json_object_get_string(error));
+ }
+}
+
static void pretty_print(int type, json_object *resp) {
if (type != IPC_COMMAND && type != IPC_GET_WORKSPACES &&
type != IPC_GET_INPUTS && type != IPC_GET_OUTPUTS &&
- type != IPC_GET_VERSION) {
+ type != IPC_GET_VERSION && type != IPC_GET_CLIPBOARD) {
printf("%s\n", json_object_to_json_string_ext(resp,
JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED));
return;
@@ -158,6 +193,11 @@ static void pretty_print(int type, json_object *resp) {
return;
}
+ if (type == IPC_GET_CLIPBOARD) {
+ pretty_print_clipboard(resp);
+ return;
+ }
+
json_object *obj;
size_t len = json_object_array_length(resp);
for (size_t i = 0; i < len; ++i) {
@@ -267,6 +307,8 @@ int main(int argc, char **argv) {
type = IPC_GET_BAR_CONFIG;
} else if (strcasecmp(cmdtype, "get_version") == 0) {
type = IPC_GET_VERSION;
+ } else if (strcasecmp(cmdtype, "get_clipboard") == 0) {
+ type = IPC_GET_CLIPBOARD;
} else {
sway_abort("Unknown message type %s", cmdtype);
}
@@ -290,6 +332,9 @@ int main(int argc, char **argv) {
printf("%s\n", resp);
ret = 1;
} else {
+ if (!success(obj, true)) {
+ ret = 1;
+ }
if (raw) {
printf("%s\n", json_object_to_json_string_ext(obj,
JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED));
diff --git a/swaymsg/swaymsg.1.txt b/swaymsg/swaymsg.1.txt
index 1466a0fa..27813588 100644
--- a/swaymsg/swaymsg.1.txt
+++ b/swaymsg/swaymsg.1.txt
@@ -65,6 +65,12 @@ IPC Message Types
*get_version*::
Get JSON-encoded version information for the running instance of sway.
+*get_clipboard*::
+ Get JSON-encoded information about the clipboard.
+ Returns the current clipboard mime-types if called without
+ arguments, otherwise returns the clipboard data in the requested
+ formats. Encodes the data using base64 for non-text mime types.
+
Authors
-------