Applied, thank you

On Sun, May 23, 2021 at 2:22 PM <[email protected]> wrote:
>
> From: Sören Tempel <[email protected]>
>
> The TERM variable is usually set to dumb to indicate that the terminal
> does not support any ANSI escape sequences. Presently, ls does not honor
> this variable and outputs colors anyhow which results in unreadable
> output, unless the user explicitly disables colors using `ls
> --color=never`. The rational behind this change is that ls should "just
> work" by default, even on dumb terminals.
>
> For this reason, this patch adds a check which additionally consults the
> TERM variable before printing any colors. This is analogous to the
> existing check for ensuring that standard output is a tty. As such,
> colors can still be forced with `--color=force`, even if TERM is set to
> dumb.
>
> The implementation includes a new libbb function is_dumb_term() since
> (a) this code may be useful in other applets (e.g. busybox ash) which
> also use ANSI escape sequences unconditionally and (b) it makes it
> easier to add additional heuristics for identifying dumb terminals in
> the future.
> ---
>  coreutils/ls.c  | 4 ++--
>  include/libbb.h | 1 +
>  libbb/xfuncs.c  | 6 ++++++
>  3 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/coreutils/ls.c b/coreutils/ls.c
> index 80ef92079..a11a92456 100644
> --- a/coreutils/ls.c
> +++ b/coreutils/ls.c
> @@ -1145,7 +1145,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
>
>  #if ENABLE_FEATURE_LS_COLOR
>         /* set G_show_color = 1/0 */
> -       if (ENABLE_FEATURE_LS_COLOR_IS_DEFAULT && isatty(STDOUT_FILENO)) {
> +       if (ENABLE_FEATURE_LS_COLOR_IS_DEFAULT && isatty(STDOUT_FILENO) && 
> !is_dumb_term()) {
>                 char *p = getenv("LS_COLORS");
>                 /* LS_COLORS is unset, or (not empty && not "none") ? */
>                 if (!p || (p[0] && strcmp(p, "none") != 0))
> @@ -1158,7 +1158,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv)
>                 case 3:
>                 case 4:
>                 case 5:
> -                       if (isatty(STDOUT_FILENO)) {
> +                       if (isatty(STDOUT_FILENO) && !is_dumb_term()) {
>                 case 0:
>                 case 1:
>                 case 2:
> diff --git a/include/libbb.h b/include/libbb.h
> index 03f9c35f3..9085a05e9 100644
> --- a/include/libbb.h
> +++ b/include/libbb.h
> @@ -1773,6 +1773,7 @@ extern void print_login_issue(const char *issue_file, 
> const char *tty) FAST_FUNC
>  extern void print_login_prompt(void) FAST_FUNC;
>
>  char *xmalloc_ttyname(int fd) FAST_FUNC RETURNS_MALLOC;
> +int is_dumb_term(void);
>  /* NB: typically you want to pass fd 0, not 1. Think 'applet | grep 
> something' */
>  int get_terminal_width_height(int fd, unsigned *width, unsigned *height) 
> FAST_FUNC;
>  int get_terminal_width(int fd) FAST_FUNC;
> diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c
> index d93d8aaf5..c81ce4546 100644
> --- a/libbb/xfuncs.c
> +++ b/libbb/xfuncs.c
> @@ -303,6 +303,12 @@ int FAST_FUNC get_terminal_width(int fd)
>         return width;
>  }
>
> +int FAST_FUNC is_dumb_term(void)
> +{
> +       char *term = getenv("TERM");
> +       return term && strcmp(term, "dumb") == 0;
> +}
> +
>  int FAST_FUNC tcsetattr_stdin_TCSANOW(const struct termios *tp)
>  {
>         return tcsetattr(STDIN_FILENO, TCSANOW, tp);
> _______________________________________________
> busybox mailing list
> [email protected]
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to