setup_pager: set GIT_PAGER_IN_USE
We have always set a global "spawned_pager" variable when we start the pager. This lets us make the auto-color decision later in the program as as "we are outputting to a terminal, or to a pager which can handle colors". Commit6e9af86
added support for the GIT_PAGER_IN_USE environment variable. An external program calling git (e.g., git-svn) could set this variable to indicate that it had already started the pager, and that the decision about auto-coloring should take that into account. However,6e9af86
failed to do the reverse, which is to tell external programs when git itself has started the pager. Thus a git command implemented as an external script that has the pager turned on (e.g., "git -p stash show") would not realize it was going to a pager, and would suppress colors. This patch remedies that; we always set GIT_PAGER_IN_USE when we start the pager, and the value is respected by both this program and any spawned children. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8d68a6d593
commit
2e6c012e10
8
pager.c
8
pager.c
@ -11,8 +11,6 @@
|
|||||||
* something different on Windows.
|
* something different on Windows.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int spawned_pager;
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
static void pager_preexec(void)
|
static void pager_preexec(void)
|
||||||
{
|
{
|
||||||
@ -78,7 +76,7 @@ void setup_pager(void)
|
|||||||
if (!pager)
|
if (!pager)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
spawned_pager = 1; /* means we are emitting to terminal */
|
setenv("GIT_PAGER_IN_USE", "true", 1);
|
||||||
|
|
||||||
/* spawn the pager */
|
/* spawn the pager */
|
||||||
pager_argv[0] = pager;
|
pager_argv[0] = pager;
|
||||||
@ -109,10 +107,6 @@ void setup_pager(void)
|
|||||||
int pager_in_use(void)
|
int pager_in_use(void)
|
||||||
{
|
{
|
||||||
const char *env;
|
const char *env;
|
||||||
|
|
||||||
if (spawned_pager)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
env = getenv("GIT_PAGER_IN_USE");
|
env = getenv("GIT_PAGER_IN_USE");
|
||||||
return env ? git_config_bool("GIT_PAGER_IN_USE", env) : 0;
|
return env ? git_config_bool("GIT_PAGER_IN_USE", env) : 0;
|
||||||
}
|
}
|
||||||
|
@ -181,6 +181,17 @@ test_expect_success 'color when writing to a file intended for a pager' '
|
|||||||
colorful colorful.log
|
colorful colorful.log
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success TTY 'colors are sent to pager for external commands' '
|
||||||
|
test_config alias.externallog "!git log" &&
|
||||||
|
test_config color.ui auto &&
|
||||||
|
(
|
||||||
|
TERM=vt100 &&
|
||||||
|
export TERM &&
|
||||||
|
test_terminal git -p externallog
|
||||||
|
) &&
|
||||||
|
colorful paginated.out
|
||||||
|
'
|
||||||
|
|
||||||
# Use this helper to make it easy for the caller of your
|
# Use this helper to make it easy for the caller of your
|
||||||
# terminal-using function to specify whether it should fail.
|
# terminal-using function to specify whether it should fail.
|
||||||
# If you write
|
# If you write
|
||||||
|
Loading…
Reference in New Issue
Block a user