1
0
mirror of https://git.savannah.gnu.org/git/coreutils.git synced 2026-10-24 02:08:57 +03:00

all: only markup --help when outputting to tty

Since v9.10 (Feb 2026) --help always outputs bold and hyperlinks
even when output was not a tty, as this was thought more useful
with pagers and grep etc.  This change makes the more conservative
choice of only outputting markup to tty so that users who do not
have less setup to display color (-R), or users who enable color
by default in grep, get improved output (though without URLs etc.)

* src/system.h (oputs_): Call isatty() when not
forcing markup with $IN_HELP2MAN.  Also reverse the
double negatives to a more natural form.
* man/local.mk: Remove redundant assignment of $TERM.
* doc/coreutils.texi (common options): Mention that --help markup
requires output to be a tty, and that $IN_HELP2MAN overrides that.
* NEWS: Mention the change in behavior.
This commit is contained in:
Pádraig Brady
2026-10-10 11:33:58 +01:00
parent a40b8d1191
commit 700d8235a3
4 changed files with 23 additions and 14 deletions

4
NEWS
View File

@@ -53,6 +53,10 @@ GNU coreutils NEWS -*- outline -*-
** Changes in behavior
command --help output will no longer be marked up with bold or hyperlinks
when output is not a tty. E.g. paged --help output will no longer
contain URLs to the full online manual.
'env' and 'printenv' now quote printed environment variables only when
outputting to a terminal. The previous release enabled this for all
outputs by default, requiring setting QUOTING_STYLE=literal to disable.

View File

@@ -765,11 +765,14 @@ these programs, abbreviations of the long options are not always recognized.
@item --help
@opindex --help
@vindex TERM
@vindex IN_HELP2MAN
@cindex help, online
Print a usage message listing all available options, then exit successfully.
Help output may be marked up with terminal codes for formatting or
hyperlinks, which can be disabled by unsetting the @env{TERM} environment
variable, or setting it to the value @samp{dumb}.
When outputting to a tty @option{--help} output may be marked up with
terminal codes for formatting or hyperlinks, which can be disabled by
unsetting the @env{TERM} environment variable, or setting it to the value
@samp{dumb}. To force the use of markup when output is not a tty,
e.g. when piping to a pager, set the @env{IN_HELP2MAN} environment variable.
@item --version
@opindex --version

View File

@@ -27,7 +27,7 @@ if HAVE_PERL
if BOLD_MAN_REFS
help2man_OPTS=--bold-refs
endif
run_help2man = env IN_HELP2MAN=1 TERM=not_dumb $(PERL) -- \
run_help2man = env IN_HELP2MAN=1 $(PERL) -- \
$(srcdir)/man/help2man --loose-indent $(help2man_OPTS)
else
run_help2man = $(SHELL) $(srcdir)/man/dummy-man

View File

@@ -584,20 +584,22 @@ is_nul (void const *buf, size_t length)
static inline void
oputs_ (MAYBE_UNUSED char const *program, char const *option)
{
static int help_no_sgr =
#if ! defined MANUAL_URL && ! defined BOLD_MAN_REFS
1; /* Disable. */
#else
static int help_markup =
#if defined MANUAL_URL || defined BOLD_MAN_REFS
-1; /* Lookup. */
#else
0; /* Disable. */
#endif
if (help_no_sgr == -1)
if (help_markup == -1)
{
/* Note we don't consult isatty() since usually you
would want markup when piping to grep/less etc. */
char const *term = getenv ("TERM");
help_no_sgr = (!term || !*term || streq (term, "dumb"));
/* Note one generally would want markup when piping to grep/less etc.
but we're conservative here for now, and only markup to tty. */
char const *te;
help_markup = (isatty (STDOUT_FILENO)
? ((te = getenv ("TERM")) && *te && !streq (te, "dumb"))
: getenv ("IN_HELP2MAN") != NULL);
}
if (help_no_sgr)
if (! help_markup)
{
fputs (option, stdout);
return;