Esempio n. 1
0
static void
set_git_color_option(const char *name, char *value)
{
	static const struct enum_map_entry color_option_map[] = {
		ENUM_MAP_ENTRY("branch.current", LINE_MAIN_HEAD),
		ENUM_MAP_ENTRY("branch.local", LINE_MAIN_REF),
		ENUM_MAP_ENTRY("branch.plain", LINE_MAIN_REF),
		ENUM_MAP_ENTRY("branch.remote", LINE_MAIN_REMOTE),

		ENUM_MAP_ENTRY("diff.meta", LINE_DIFF_HEADER),
		ENUM_MAP_ENTRY("diff.meta", LINE_DIFF_INDEX),
		ENUM_MAP_ENTRY("diff.meta", LINE_DIFF_OLDMODE),
		ENUM_MAP_ENTRY("diff.meta", LINE_DIFF_NEWMODE),
		ENUM_MAP_ENTRY("diff.frag", LINE_DIFF_CHUNK),
		ENUM_MAP_ENTRY("diff.old", LINE_DIFF_DEL),
		ENUM_MAP_ENTRY("diff.new", LINE_DIFF_ADD),

		//ENUM_MAP_ENTRY("diff.commit", LINE_DIFF_ADD),

		ENUM_MAP_ENTRY("status.branch", LINE_STAT_HEAD),
		//ENUM_MAP_ENTRY("status.nobranch", LINE_STAT_HEAD),
		ENUM_MAP_ENTRY("status.added", LINE_STAT_STAGED),
		ENUM_MAP_ENTRY("status.updated", LINE_STAT_STAGED),
		ENUM_MAP_ENTRY("status.changed", LINE_STAT_UNSTAGED),
		ENUM_MAP_ENTRY("status.untracked", LINE_STAT_UNTRACKED),
	};
	int type = LINE_NONE;

	if (opt_read_git_colors && map_enum(&type, color_option_map, name)) {
		parse_git_color_option(type, value);
	}
}
Esempio n. 2
0
static void
set_git_color_option(const char *name, char *value)
{
	struct line_info parsed = {};
	struct line_info *color = NULL;
	size_t namelen = strlen(name);
	int i;

	if (!opt_git_colors)
		return;

	for (i = 0; opt_git_colors[i]; i++) {
		struct line_rule rule = {};
		const char *prefix = NULL;
		struct line_info *info;
		const char *alias = opt_git_colors[i];
		const char *sep = strchr(alias, '=');

		if (!sep || namelen != sep - alias ||
		    string_enum_compare(name, alias, namelen))
			continue;

		if (!color) {
			color = parse_git_color_option(&parsed, value);
			if (!color)
				return;
		}

		if (parse_color_name(sep + 1, &rule, &prefix) == SUCCESS &&
		    (info = add_line_rule(prefix, &rule))) {
			info->fg = parsed.fg;
			info->bg = parsed.bg;
			info->attr = parsed.attr;
		}
	}
}