X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=pager.c;h=8bac9d990381f5664333a92f68b0b8cd97d43855;hb=cd9519bd2c5c666cfb3ec219ee0b47c83f26f3fe;hp=dcb398da8e703de2999badb976dee7322eff470b;hpb=182a8dabd5f5f646608f3857f10f3ac18c3d1445;p=git.git diff --git a/pager.c b/pager.c index dcb398da8..8bac9d990 100644 --- a/pager.c +++ b/pager.c @@ -1,5 +1,7 @@ #include "cache.h" +#include + /* * This is split up from the rest of git so that we might do * something different on Windows, for example. @@ -7,6 +9,16 @@ static void run_pager(const char *pager) { + /* + * Work around bug in "less" by not starting it until we + * have real input + */ + fd_set in; + + FD_ZERO(&in); + FD_SET(0, &in); + select(1, &in, NULL, &in, NULL); + execlp(pager, pager, NULL); execl("/bin/sh", "sh", "-c", pager, NULL); } @@ -19,6 +31,11 @@ void setup_pager(void) if (!isatty(1)) return; + if (!pager) { + if (!pager_program) + git_config(git_default_config); + pager = pager_program; + } if (!pager) pager = getenv("PAGER"); if (!pager) @@ -50,7 +67,7 @@ void setup_pager(void) close(fd[0]); close(fd[1]); - setenv("LESS", "-RS", 0); + setenv("LESS", "FRSX", 0); run_pager(pager); die("unable to execute pager '%s'", pager); exit(255);