]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
dircolors: support globbing of TERM entries
authorPádraig Brady <P@draigBrady.com>
Tue, 13 Oct 2015 11:40:52 +0000 (12:40 +0100)
committerPádraig Brady <P@draigBrady.com>
Fri, 16 Oct 2015 11:23:30 +0000 (12:23 +0100)
* src/dircolors.c (dc_parse_stream): Support globbing of
TERM entries, to allow entries like "TERM *256color*" for example.
* src/dircolors.hin: Reduce the internal list with globbing.
* tests/misc/dircolors.pl: New test cases.
* NEWS: Mention the improvement.

NEWS
src/dircolors.c
src/dircolors.hin
tests/misc/dircolors.pl

diff --git a/NEWS b/NEWS
index 9aec2594566c00eaf90fb773948cfcb30bacebe9..80f99f3ee9774bc8ef023efe19c749a41ace78fb 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,6 +22,9 @@ GNU coreutils NEWS                                    -*- outline -*-
 
 ** Improvements
 
+  dircolors now supports globbing of TERM entries in its database.
+  For example "TERM *256color*" is now supported.
+
   du no longer stats all mount points at startup, only doing so
   upon detection of a directory cycle.
   [issue introduced in coreutils-8.20]
index 3a03f1f2217d6f012f558be360472dc3c3c0c335..d0bd2e406d1b8270f54f1e2cfd5ce61d63295fee 100644 (file)
@@ -18,6 +18,7 @@
 #include <config.h>
 
 #include <sys/types.h>
+#include <fnmatch.h>
 #include <getopt.h>
 
 #include "system.h"
@@ -293,7 +294,7 @@ dc_parse_stream (FILE *fp, const char *filename)
       unrecognized = false;
       if (c_strcasecmp (keywd, "TERM") == 0)
         {
-          if (STREQ (arg, term))
+          if (fnmatch (arg, term, 0) == 0)
             state = ST_TERMSURE;
           else if (state != ST_TERMSURE)
             state = ST_TERMNO;
index 5c894474c3774020906275dc6d99aceb0bc7cd40..e20fad53684721a77ca3935b8d59ed47376b24fe 100644 (file)
@@ -8,20 +8,12 @@
 # The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
 # slackware version of dircolors) are recognized but ignored.
 
-# Below, there should be one TERM entry for each termtype that is colorizable
+# Below are TERM entries, which can be a glob patterns, to match
+# against the TERM environment variable to determine if it is colorizable.
 TERM Eterm
 TERM ansi
 TERM color-xterm
-TERM con132x25
-TERM con132x30
-TERM con132x43
-TERM con132x60
-TERM con80x25
-TERM con80x28
-TERM con80x30
-TERM con80x43
-TERM con80x50
-TERM con80x60
+TERM con[0-9]*x[0-9]*
 TERM cons25
 TERM console
 TERM cygwin
@@ -40,34 +32,14 @@ TERM mach-gnu-color
 TERM mlterm
 TERM putty
 TERM putty-256color
-TERM rxvt
-TERM rxvt-256color
-TERM rxvt-cygwin
-TERM rxvt-cygwin-native
-TERM rxvt-unicode
-TERM rxvt-unicode-256color
-TERM rxvt-unicode256
-TERM screen
-TERM screen-256color
-TERM screen-256color-bce
-TERM screen-bce
-TERM screen-w
-TERM screen.Eterm
-TERM screen.rxvt
-TERM screen.linux
+TERM rxvt*
+TERM screen*
 TERM st
 TERM st-256color
 TERM terminator
-TERM tmux
-TERM tmux-256color
+TERM tmux*
 TERM vt100
-TERM xterm
-TERM xterm-16color
-TERM xterm-256color
-TERM xterm-88color
-TERM xterm-color
-TERM xterm-debian
-TERM xterm-termite
+TERM xterm*
 
 # Below are the color init strings for the basic file types. A color init
 # string consists of one or more of the following numeric codes:
index b9f8a1d267717bfd7f43a6ad30327b0993c3eca4..2e6f27d88971fd25a5f630999db2a80a3d3261d1 100755 (executable)
@@ -33,6 +33,14 @@ my @Tests =
       . "export LS_COLORS\n"}],
      ['other-wr', '-b', {IN => "owt 40;33\n"},
       {OUT => "LS_COLORS='tw=40;33:';\nexport LS_COLORS\n"}],
+     ['term-1', '-b', {IN => "TERM none\nowt 40;33\n"},
+      {OUT => "LS_COLORS='tw=40;33:';\nexport LS_COLORS\n"}],
+     ['term-2', '-b', {IN => "TERM non*\nowt 40;33\n"},
+      {OUT => "LS_COLORS='tw=40;33:';\nexport LS_COLORS\n"}],
+     ['term-3', '-b', {IN => "TERM nomatch\nowt 40;33\n"},
+      {OUT => "LS_COLORS='';\nexport LS_COLORS\n"}],
+     ['term-4', '-b', {IN => "TERM N*match\nowt 40;33\n"},
+      {OUT => "LS_COLORS='';\nexport LS_COLORS\n"}],
 
      # CAREFUL: always specify the -b option, unless explicitly testing
      # for csh syntax output.