@ -143,44 +143,34 @@ static int handler_compare(const void *_a, const void *_b) {
 
			
		
	
		
			
				
						return  strcasecmp ( a - > command ,  b - > command ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					struct  cmd_handler  * find_handler ( char  * line ,  struct  cmd_handler  * cmd_handlers ,  
			
		
	
		
			
				
							int  handlers_size )  { 
 
			
		
	
		
			
				
						struct  cmd_handler  d  =  {  . command = line  } ; 
 
			
		
	
		
			
				
						struct  cmd_handler  * res  =  NULL ; 
 
			
		
	
		
			
				
						sway_log ( SWAY_DEBUG ,  " find_handler(%s) " ,  line ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						bool  config_loading  =  config - > reading  | |  ! config - > active ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  ( ! config_loading )  { 
 
			
		
	
		
			
				
							res  =  bsearch ( & d ,  command_handlers , 
 
			
		
	
		
			
				
									sizeof ( command_handlers )  /  sizeof ( struct  cmd_handler ) , 
 
			
		
	
		
			
				
									sizeof ( struct  cmd_handler ) ,  handler_compare ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( res )  { 
 
			
		
	
		
			
				
								return  res ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					struct  cmd_handler  * find_handler ( char  * line ,  struct  cmd_handler  * handlers ,  
			
		
	
		
			
				
							size_t  handlers_size )  { 
 
			
		
	
		
			
				
						if  ( ! handlers  | |  ! handlers_size )  { 
 
			
		
	
		
			
				
							return  NULL ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						struct  cmd_handler  query  =  {  . command  =  line  } ; 
 
			
		
	
		
			
				
						return  bsearch ( & query ,  handlers , 
 
			
		
	
		
			
				
								handlers_size  /  sizeof ( struct  cmd_handler ) , 
 
			
		
	
		
			
				
								sizeof ( struct  cmd_handler ) ,  handler_compare ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  struct  cmd_handler  * find_handler_ex ( char  * line ,  
			
		
	
		
			
				
							struct  cmd_handler  * config_handlers ,  size_t  config_handlers_size , 
 
			
		
	
		
			
				
							struct  cmd_handler  * command_handlers ,  size_t  command_handlers_size , 
 
			
		
	
		
			
				
							struct  cmd_handler  * handlers ,  size_t  handlers_size )  { 
 
			
		
	
		
			
				
						struct  cmd_handler  * handler  =  NULL ; 
 
			
		
	
		
			
				
						if  ( config - > reading )  { 
 
			
		
	
		
			
				
							res  =  bsearch ( & d ,  config_handlers , 
 
			
		
	
		
			
				
									sizeof ( config_handlers )  /  sizeof ( struct  cmd_handler ) , 
 
			
		
	
		
			
				
									sizeof ( struct  cmd_handler ) ,  handler_compare ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( res )  { 
 
			
		
	
		
			
				
								return  res ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							handler  =  find_handler ( line ,  config_handlers ,  config_handlers_size ) ; 
 
			
		
	
		
			
				
						}  else  if  ( config - > active )  { 
 
			
		
	
		
			
				
							handler  =  find_handler ( line ,  command_handlers ,  command_handlers_size ) ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						return  handler  ?  handler  :  find_handler ( line ,  handlers ,  handlers_size ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  ( ! cmd_handlers )  { 
 
			
		
	
		
			
				
							cmd_handlers  =  handlers ; 
 
			
		
	
		
			
				
							handlers_size  =  sizeof ( handlers ) ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						res  =  bsearch ( & d ,  cmd_handlers , 
 
			
		
	
		
			
				
								handlers_size  /  sizeof ( struct  cmd_handler ) , 
 
			
		
	
		
			
				
								sizeof ( struct  cmd_handler ) ,  handler_compare ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  res ; 
 
			
		
	
		
			
				
					static  struct  cmd_handler  * find_core_handler ( char  * line )  {  
			
		
	
		
			
				
						return  find_handler_ex ( line ,  config_handlers ,  sizeof ( config_handlers ) , 
 
			
		
	
		
			
				
								command_handlers ,  sizeof ( command_handlers ) , 
 
			
		
	
		
			
				
								handlers ,  sizeof ( handlers ) ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  void  set_config_node ( struct  sway_node  * node )  {  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -270,7 +260,7 @@ list_t *execute_command(char *_exec, struct sway_seat *seat,
 
			
		
	
		
			
				
									} 
 
			
		
	
		
			
				
								} 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							struct  cmd_handler  * handler  =  find_ handler( argv [ 0 ] ,  NULL ,  0 ) ; 
 
			
		
	
		
			
				
							struct  cmd_handler  * handler  =  find_ core_ handler( argv [ 0 ] ) ; 
 
			
		
	
		
			
				
							if  ( ! handler )  { 
 
			
		
	
		
			
				
								list_add ( res_list ,  cmd_results_new ( CMD_INVALID , 
 
			
		
	
		
			
				
										" Unknown/invalid command '%s' " ,  argv [ 0 ] ) ) ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -360,7 +350,7 @@ struct cmd_results *config_command(char *exec, char **new_block) {
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// Determine the command handler
 
 
			
		
	
		
			
				
						sway_log ( SWAY_INFO ,  " Config command: %s " ,  exec ) ; 
 
			
		
	
		
			
				
						struct  cmd_handler  * handler  =  find_ handler( argv [ 0 ] ,  NULL ,  0 ) ; 
 
			
		
	
		
			
				
						struct  cmd_handler  * handler  =  find_ core_ handler( argv [ 0 ] ) ; 
 
			
		
	
		
			
				
						if  ( ! handler  | |  ! handler - > handle )  { 
 
			
		
	
		
			
				
							const  char  * error  =  handler 
 
			
		
	
		
			
				
								?  " Command '%s' is shimmed, but unimplemented "