mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Allow colour to be spelt as color, from Boris Verkhovsky. GitHub issue
2317.
This commit is contained in:
		
							
								
								
									
										42
									
								
								options.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								options.c
									
									
									
									
									
								
							@@ -95,6 +95,18 @@ options_cmp(struct options_entry *lhs, struct options_entry *rhs)
 | 
			
		||||
	return (strcmp(lhs->name, rhs->name));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *
 | 
			
		||||
options_map_name(const char *name)
 | 
			
		||||
{
 | 
			
		||||
	const struct options_name_map	*map;
 | 
			
		||||
 | 
			
		||||
	for (map = options_other_names; map->from != NULL; map++) {
 | 
			
		||||
		if (strcmp(map->from, name) == 0)
 | 
			
		||||
			return (map->to);
 | 
			
		||||
	}
 | 
			
		||||
	return (name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct options_table_entry *
 | 
			
		||||
options_parent_table_entry(struct options *oo, const char *s)
 | 
			
		||||
{
 | 
			
		||||
@@ -204,10 +216,14 @@ options_next(struct options_entry *o)
 | 
			
		||||
struct options_entry *
 | 
			
		||||
options_get_only(struct options *oo, const char *name)
 | 
			
		||||
{
 | 
			
		||||
	struct options_entry	o;
 | 
			
		||||
	struct options_entry	o = { .name = name }, *found;
 | 
			
		||||
 | 
			
		||||
	o.name = name;
 | 
			
		||||
	return (RB_FIND(options_tree, &oo->tree, &o));
 | 
			
		||||
	found = RB_FIND(options_tree, &oo->tree, &o);
 | 
			
		||||
	if (found == NULL) {
 | 
			
		||||
		o.name = options_map_name(name);
 | 
			
		||||
		return (RB_FIND(options_tree, &oo->tree, &o));
 | 
			
		||||
	}
 | 
			
		||||
	return (found);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct options_entry *
 | 
			
		||||
@@ -608,19 +624,21 @@ char *
 | 
			
		||||
options_match(const char *s, int *idx, int *ambiguous)
 | 
			
		||||
{
 | 
			
		||||
	const struct options_table_entry	*oe, *found;
 | 
			
		||||
	char					*name;
 | 
			
		||||
	char					*parsed;
 | 
			
		||||
	const char				*name;
 | 
			
		||||
	size_t					 namelen;
 | 
			
		||||
 | 
			
		||||
	name = options_parse(s, idx);
 | 
			
		||||
	if (name == NULL)
 | 
			
		||||
	parsed = options_parse(s, idx);
 | 
			
		||||
	if (parsed == NULL)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	namelen = strlen(name);
 | 
			
		||||
 | 
			
		||||
	if (*name == '@') {
 | 
			
		||||
	if (*parsed == '@') {
 | 
			
		||||
		*ambiguous = 0;
 | 
			
		||||
		return (name);
 | 
			
		||||
		return (parsed);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	name = options_map_name(parsed);
 | 
			
		||||
	namelen = strlen(name);
 | 
			
		||||
 | 
			
		||||
	found = NULL;
 | 
			
		||||
	for (oe = options_table; oe->name != NULL; oe++) {
 | 
			
		||||
		if (strcmp(oe->name, name) == 0) {
 | 
			
		||||
@@ -630,13 +648,13 @@ options_match(const char *s, int *idx, int *ambiguous)
 | 
			
		||||
		if (strncmp(oe->name, name, namelen) == 0) {
 | 
			
		||||
			if (found != NULL) {
 | 
			
		||||
				*ambiguous = 1;
 | 
			
		||||
				free(name);
 | 
			
		||||
				free(parsed);
 | 
			
		||||
				return (NULL);
 | 
			
		||||
			}
 | 
			
		||||
			found = oe;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	free(name);
 | 
			
		||||
	free(parsed);
 | 
			
		||||
	if (found == NULL) {
 | 
			
		||||
		*ambiguous = 0;
 | 
			
		||||
		return (NULL);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user