From: Jeff King <peff@peff.net>
To: Richard Hansen <rhansen@bbn.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 2/2] test-lib.sh: fix color support when tput needs ~/.terminfo
Date: Wed, 17 Jun 2015 15:43:15 -0400 [thread overview]
Message-ID: <20150617194315.GE25304@peff.net> (raw)
In-Reply-To: <1434567986-23552-3-git-send-email-rhansen@bbn.com>
On Wed, Jun 17, 2015 at 03:06:26PM -0400, Richard Hansen wrote:
> If tput needs ~/.terminfo for the current $TERM, then tput will
> succeed before HOME is changed to $TRASH_DIRECTORY (causing color to
> be set to 't') but fail afterward.
>
> One possible way to fix this is to treat HOME like TERM: back up the
> original value and temporarily restore it before say_color() runs
> tput.
>
> Instead, pre-compute and save the color control sequences before
> changing either TERM or HOME. Use the saved control sequences in
> say_color() rather than call tput each time. This avoids the need to
> back up and restore the TERM and HOME variables, and it avoids the
> overhead of a subshell and two invocations of tput per call to
> say_color().
>
> Signed-off-by: Richard Hansen <rhansen@bbn.com>
Nice, I like it.
> + # Save the color control sequences now rather than run tput
> + # each time say_color() is called. This is done for two
> + # reasons:
> + # * TERM will be changed to dumb
> + # * HOME will be changed to a temporary directory and tput
> + # might need to read ~/.terminfo from the original HOME
> + # directory to get the control sequences
> + # Note: This approach assumes the control sequences don't end
> + # in a newline for any terminal of interest (command
> + # substitutions strip trailing newlines). Given that most
> + # (all?) terminals in common use are related to ECMA-48, this
> + # shouldn't be a problem.
Yeah, that was my first thought, but I agree it probably isn't going to
be a big deal in practice.
> + say_color_error=$(tput bold; tput setaf 1) # bold red
> + say_color_skip=$(tput setaf 4) # blue
> + say_color_warn=$(tput setaf 3) # brown/yellow
> + say_color_pass=$(tput setaf 2) # green
> + say_color_info=$(tput setaf 6) # cyan
> + say_color_sgr0=$(tput sgr0)
> [...]
> + error|skip|warn|pass|info)
> + eval "say_color_color=\$say_color_$1";;
> *)
> test -n "$quiet" && return;;
I think you could dispense with this case statement entirely and do:
eval "say_color_color=\$say_color_$1"
if test -z "$say_color_color"; then
test -n "$quiet" && return
fi
I guess that is making the assumption that all colors have non-zero
sizes, but that seems reasonable. I do not mind it so much as you have
it, but it does mean adding a new field needs to update two spots.
-Peff
next prev parent reply other threads:[~2015-06-17 19:43 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-17 19:06 [PATCH 0/2] redo fix for test-lib.sh color support Richard Hansen
2015-06-17 19:06 ` [PATCH 1/2] Revert "test-lib.sh: do tests for color support after changing HOME" Richard Hansen
2015-06-17 19:06 ` [PATCH 2/2] test-lib.sh: fix color support when tput needs ~/.terminfo Richard Hansen
2015-06-17 19:43 ` Jeff King [this message]
2015-06-17 19:55 ` Richard Hansen
2015-06-17 20:15 ` Junio C Hamano
2015-06-17 21:11 ` [PATCH v2 0/2] redo fix for test-lib.sh color support Richard Hansen
2015-06-17 21:11 ` [PATCH v2 1/2] Revert "test-lib.sh: do tests for color support after changing HOME" Richard Hansen
2015-06-17 21:11 ` [PATCH v2 2/2] test-lib.sh: fix color support when tput needs ~/.terminfo Richard Hansen
2015-06-17 22:13 ` Jeff King
2015-06-17 22:23 ` Junio C Hamano
2015-06-17 22:26 ` Jeff King
2015-06-17 20:25 ` [PATCH " Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150617194315.GE25304@peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=rhansen@bbn.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.