Disable colored output on a dumb terminal (#3552)

Enable colored output by default only when the TERM environment variable
is set to a value other than dumb, as git and grep do, so that users no
longer need to pass -M or set NO_COLOR on terminals that cannot display
escape sequences. Colored output is now disabled not only for TERM=dumb
but also when TERM is unset or empty. The -C option still enables colors
in all these cases. On Windows, colored output is still decided by
ANSICON and the console mode, and TERM is not checked.
This commit is contained in:
Dmitri Vereshchagin authored and GitHub committed 2026-10-16 21:50:47 +09:00
1 parent 6b53f80311
commit 633ae6058a
4 files changed
+44 -9

No files matched your search

+35 -5
View File
@@ -691,7 +691,7 @@ for colors in '/' '[30' '30m' '30:31m:32' '30:*:31' 'invalid'; do
done
unset JQ_COLORS
# Check $NO_COLOR
# Check $NO_COLOR and $TERM
test_no_color=true
$msys && test_no_color=false
$mingw && test_no_color=false
@@ -708,22 +708,52 @@ if $test_no_color && command -v script >/dev/null 2>&1; then
sed 's/^\x5E\x44\x08\x08//'; }
fi
faketty $JQ_NO_B -n . > $d/color
faketty env TERM=xterm-256color $JQ_NO_B -n . > $d/color
printf '\033[0;90mnull\033[0m\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
faketty env NO_COLOR= $JQ_NO_B -n . > $d/color
faketty env TERM=xterm-256color NO_COLOR= $JQ_NO_B -n . > $d/color
printf '\033[0;90mnull\033[0m\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
faketty env NO_COLOR=1 $JQ_NO_B -n . > $d/color
faketty env TERM=xterm-256color NO_COLOR=1 $JQ_NO_B -n . > $d/color
printf 'null\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
faketty env NO_COLOR=1 $JQ_NO_B -Cn . > $d/color
faketty env TERM=xterm-256color NO_COLOR=1 $JQ_NO_B -Cn . > $d/color
printf '\033[0;90mnull\033[0m\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
faketty env TERM=dumb $JQ_NO_B -n . > $d/color
printf 'null\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
faketty env TERM=dumb $JQ_NO_B -Cn . > $d/color
printf '\033[0;90mnull\033[0m\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
faketty env TERM= $JQ_NO_B -n . > $d/color
printf 'null\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
faketty env TERM= $JQ_NO_B -Cn . > $d/color
printf '\033[0;90mnull\033[0m\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
(unset TERM; faketty $JQ_NO_B -n . > $d/color)
printf 'null\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color
cmp $d/color $d/expect
(unset TERM; faketty $JQ_NO_B -Cn . > $d/color)
printf '\033[0;90mnull\033[0m\r\n' > $d/expect
od -tc $d/expect
od -tc $d/color