]> git.ipfire.org Git - thirdparty/git.git/blame - pager.c
Introduce trivial new pager.c helper infrastructure
[thirdparty/git.git] / pager.c
CommitLineData
f67b45f8
LT
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
8static 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
17void 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}