]> git.ipfire.org Git - thirdparty/git.git/blob - pager.c
Introduce trivial new pager.c helper infrastructure
[thirdparty/git.git] / pager.c
1 #include "cache.h"
2
3 /*
4 * This is split up from the rest of git so that we might do
5 * something different on Windows, for example.
6 */
7
8 static void run_pager(void)
9 {
10 const char *prog = getenv("PAGER");
11 if (!prog)
12 prog = "less";
13 setenv("LESS", "-S", 0);
14 execlp(prog, prog, NULL);
15 }
16
17 void setup_pager(void)
18 {
19 pid_t pid;
20 int fd[2];
21
22 if (!isatty(1))
23 return;
24 if (pipe(fd) < 0)
25 return;
26 pid = fork();
27 if (pid < 0) {
28 close(fd[0]);
29 close(fd[1]);
30 return;
31 }
32
33 /* return in the child */
34 if (!pid) {
35 dup2(fd[1], 1);
36 close(fd[0]);
37 close(fd[1]);
38 return;
39 }
40
41 /* The original process turns into the PAGER */
42 dup2(fd[0], 0);
43 close(fd[0]);
44 close(fd[1]);
45
46 run_pager();
47 exit(255);
48 }