summaryrefslogtreecommitdiff
path: root/sys-apps/coreutils/files/coreutils-9.0-r1-0001-dircolors-consider-COLORTERM-sufficient-for-color.patch
blob: e77766cbfe3a5aeccf40a6e7df735d7dcafd28d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
From cbb451b63faee375415691c1abc8a6fd3e1677a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
Date: Sat, 12 Feb 2022 22:54:07 +0100
Subject: [PATCH] dircolors: consider COLORTERM as well as TERM env vars

COLORTERM is an environment used usually to expose truecolor support in
terminal emulators.  Therefore support matches on that in addition
to TERM.  Also set the default COLORTERM match pattern so that
we apply colors if COLORTERM is any value.

This implicitly supports a terminal like "foot"
without a need for an explicit TERM entry.

* NEWS: Mention the new feature.
* src/dircolors.c (main): Match COLORTERM like we do for TERM.
* src/dircolors.hin: Add default config to match any COLORTERM.
* tests/misc/dircolors.pl: Add test cases.
---
Backported from coreutils 75c9fc6740e93dba95f63a1e5e92bd5cf17f1743.
See also https://lists.gnu.org/archive/html/coreutils/2022-02/msg00019.html

 NEWS                    |  3 +++
 src/dircolors.c         | 15 ++++++++++++++-
 src/dircolors.hin       |  7 +++++--
 tests/misc/dircolors.pl | 14 ++++++++++++++
 4 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index f2fbcbb..646c132 100644
--- a/NEWS
+++ b/NEWS
@@ -64,6 +64,9 @@ GNU coreutils NEWS                                    -*- outline -*-
   on (1024*5) buffer boundaries
   [bug introduced in coreutils-8.31]
 
+  dircolors will now also match COLORTERM in addition to TERM environment
+  variables.  The default config will apply colors with any COLORTERM set.
+
 ** Changes in behavior
 
   cp and install now default to copy-on-write (COW) if available.
diff --git a/src/dircolors.c b/src/dircolors.c
index b765ded..64ff665 100644
--- a/src/dircolors.c
+++ b/src/dircolors.c
@@ -243,6 +243,7 @@ dc_parse_stream (FILE *fp, char const *filename)
   size_t input_line_size = 0;
   char const *line;
   char const *term;
+  char const *colorterm;
   bool ok = true;
 
   /* State for the parser.  */
@@ -253,6 +254,11 @@ dc_parse_stream (FILE *fp, char const *filename)
   if (term == NULL || *term == '\0')
     term = "none";
 
+  /* Also match $COLORTERM.  */
+  colorterm = getenv ("COLORTERM");
+  if (colorterm == NULL)
+    colorterm = "";  /* Doesn't match default "?*"  */
+
   while (true)
     {
       char *keywd, *arg;
@@ -299,10 +305,17 @@ dc_parse_stream (FILE *fp, char const *filename)
           else if (state != ST_TERMSURE)
             state = ST_TERMNO;
         }
+      else if (c_strcasecmp (keywd, "COLORTERM") == 0)
+        {
+          if (fnmatch (arg, colorterm, 0) == 0)
+            state = ST_TERMSURE;
+          else if (state != ST_TERMSURE)
+            state = ST_TERMNO;
+        }
       else
         {
           if (state == ST_TERMSURE)
-            state = ST_TERMYES; /* Another TERM can cancel */
+            state = ST_TERMYES;  /* Another {COLOR,}TERM can cancel.  */
 
           if (state != ST_TERMNO)
             {
diff --git a/src/dircolors.hin b/src/dircolors.hin
index b5d6452..6d2d3a4 100644
--- a/src/dircolors.hin
+++ b/src/dircolors.hin
@@ -8,8 +8,11 @@
 # The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
 # slackware version of dircolors) are recognized but ignored.
 
-# Below are TERM entries, which can be a glob patterns, to match
-# against the TERM environment variable to determine if it is colorizable.
+# Global config options can be specified before TERM or COLORTERM entries
+
+# Below are TERM or COLORTERM entries, which can be glob patterns, which
+# restrict following config to systems with matching environment variables.
+COLORTERM ?*
 TERM Eterm
 TERM ansi
 TERM *color*
diff --git a/tests/misc/dircolors.pl b/tests/misc/dircolors.pl
index 2c57104..464acfd 100755
--- a/tests/misc/dircolors.pl
+++ b/tests/misc/dircolors.pl
@@ -42,6 +42,20 @@ my @Tests =
      ['term-4', '-b', {IN => "TERM N*match\nowt 40;33\n"},
       {OUT => "LS_COLORS='';\nexport LS_COLORS\n"}],
 
+     ['print-clash1', '-p', '--print-ls',
+      {ERR => "dircolors: options --print-database and --print-ls-colors " .
+              "are mutually exclusive\n" .
+              "Try 'dircolors --help' for more information.\n"},
+      {EXIT => 1}],
+     ['print-clash2', '-b', '--print-database',
+      {ERR => "dircolors: the options to output non shell syntax,\n" .
+              "and to select a shell syntax are mutually exclusive\n" .
+              "Try 'dircolors --help' for more information.\n"},
+      {EXIT => 1}],
+
+     ['print-ls-colors', '--print-ls-colors', {IN => "OWT 40;33\n"},
+      {OUT => "\x1B[40;33mtw\t40;33\x1B[0m\n"}],
+
      # CAREFUL: always specify the -b option, unless explicitly testing
      # for csh syntax output.
     );
-- 
2.34.1