This is the second (and preferred) source for color information. This
will override $LS_COLORS.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 Documentation/config.txt | 11 +++++++++++
 ls_colors.c              | 26 ++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 73c8973..3fb754e 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -909,6 +909,17 @@ color.status.<slot>::
        to red). The values of these variables may be specified as in
        color.branch.<slot>.
 
+color.ls.<slot>::
+       Use customized color for file name colorization. If not set
+       and the environment variable LS_COLORS is set, color settings
+       from $LS_COLORS are used. `<slot>` can be `normal`, `file`,
+       `directory`, `symlink`, `fifo`, `socket`, `block`, `char`,
+       `missing`, `orphan`, `executable`, `door`, `setuid`, `setgid`,
+       `sticky`, `otherwritable`, `stickyotherwritable`, `cap`,
+       `multihardlink`. The values of these variables may be
+       specified as in color.branch.<slot>.
+
+
 color.ui::
        This variable determines the default value for variables such
        as `color.diff` and `color.grep` that control the use of color
diff --git a/ls_colors.c b/ls_colors.c
index eb944f4..cef5a92 100644
--- a/ls_colors.c
+++ b/ls_colors.c
@@ -68,6 +68,14 @@ static const char *const indicator_name[] = {
        NULL
 };
 
+static const char* const config_name[] = {
+       "", "", "", "", "normal", "file", "directory", "symlink",
+       "fifo", "socket", "block", "char", "missing", "orphan", "executable",
+       "door", "setuid", "setgid", "sticky", "otherwritable",
+       "stickyotherwritable", "cap", "multihardlink", "",
+       NULL
+};
+
 struct bin_str {
        size_t len;                     /* Number of bytes */
        const char *string;             /* Pointer to the same */
@@ -285,6 +293,23 @@ static int get_funky_string(char **dest, const char **src, 
int equals_end,
        return state != ST_ERROR;
 }
 
+static int ls_colors_config(const char *var, const char *value, void *cb)
+{
+       int slot;
+       if (!starts_with(var, "color.ls."))
+               return 0;
+       var += 9;
+       for (slot = 0; config_name[slot]; slot++)
+               if (!strcasecmp(var, config_name[slot]))
+                       break;
+       if (!config_name[slot])
+               return 0;
+       if (!value)
+               return config_error_nonbool(var);
+       color_parse(value, var, ls_colors[slot]);
+       return 0;
+}
+
 void parse_ls_color(void)
 {
        const char *p;                  /* Pointer to character being parsed */
@@ -395,4 +420,5 @@ void parse_ls_color(void)
 
        if (!strcmp(ls_colors[LS_LN], "target"))
                color_symlink_as_referent = 1;
+       git_config(ls_colors_config, NULL);
 }
-- 
1.9.1.345.ga1a145c

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to