mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 17:24:18 +00:00 
			
		
		
		
	Allow choice options (multiple states) to be toggled between states 0
and 1.
This commit is contained in:
		@@ -289,9 +289,15 @@ cmd_set_option_set(struct cmd *self, struct cmd_q *cmdq,
 | 
			
		||||
{
 | 
			
		||||
	struct options_entry	*o;
 | 
			
		||||
 | 
			
		||||
	if (oe->type != OPTIONS_TABLE_FLAG && value == NULL) {
 | 
			
		||||
		cmdq_error(cmdq, "empty value");
 | 
			
		||||
		return (-1);
 | 
			
		||||
	switch (oe->type) {
 | 
			
		||||
	case OPTIONS_TABLE_FLAG:
 | 
			
		||||
	case OPTIONS_TABLE_CHOICE:
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		if (value == NULL) {
 | 
			
		||||
			cmdq_error(cmdq, "empty value");
 | 
			
		||||
			return (-1);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	o = NULL;
 | 
			
		||||
@@ -455,21 +461,27 @@ cmd_set_option_choice(unused struct cmd *self, struct cmd_q *cmdq,
 | 
			
		||||
	const char	**choicep;
 | 
			
		||||
	int		  n, choice = -1;
 | 
			
		||||
 | 
			
		||||
	n = 0;
 | 
			
		||||
	for (choicep = oe->choices; *choicep != NULL; choicep++) {
 | 
			
		||||
		n++;
 | 
			
		||||
		if (strncmp(*choicep, value, strlen(value)) != 0)
 | 
			
		||||
			continue;
 | 
			
		||||
	if (value == NULL) {
 | 
			
		||||
		choice = options_get_number(oo, oe->name);
 | 
			
		||||
		if (choice < 2)
 | 
			
		||||
			choice = !choice;
 | 
			
		||||
	} else {
 | 
			
		||||
		n = 0;
 | 
			
		||||
		for (choicep = oe->choices; *choicep != NULL; choicep++) {
 | 
			
		||||
			n++;
 | 
			
		||||
			if (strncmp(*choicep, value, strlen(value)) != 0)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
		if (choice != -1) {
 | 
			
		||||
			cmdq_error(cmdq, "ambiguous value: %s", value);
 | 
			
		||||
			if (choice != -1) {
 | 
			
		||||
				cmdq_error(cmdq, "ambiguous value: %s", value);
 | 
			
		||||
				return (NULL);
 | 
			
		||||
			}
 | 
			
		||||
			choice = n - 1;
 | 
			
		||||
		}
 | 
			
		||||
		if (choice == -1) {
 | 
			
		||||
			cmdq_error(cmdq, "unknown value: %s", value);
 | 
			
		||||
			return (NULL);
 | 
			
		||||
		}
 | 
			
		||||
		choice = n - 1;
 | 
			
		||||
	}
 | 
			
		||||
	if (choice == -1) {
 | 
			
		||||
		cmdq_error(cmdq, "unknown value: %s", value);
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (options_set_number(oo, oe->name, choice));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user