diff --git a/NEWS b/NEWS index 780452af6..62a0f4176 100644 --- a/NEWS +++ b/NEWS @@ -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. diff --git a/doc/coreutils.texi b/doc/coreutils.texi index 2eb57d4b0..b774a4217 100644 --- a/doc/coreutils.texi +++ b/doc/coreutils.texi @@ -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 diff --git a/man/local.mk b/man/local.mk index 156b0e18c..00d24acc5 100644 --- a/man/local.mk +++ b/man/local.mk @@ -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 diff --git a/src/system.h b/src/system.h index 84be742ff..bbe8f09a8 100644 --- a/src/system.h +++ b/src/system.h @@ -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;