mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05: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…
	
	Add table
		Add a link
		
	
		Reference in a new issue