Merge branch 'jc/color'
* jc/color: git-config --get-color: get configured color "color.diff = true" is not "always" anymore.
This commit is contained in:
commit
cd390763d4
@ -20,6 +20,7 @@ SYNOPSIS
|
||||
'git-config' [<file-option>] --rename-section old_name new_name
|
||||
'git-config' [<file-option>] --remove-section name
|
||||
'git-config' [<file-option>] [-z|--null] -l | --list
|
||||
'git-config' [<file-option>] --get-color name [default]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@ -134,6 +135,12 @@ See also <<FILES>>.
|
||||
output without getting confused e.g. by values that
|
||||
contain line breaks.
|
||||
|
||||
--get-color name default::
|
||||
|
||||
Find the color configured for `name` (e.g. `color.diff.new`) and
|
||||
output it as the ANSI color escape sequence to the standard
|
||||
output. The optional `default` parameter is used instead, if
|
||||
there is no color configured for `name`.
|
||||
|
||||
[[FILES]]
|
||||
FILES
|
||||
@ -292,6 +299,15 @@ To add a new proxy, without altering any of the existing ones, use
|
||||
% git config core.gitproxy '"proxy-command" for example.com'
|
||||
------------
|
||||
|
||||
An example to use customized color from the configuration in your
|
||||
script:
|
||||
|
||||
------------
|
||||
#!/bin/sh
|
||||
WS=$(git config --get-color color.diff.whitespace "blue reverse")
|
||||
RESET=$(git config --get-color "" "reset")
|
||||
echo "${WS}your whitespace color or blue reverse${RESET}"
|
||||
------------
|
||||
|
||||
include::config.txt[]
|
||||
|
||||
|
@ -1,8 +1,9 @@
|
||||
#include "builtin.h"
|
||||
#include "cache.h"
|
||||
#include "color.h"
|
||||
|
||||
static const char git_config_set_usage[] =
|
||||
"git-config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list";
|
||||
"git-config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list | --get-color var [default]";
|
||||
|
||||
static char *key;
|
||||
static regex_t *key_regexp;
|
||||
@ -161,6 +162,53 @@ char *normalize_value(const char *key, const char *value)
|
||||
return normalized;
|
||||
}
|
||||
|
||||
static int get_color_found;
|
||||
static const char *get_color_slot;
|
||||
static char parsed_color[COLOR_MAXLEN];
|
||||
|
||||
static int git_get_color_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, get_color_slot)) {
|
||||
color_parse(value, var, parsed_color);
|
||||
get_color_found = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_color(int argc, const char **argv)
|
||||
{
|
||||
/*
|
||||
* grab the color setting for the given slot from the configuration,
|
||||
* or parse the default value if missing, and return ANSI color
|
||||
* escape sequence.
|
||||
*
|
||||
* e.g.
|
||||
* git config --get-color color.diff.whitespace "blue reverse"
|
||||
*/
|
||||
const char *def_color = NULL;
|
||||
|
||||
switch (argc) {
|
||||
default:
|
||||
usage(git_config_set_usage);
|
||||
case 2:
|
||||
def_color = argv[1];
|
||||
/* fallthru */
|
||||
case 1:
|
||||
get_color_slot = argv[0];
|
||||
break;
|
||||
}
|
||||
|
||||
get_color_found = 0;
|
||||
parsed_color[0] = '\0';
|
||||
git_config(git_get_color_config);
|
||||
|
||||
if (!get_color_found && def_color)
|
||||
color_parse(def_color, "command line", parsed_color);
|
||||
|
||||
fputs(parsed_color, stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmd_config(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int nongit = 0;
|
||||
@ -234,8 +282,9 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
} else if (!strcmp(argv[1], "--get-color")) {
|
||||
return get_color(argc-2, argv+2);
|
||||
} else
|
||||
break;
|
||||
argc--;
|
||||
argv++;
|
||||
|
32
color.c
32
color.c
@ -118,21 +118,27 @@ bad:
|
||||
|
||||
int git_config_colorbool(const char *var, const char *value)
|
||||
{
|
||||
if (!value)
|
||||
return 1;
|
||||
if (!strcasecmp(value, "auto")) {
|
||||
if (isatty(1) || (pager_in_use && pager_use_color)) {
|
||||
char *term = getenv("TERM");
|
||||
if (term && strcmp(term, "dumb"))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (value) {
|
||||
if (!strcasecmp(value, "never"))
|
||||
return 0;
|
||||
if (!strcasecmp(value, "always"))
|
||||
return 1;
|
||||
if (!strcasecmp(value, "auto"))
|
||||
goto auto_color;
|
||||
}
|
||||
if (!strcasecmp(value, "never"))
|
||||
|
||||
/* Missing or explicit false to turn off colorization */
|
||||
if (!git_config_bool(var, value))
|
||||
return 0;
|
||||
if (!strcasecmp(value, "always"))
|
||||
return 1;
|
||||
return git_config_bool(var, value);
|
||||
|
||||
/* any normal truth value defaults to 'auto' */
|
||||
auto_color:
|
||||
if (isatty(1) || (pager_in_use && pager_use_color)) {
|
||||
char *term = getenv("TERM");
|
||||
if (term && strcmp(term, "dumb"))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int color_vfprintf(FILE *fp, const char *color, const char *fmt,
|
||||
|
Loading…
Reference in New Issue
Block a user