"git -p cmd" to page anywhere

This allows you to say:

	git -p diff v2.6.16-rc5..

and the command pipes the output of any git command to your pager.

[jc: this resurrects a month old RFC patch with improvement
 suggested by Linus to call it --paginate instead of --less.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2006-06-06 16:58:40 -07:00
parent cfc01c0387
commit 85fb65ed6e
4 changed files with 11 additions and 1 deletions

View File

@ -382,6 +382,7 @@ extern int receive_keep_pack(int fd[2], const char *me, int quiet, int);
/* pager.c */
extern void setup_pager(void);
extern int pager_in_use;
/* base85 */
int decode_85(char *dst, char *line, int linelen);

2
diff.c
View File

@ -112,7 +112,7 @@ int git_diff_config(const char *var, const char *value)
diff_use_color_default = 1; /* bool */
else if (!strcasecmp(value, "auto")) {
diff_use_color_default = 0;
if (isatty(1)) {
if (isatty(1) || pager_in_use) {
char *term = getenv("TERM");
if (term && strcmp(term, "dumb"))
diff_use_color_default = 1;

5
git.c
View File

@ -251,6 +251,11 @@ int main(int argc, const char **argv, char **envp)
cmd = *++argv;
argc--;
if (!strcmp(cmd, "-p") || !strcmp(cmd, "--paginate")) {
setup_pager();
continue;
}
if (strncmp(cmd, "--", 2))
break;

View File

@ -5,6 +5,8 @@
* something different on Windows, for example.
*/
int pager_in_use;
static void run_pager(const char *pager)
{
execlp(pager, pager, NULL);
@ -24,6 +26,8 @@ void setup_pager(void)
else if (!*pager || !strcmp(pager, "cat"))
return;
pager_in_use = 1; /* means we are emitting to terminal */
if (pipe(fd) < 0)
return;
pid = fork();