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); } }
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; } } }