#include "cache.h"
+#include <sys/select.h>
+
/*
* This is split up from the rest of git so that we might do
* something different on Windows, for example.
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);
}
if (!isatty(1))
return;
+ if (!pager)
+ pager = pager_program;
if (!pager)
pager = getenv("PAGER");
if (!pager)
close(fd[0]);
close(fd[1]);
- setenv("LESS", "FRS", 0);
+ setenv("LESS", "FRSX", 0);
run_pager(pager);
die("unable to execute pager '%s'", pager);
exit(255);