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

Helped-by: Michael Blume <blume.m...@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 Documentation/config.txt | 11 +++++++++++
 ls_colors.c              | 30 +++++++++++++++++++++++++++++-
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 9220725..2090866 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -940,6 +940,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 e743315..2dc2d39 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, ls_colors[slot]);
+       return 0;
+}
+
 void parse_ls_color(void)
 {
        const char *p;                  /* Pointer to character being parsed */
@@ -297,8 +322,10 @@ void parse_ls_color(void)
        char *start;
        size_t len;
 
-       if ((p = getenv("LS_COLORS")) == NULL || *p == '\0')
+       if ((p = getenv("LS_COLORS")) == NULL || *p == '\0') {
+               git_config(ls_colors_config, NULL);
                return;
+       }
 
        ext = NULL;
        strcpy(label, "??");
@@ -395,4 +422,5 @@ void parse_ls_color(void)
 
        if (!strcmp(ls_colors[LS_LN], "target"))
                color_symlink_as_referent = 1;
+       git_config(ls_colors_config, NULL);
 }
-- 
2.3.0.rc1.137.g477eb31

--
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