On Fri, May 02, 2008 at 02:09:30AM -0400, Jeff King wrote: > > I agree with you; I don't like it at all. Probably whether or not to use > > a pager for a given command should be controlled by a "pager.<cmd>" > > config variable. > > Here is a quick and dirty patch to do that. It should probably be split > into two (there is a big code movement of the commands array), and it > needs documentation and tests. But I'm going to sleep for now. Here is a cleaner patch. Rather than looking at all of pager.*, it waits until we see which command to execute, and just looks up pager.cmd (we end up having to parse the config the same number of times). And we don't have to munge the static global commands array, which just feels a little cleaner. Still no documentation, and still not a "real" patch; I am curious to see the list reaction on the issues I raised elsewhere in the thread (like the user-facing inconsistencies). --- git.c | 30 +++++++++++++++++++++++++++++- 1 files changed, 29 insertions(+), 1 deletions(-) diff --git a/git.c b/git.c index 89b431f..68d8b37 100644 --- a/git.c +++ b/git.c @@ -230,6 +230,25 @@ struct cmd_struct { int option; }; +static const char *pager_command_key; +static int pager_command_value; + +int pager_command_config(const char *var, const char *value) +{ + if (!prefixcmp(var, "pager.") && !strcmp(var + 6, pager_command_key)) + pager_command_value = git_config_bool(var, value); + return 0; +} + +/* returns 0 for "no pager", 1 for "use pager", and -1 for "not specified" */ +int check_pager_config(const char *cmd) +{ + pager_command_key = cmd; + pager_command_value = -1; + git_config(pager_command_config); + return pager_command_value; +} + static int run_command(struct cmd_struct *p, int argc, const char **argv) { int status; @@ -239,8 +258,17 @@ static int run_command(struct cmd_struct *p, int argc, const char **argv) prefix = NULL; if (p->option & RUN_SETUP) prefix = setup_git_directory(); - if (p->option & USE_PAGER) + switch (check_pager_config(p->cmd)) { + case 0: + break; + case 1: setup_pager(); + break; + default: + if (p->option & USE_PAGER) + setup_pager(); + break; + } if (p->option & NEED_WORK_TREE) setup_work_tree(); -- 1.5.5.1.221.ga481.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html