diff: disable colorization for TERM=dumb
* src/diff.c (main): With --color or --color=auto, when TERM is
"dumb", disable colorization. Suggested by Daniel Colascione.
* NEWS (Bug fixes): Mention it.
* tests/colors: Add a test that would fail without this change,
yet passes with it.
From 697c1f4fa93ac971c487725e9e53fc211cd3c670 Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Mon, 8 Aug 2016 18:50:15 -0700
Subject: [PATCH] diff: disable colorization for TERM=dumb
* src/diff.c (main): With --color or --color=auto, when TERM is
"dumb", disable colorization. Suggested by Daniel Colascione.
* NEWS (Bug fixes): Mention it.
* tests/colors: Add a test that would fail without this change,
yet passes with it.
---
NEWS | 4 ++++
src/diff.c | 7 +++++++
tests/colors | 5 +++++
3 files changed, 16 insertions(+)
diff --git a/NEWS b/NEWS
index add082b..9a8d2e1 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ GNU diffutils NEWS -*-
outline -*-
* Noteworthy changes in release ?.? (????-??-??) [?]
+** Bug fixes
+
+ diff --color no longer colorizes when TERM=dumb
+
* Noteworthy changes in release 3.4 (2016-08-08) [stable]
diff --git a/src/diff.c b/src/diff.c
index 9bc1d96..686945e 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -656,6 +656,13 @@ main (int argc, char **argv)
prev = c;
}
+ if (colors_style == AUTO)
+ {
+ char const *t = getenv ("TERM");
+ if (t && STREQ (t, "dumb"))
+ colors_style = NEVER;
+ }
+
if (output_style == OUTPUT_UNSPECIFIED)
{
if (show_c_function)
diff --git a/tests/colors b/tests/colors
index 3ad2206..8651a5b 100755
--- a/tests/colors
+++ b/tests/colors
@@ -86,6 +86,11 @@ test $? = 1 || fail=1
gen_exp_default > exp || framework_failure_
compare exp out || fail=1
+TERM=dumb diff ---presume-output-tty --color=auto a b > out
+test $? = 1 || fail=1
+gen_exp_default > exp || framework_failure_
+compare exp out || fail=1
+
diff --color=never a b > out
test $? = 1 || fail=1
gen_exp_default > exp || framework_failure_
--
2.7.4