diff options
author | emersion <contact@emersion.fr> | 2018-09-29 11:23:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-29 11:23:38 +0200 |
commit | 0f0d0c7f9bc4c447224aa3812c31fc596a5bde7c (patch) | |
tree | 0b32b31a765eca48ce7739de7f4b602e7c71be57 | |
parent | Merge pull request #2724 from RedSoxFan/update-man-pages (diff) | |
parent | Fix quote handling for commands (diff) | |
download | sway-0f0d0c7f9bc4c447224aa3812c31fc596a5bde7c.tar.gz sway-0f0d0c7f9bc4c447224aa3812c31fc596a5bde7c.tar.zst sway-0f0d0c7f9bc4c447224aa3812c31fc596a5bde7c.zip |
Merge pull request #2635 from RedSoxFan/fix-bg-special
Handle shell special characters in bg file path
-rw-r--r-- | sway/commands.c | 13 | ||||
-rw-r--r-- | sway/commands/output/background.c | 18 | ||||
-rw-r--r-- | sway/config/output.c | 4 |
3 files changed, 11 insertions, 24 deletions
diff --git a/sway/commands.c b/sway/commands.c index bff230f7..03761c52 100644 --- a/sway/commands.c +++ b/sway/commands.c | |||
@@ -391,14 +391,12 @@ struct cmd_results *config_command(char *exec) { | |||
391 | // Var replacement, for all but first argument of set | 391 | // Var replacement, for all but first argument of set |
392 | // TODO commands | 392 | // TODO commands |
393 | for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) { | 393 | for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) { |
394 | if (*argv[i] == '\"' || *argv[i] == '\'') { | ||
395 | strip_quotes(argv[i]); | ||
396 | } | ||
394 | argv[i] = do_var_replacement(argv[i]); | 397 | argv[i] = do_var_replacement(argv[i]); |
395 | unescape_string(argv[i]); | 398 | unescape_string(argv[i]); |
396 | } | 399 | } |
397 | // Strip quotes for first argument. | ||
398 | // TODO This part needs to be handled much better | ||
399 | if (argc>1 && (*argv[1] == '\"' || *argv[1] == '\'')) { | ||
400 | strip_quotes(argv[1]); | ||
401 | } | ||
402 | if (handler->handle) { | 400 | if (handler->handle) { |
403 | results = handler->handle(argc-1, argv+1); | 401 | results = handler->handle(argc-1, argv+1); |
404 | } else { | 402 | } else { |
@@ -422,11 +420,6 @@ struct cmd_results *config_subcommand(char **argv, int argc, | |||
422 | char *input = argv[0] ? argv[0] : "(empty)"; | 420 | char *input = argv[0] ? argv[0] : "(empty)"; |
423 | return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command"); | 421 | return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command"); |
424 | } | 422 | } |
425 | // Strip quotes for first argument. | ||
426 | // TODO This part needs to be handled much better | ||
427 | if (argc > 1 && (*argv[1] == '\"' || *argv[1] == '\'')) { | ||
428 | strip_quotes(argv[1]); | ||
429 | } | ||
430 | if (handler->handle) { | 423 | if (handler->handle) { |
431 | return handler->handle(argc - 1, argv + 1); | 424 | return handler->handle(argc - 1, argv + 1); |
432 | } | 425 | } |
diff --git a/sway/commands/output/background.c b/sway/commands/output/background.c index 9e370d43..30fb47c4 100644 --- a/sway/commands/output/background.c +++ b/sway/commands/output/background.c | |||
@@ -123,19 +123,13 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { | |||
123 | } | 123 | } |
124 | free(src); | 124 | free(src); |
125 | } else { | 125 | } else { |
126 | // Escape spaces and quotes in the final path for swaybg | 126 | // Escape double quotes in the final path for swaybg |
127 | for (size_t i = 0; i < strlen(src); i++) { | 127 | for (size_t i = 0; i < strlen(src); i++) { |
128 | switch (src[i]) { | 128 | if (src[i] == '"') { |
129 | case ' ': | 129 | src = realloc(src, strlen(src) + 2); |
130 | case '\'': | 130 | memmove(src + i + 1, src + i, strlen(src + i) + 1); |
131 | case '\"': | 131 | *(src + i) = '\\'; |
132 | src = realloc(src, strlen(src) + 2); | 132 | i++; |
133 | memmove(src + i + 1, src + i, strlen(src + i) + 1); | ||
134 | *(src + i) = '\\'; | ||
135 | i++; | ||
136 | break; | ||
137 | default: | ||
138 | break; | ||
139 | } | 133 | } |
140 | } | 134 | } |
141 | 135 | ||
diff --git a/sway/config/output.c b/sway/config/output.c index 74d79130..6f337b66 100644 --- a/sway/config/output.c +++ b/sway/config/output.c | |||
@@ -237,7 +237,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) { | |||
237 | wlr_log(WLR_DEBUG, "Setting background for output %d to %s", | 237 | wlr_log(WLR_DEBUG, "Setting background for output %d to %s", |
238 | output_i, oc->background); | 238 | output_i, oc->background); |
239 | 239 | ||
240 | size_t len = snprintf(NULL, 0, "%s %d %s %s %s", | 240 | size_t len = snprintf(NULL, 0, "%s %d \"%s\" %s %s", |
241 | config->swaybg_command ? config->swaybg_command : "swaybg", | 241 | config->swaybg_command ? config->swaybg_command : "swaybg", |
242 | output_i, oc->background, oc->background_option, | 242 | output_i, oc->background, oc->background_option, |
243 | oc->background_fallback ? oc->background_fallback : ""); | 243 | oc->background_fallback ? oc->background_fallback : ""); |
@@ -246,7 +246,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) { | |||
246 | wlr_log(WLR_DEBUG, "Unable to allocate swaybg command"); | 246 | wlr_log(WLR_DEBUG, "Unable to allocate swaybg command"); |
247 | return; | 247 | return; |
248 | } | 248 | } |
249 | snprintf(command, len + 1, "%s %d %s %s %s", | 249 | snprintf(command, len + 1, "%s %d \"%s\" %s %s", |
250 | config->swaybg_command ? config->swaybg_command : "swaybg", | 250 | config->swaybg_command ? config->swaybg_command : "swaybg", |
251 | output_i, oc->background, oc->background_option, | 251 | output_i, oc->background, oc->background_option, |
252 | oc->background_fallback ? oc->background_fallback : ""); | 252 | oc->background_fallback ? oc->background_fallback : ""); |