]> git.sur5r.net Git - i3/i3/commitdiff
i3-msg: concatenate all arguments. now you can use i3-msg mark foo
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 13 Jul 2011 16:01:24 +0000 (18:01 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 13 Jul 2011 16:01:24 +0000 (18:01 +0200)
i3-msg/main.c

index 06beccad3ea50d444598ba53c5ca2aa8fa8c95c2..ac08419fb274edbf2227f125ca5b403b8463d80c 100644 (file)
@@ -152,7 +152,7 @@ int main(int argc, char *argv[]) {
     socket_path = getenv("I3SOCK");
     int o, option_index = 0;
     int message_type = I3_IPC_MESSAGE_TYPE_COMMAND;
-    char *payload = "";
+    char *payload = NULL;
     bool quiet = false;
 
     static struct option long_options[] = {
@@ -204,8 +204,25 @@ int main(int argc, char *argv[]) {
     if (socket_path == NULL)
         socket_path = strdup("/tmp/i3-ipc.sock");
 
-    if (optind < argc)
-        payload = argv[optind];
+    /* Use all arguments, separated by whitespace, as payload.
+     * This way, you don’t have to do i3-msg 'mark foo', you can use
+     * i3-msg mark foo */
+    while (optind < argc) {
+        if (!payload) {
+            if (!(payload = strdup(argv[optind])))
+                err(EXIT_FAILURE, "strdup(argv[optind])");
+        } else {
+            char *both;
+            if (asprintf(&both, "%s %s", payload, argv[optind]) == -1)
+                err(EXIT_FAILURE, "asprintf");
+            free(payload);
+            payload = both;
+        }
+        optind++;
+    }
+
+    if (!payload)
+        payload = "";
 
     int sockfd = socket(AF_LOCAL, SOCK_STREAM, 0);
     if (sockfd == -1)