static void parse_git_color_option(enum line_type type, char *value) { struct line_info *info = get_line_info(type); const char *argv[SIZEOF_ARG]; int argc = 0; bool first_color = TRUE; int i; if (!argv_from_string(argv, &argc, value)) return; info->fg = COLOR_DEFAULT; info->bg = COLOR_DEFAULT; info->attr = 0; for (i = 0; i < argc; i++) { int attr = 0; if (set_attribute(&attr, argv[i])) { info->attr |= attr; } else if (set_color(&attr, argv[i])) { if (first_color) info->fg = attr; else info->bg = attr; first_color = FALSE; } } }
/* Wants: object fgcolor bgcolor [attribute] */ static enum status_code option_color_command(int argc, const char *argv[]) { struct line_rule rule = {}; const char *prefix = NULL; struct line_info *info; enum status_code code; if (argc < 3) return ERROR_WRONG_NUMBER_OF_ARGUMENTS; code = parse_color_name(argv[0], &rule, &prefix); if (code != SUCCESS) return code; info = add_line_rule(prefix, &rule); if (!info) { static const struct enum_map_entry obsolete[] = { ENUM_MAP_ENTRY("main-delim", LINE_DELIMITER), ENUM_MAP_ENTRY("main-date", LINE_DATE), ENUM_MAP_ENTRY("main-author", LINE_AUTHOR), ENUM_MAP_ENTRY("blame-id", LINE_ID), }; int index; if (!map_enum(&index, obsolete, argv[0])) return ERROR_UNKNOWN_COLOR_NAME; info = get_line_info(NULL, index); } if (!set_color(&info->fg, argv[1]) || !set_color(&info->bg, argv[2])) return ERROR_UNKNOWN_COLOR; info->attr = 0; while (argc-- > 3) { int attr; if (!set_attribute(&attr, argv[argc])) return ERROR_UNKNOWN_ATTRIBUTE; info->attr |= attr; } return SUCCESS; }
/* Wants: object fgcolor bgcolor [attribute] */ static enum status_code option_color_command(int argc, const char *argv[]) { struct line_info *info; if (argc < 3) return ERROR_WRONG_NUMBER_OF_ARGUMENTS; if (*argv[0] == '"' || *argv[0] == '\'') { info = add_custom_color(argv[0]); } else { info = find_line_info(argv[0], strlen(argv[0]), FALSE); } if (!info) { static const struct enum_map_entry obsolete[] = { ENUM_MAP_ENTRY("main-delim", LINE_DELIMITER), ENUM_MAP_ENTRY("main-date", LINE_DATE), ENUM_MAP_ENTRY("main-author", LINE_AUTHOR), ENUM_MAP_ENTRY("blame-id", LINE_ID), }; int index; if (!map_enum(&index, obsolete, argv[0])) return ERROR_UNKNOWN_COLOR_NAME; info = get_line_info(index); } if (!set_color(&info->fg, argv[1]) || !set_color(&info->bg, argv[2])) return ERROR_UNKNOWN_COLOR; info->attr = 0; while (argc-- > 3) { int attr; if (!set_attribute(&attr, argv[argc])) return ERROR_UNKNOWN_ATTRIBUTE; info->attr |= attr; } return SUCCESS; }