mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	cmd_mode: allow runtime creation and modification
This allows for modes to be created, bindings to be added to modes, and bindings to be removed from modes at runtime. Additionally, this also allows for `mode <mode>` to be deferred in the config to set an initial mode.
This commit is contained in:
		
							parent
							
								
									fc3253cc35
								
							
						
					
					
						commit
						d0d01810f3
					
				
					 1 changed files with 9 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -15,6 +15,9 @@ static struct cmd_handler mode_handlers[] = {
 | 
			
		|||
	{ "bindswitch", cmd_bindswitch },
 | 
			
		||||
	{ "bindsym", cmd_bindsym },
 | 
			
		||||
	{ "set", cmd_set },
 | 
			
		||||
	{ "unbindcode", cmd_unbindcode },
 | 
			
		||||
	{ "unbindswitch", cmd_unbindswitch },
 | 
			
		||||
	{ "unbindsym", cmd_unbindsym },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct cmd_results *cmd_mode(int argc, char **argv) {
 | 
			
		||||
| 
						 | 
				
			
			@ -23,10 +26,6 @@ struct cmd_results *cmd_mode(int argc, char **argv) {
 | 
			
		|||
		return error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (argc > 1 && !config->reading) {
 | 
			
		||||
		return cmd_results_new(CMD_FAILURE, "Can only be used in config file");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bool pango = strcmp(*argv, "--pango_markup") == 0;
 | 
			
		||||
	if (pango) {
 | 
			
		||||
		argc--; argv++;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +34,10 @@ struct cmd_results *cmd_mode(int argc, char **argv) {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (config->reading && argc == 1) {
 | 
			
		||||
		return cmd_results_new(CMD_DEFER, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	char *mode_name = *argv;
 | 
			
		||||
	strip_quotes(mode_name);
 | 
			
		||||
	struct sway_mode *mode = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -64,14 +67,12 @@ struct cmd_results *cmd_mode(int argc, char **argv) {
 | 
			
		|||
		error = cmd_results_new(CMD_INVALID, "Unknown mode `%s'", mode_name);
 | 
			
		||||
		return error;
 | 
			
		||||
	}
 | 
			
		||||
	if ((config->reading && argc > 1) || (!config->reading && argc == 1)) {
 | 
			
		||||
		sway_log(SWAY_DEBUG, "Switching to mode `%s' (pango=%d)",
 | 
			
		||||
				mode->name, mode->pango);
 | 
			
		||||
	}
 | 
			
		||||
	// Set current mode
 | 
			
		||||
	config->current_mode = mode;
 | 
			
		||||
	if (argc == 1) {
 | 
			
		||||
		// trigger IPC mode event
 | 
			
		||||
		sway_log(SWAY_DEBUG, "Switching to mode `%s' (pango=%d)",
 | 
			
		||||
				mode->name, mode->pango);
 | 
			
		||||
		ipc_event_mode(config->current_mode->name,
 | 
			
		||||
				config->current_mode->pango);
 | 
			
		||||
		return cmd_results_new(CMD_SUCCESS, NULL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue