Browse Source
This introduces the new function void setup_pager(void); to set up output to be written through a pager applocation. All in preparation for doing the simple scripts in C. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
Linus Torvalds
19 years ago
committed by
Junio C Hamano
3 changed files with 52 additions and 1 deletions
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
#include "cache.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(void) |
||||
{ |
||||
const char *prog = getenv("PAGER"); |
||||
if (!prog) |
||||
prog = "less"; |
||||
setenv("LESS", "-S", 0); |
||||
execlp(prog, prog, NULL); |
||||
} |
||||
|
||||
void setup_pager(void) |
||||
{ |
||||
pid_t pid; |
||||
int fd[2]; |
||||
|
||||
if (!isatty(1)) |
||||
return; |
||||
if (pipe(fd) < 0) |
||||
return; |
||||
pid = fork(); |
||||
if (pid < 0) { |
||||
close(fd[0]); |
||||
close(fd[1]); |
||||
return; |
||||
} |
||||
|
||||
/* return in the child */ |
||||
if (!pid) { |
||||
dup2(fd[1], 1); |
||||
close(fd[0]); |
||||
close(fd[1]); |
||||
return; |
||||
} |
||||
|
||||
/* The original process turns into the PAGER */ |
||||
dup2(fd[0], 0); |
||||
close(fd[0]); |
||||
close(fd[1]); |
||||
|
||||
run_pager(); |
||||
exit(255); |
||||
} |
Loading…
Reference in new issue