mirror of
https://github.com/swaywm/sway.git
synced 2024-12-29 16:36:26 +01:00
Merge pull request #2635 from RedSoxFan/fix-bg-special
Handle shell special characters in bg file path
This commit is contained in:
commit
0f0d0c7f9b
3 changed files with 11 additions and 24 deletions
|
@ -391,14 +391,12 @@ struct cmd_results *config_command(char *exec) {
|
||||||
// Var replacement, for all but first argument of set
|
// Var replacement, for all but first argument of set
|
||||||
// TODO commands
|
// TODO commands
|
||||||
for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) {
|
for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) {
|
||||||
|
if (*argv[i] == '\"' || *argv[i] == '\'') {
|
||||||
|
strip_quotes(argv[i]);
|
||||||
|
}
|
||||||
argv[i] = do_var_replacement(argv[i]);
|
argv[i] = do_var_replacement(argv[i]);
|
||||||
unescape_string(argv[i]);
|
unescape_string(argv[i]);
|
||||||
}
|
}
|
||||||
// Strip quotes for first argument.
|
|
||||||
// TODO This part needs to be handled much better
|
|
||||||
if (argc>1 && (*argv[1] == '\"' || *argv[1] == '\'')) {
|
|
||||||
strip_quotes(argv[1]);
|
|
||||||
}
|
|
||||||
if (handler->handle) {
|
if (handler->handle) {
|
||||||
results = handler->handle(argc-1, argv+1);
|
results = handler->handle(argc-1, argv+1);
|
||||||
} else {
|
} else {
|
||||||
|
@ -422,11 +420,6 @@ struct cmd_results *config_subcommand(char **argv, int argc,
|
||||||
char *input = argv[0] ? argv[0] : "(empty)";
|
char *input = argv[0] ? argv[0] : "(empty)";
|
||||||
return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command");
|
return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command");
|
||||||
}
|
}
|
||||||
// Strip quotes for first argument.
|
|
||||||
// TODO This part needs to be handled much better
|
|
||||||
if (argc > 1 && (*argv[1] == '\"' || *argv[1] == '\'')) {
|
|
||||||
strip_quotes(argv[1]);
|
|
||||||
}
|
|
||||||
if (handler->handle) {
|
if (handler->handle) {
|
||||||
return handler->handle(argc - 1, argv + 1);
|
return handler->handle(argc - 1, argv + 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,19 +123,13 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
free(src);
|
free(src);
|
||||||
} else {
|
} else {
|
||||||
// Escape spaces and quotes in the final path for swaybg
|
// Escape double quotes in the final path for swaybg
|
||||||
for (size_t i = 0; i < strlen(src); i++) {
|
for (size_t i = 0; i < strlen(src); i++) {
|
||||||
switch (src[i]) {
|
if (src[i] == '"') {
|
||||||
case ' ':
|
src = realloc(src, strlen(src) + 2);
|
||||||
case '\'':
|
memmove(src + i + 1, src + i, strlen(src + i) + 1);
|
||||||
case '\"':
|
*(src + i) = '\\';
|
||||||
src = realloc(src, strlen(src) + 2);
|
i++;
|
||||||
memmove(src + i + 1, src + i, strlen(src + i) + 1);
|
|
||||||
*(src + i) = '\\';
|
|
||||||
i++;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -237,7 +237,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) {
|
||||||
wlr_log(WLR_DEBUG, "Setting background for output %d to %s",
|
wlr_log(WLR_DEBUG, "Setting background for output %d to %s",
|
||||||
output_i, oc->background);
|
output_i, oc->background);
|
||||||
|
|
||||||
size_t len = snprintf(NULL, 0, "%s %d %s %s %s",
|
size_t len = snprintf(NULL, 0, "%s %d \"%s\" %s %s",
|
||||||
config->swaybg_command ? config->swaybg_command : "swaybg",
|
config->swaybg_command ? config->swaybg_command : "swaybg",
|
||||||
output_i, oc->background, oc->background_option,
|
output_i, oc->background, oc->background_option,
|
||||||
oc->background_fallback ? oc->background_fallback : "");
|
oc->background_fallback ? oc->background_fallback : "");
|
||||||
|
@ -246,7 +246,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) {
|
||||||
wlr_log(WLR_DEBUG, "Unable to allocate swaybg command");
|
wlr_log(WLR_DEBUG, "Unable to allocate swaybg command");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
snprintf(command, len + 1, "%s %d %s %s %s",
|
snprintf(command, len + 1, "%s %d \"%s\" %s %s",
|
||||||
config->swaybg_command ? config->swaybg_command : "swaybg",
|
config->swaybg_command ? config->swaybg_command : "swaybg",
|
||||||
output_i, oc->background, oc->background_option,
|
output_i, oc->background, oc->background_option,
|
||||||
oc->background_fallback ? oc->background_fallback : "");
|
oc->background_fallback ? oc->background_fallback : "");
|
||||||
|
|
Loading…
Reference in a new issue