mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
allow command-specific pagers in pager.<cmd>
A user may want different pager settings or even a different pager for various subcommands (e.g., because they use different less settings for "log" vs "diff", or because they have a pager that interprets only log output but not other commands). This patch extends the pager.<cmd> syntax to support not only boolean to-page-or-not-to-page, but also to specify a pager just for a specific command. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b2be2f6aea
commit
9bad723369
|
@ -1521,11 +1521,13 @@ pack.packSizeLimit::
|
|||
supported.
|
||||
|
||||
pager.<cmd>::
|
||||
Allows turning on or off pagination of the output of a
|
||||
particular git subcommand when writing to a tty. If
|
||||
`\--paginate` or `\--no-pager` is specified on the command line,
|
||||
it takes precedence over this option. To disable pagination for
|
||||
all commands, set `core.pager` or `GIT_PAGER` to `cat`.
|
||||
If the value is boolean, turns on or off pagination of the
|
||||
output of a particular git subcommand when writing to a tty.
|
||||
Otherwise, turns on pagination for the subcommand using the
|
||||
pager specified by the value of `pager.<cmd>`. If `\--paginate`
|
||||
or `\--no-pager` is specified on the command line, it takes
|
||||
precedence over this option. To disable pagination for all
|
||||
commands, set `core.pager` or `GIT_PAGER` to `cat`.
|
||||
|
||||
pretty.<name>::
|
||||
Alias for a --pretty= format string, as specified in
|
||||
|
|
21
git.c
21
git.c
|
@ -19,14 +19,22 @@ static struct startup_info git_startup_info;
|
|||
static int use_pager = -1;
|
||||
struct pager_config {
|
||||
const char *cmd;
|
||||
int val;
|
||||
int want;
|
||||
char *value;
|
||||
};
|
||||
|
||||
static int pager_command_config(const char *var, const char *value, void *data)
|
||||
{
|
||||
struct pager_config *c = data;
|
||||
if (!prefixcmp(var, "pager.") && !strcmp(var + 6, c->cmd))
|
||||
c->val = git_config_bool(var, value);
|
||||
if (!prefixcmp(var, "pager.") && !strcmp(var + 6, c->cmd)) {
|
||||
int b = git_config_maybe_bool(var, value);
|
||||
if (b >= 0)
|
||||
c->want = b;
|
||||
else {
|
||||
c->want = 1;
|
||||
c->value = xstrdup(value);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -35,9 +43,12 @@ int check_pager_config(const char *cmd)
|
|||
{
|
||||
struct pager_config c;
|
||||
c.cmd = cmd;
|
||||
c.val = -1;
|
||||
c.want = -1;
|
||||
c.value = NULL;
|
||||
git_config(pager_command_config, &c);
|
||||
return c.val;
|
||||
if (c.value)
|
||||
pager_program = c.value;
|
||||
return c.want;
|
||||
}
|
||||
|
||||
static void commit_pager_choice(void) {
|
||||
|
|
|
@ -435,4 +435,33 @@ test_core_pager_subdir expect_success 'git -p shortlog'
|
|||
test_core_pager_subdir expect_success test_must_fail \
|
||||
'git -p apply </dev/null'
|
||||
|
||||
test_expect_success TTY 'command-specific pager' '
|
||||
unset PAGER GIT_PAGER;
|
||||
echo "foo:initial" >expect &&
|
||||
>actual &&
|
||||
git config --unset core.pager &&
|
||||
git config pager.log "sed s/^/foo:/ >actual" &&
|
||||
test_terminal git log --format=%s -1 &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success TTY 'command-specific pager overrides core.pager' '
|
||||
unset PAGER GIT_PAGER;
|
||||
echo "foo:initial" >expect &&
|
||||
>actual &&
|
||||
git config core.pager "exit 1"
|
||||
git config pager.log "sed s/^/foo:/ >actual" &&
|
||||
test_terminal git log --format=%s -1 &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success TTY 'command-specific pager overridden by environment' '
|
||||
GIT_PAGER="sed s/^/foo:/ >actual" && export GIT_PAGER &&
|
||||
>actual &&
|
||||
echo "foo:initial" >expect &&
|
||||
git config pager.log "exit 1" &&
|
||||
test_terminal git log --format=%s -1 &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue