diff options
-rw-r--r-- | sway/stringop.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sway/stringop.c b/sway/stringop.c index fe5a97ca..efa3a207 100644 --- a/sway/stringop.c +++ b/sway/stringop.c | |||
@@ -117,6 +117,7 @@ char **split_args(const char *start, int *argc) { | |||
117 | bool in_token = false; | 117 | bool in_token = false; |
118 | bool in_string = false; | 118 | bool in_string = false; |
119 | bool in_char = false; | 119 | bool in_char = false; |
120 | bool in_brackets = false; // brackets are used for critera | ||
120 | bool escaped = false; | 121 | bool escaped = false; |
121 | const char *end = start; | 122 | const char *end = start; |
122 | if (start) { | 123 | if (start) { |
@@ -129,10 +130,14 @@ char **split_args(const char *start, int *argc) { | |||
129 | in_string = !in_string; | 130 | in_string = !in_string; |
130 | } else if (*end == '\'' && !in_string && !escaped) { | 131 | } else if (*end == '\'' && !in_string && !escaped) { |
131 | in_char = !in_char; | 132 | in_char = !in_char; |
133 | } else if (*end == '[' && !in_string && !in_char && !in_brackets && !escaped) { | ||
134 | in_brackets = true; | ||
135 | } else if (*end == ']' && !in_string && !in_char && in_brackets && !escaped) { | ||
136 | in_brackets = false; | ||
132 | } else if (*end == '\\') { | 137 | } else if (*end == '\\') { |
133 | escaped = !escaped; | 138 | escaped = !escaped; |
134 | } else if (*end == '\0' || (!in_string && !in_char && !escaped | 139 | } else if (*end == '\0' || (!in_string && !in_char && !in_brackets |
135 | && strchr(whitespace, *end))) { | 140 | && !escaped && strchr(whitespace, *end))) { |
136 | goto add_token; | 141 | goto add_token; |
137 | } | 142 | } |
138 | if (*end != '\\') { | 143 | if (*end != '\\') { |