Browse Source

"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>
maint
Junio C Hamano 19 years ago
parent
commit
85fb65ed6e
  1. 1
      cache.h
  2. 2
      diff.c
  3. 5
      git.c
  4. 4
      pager.c

1
cache.h

@ -382,6 +382,7 @@ extern int receive_keep_pack(int fd[2], const char *me, int quiet, int); @@ -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

@ -112,7 +112,7 @@ int git_diff_config(const char *var, const char *value) @@ -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

@ -251,6 +251,11 @@ int main(int argc, const char **argv, char **envp) @@ -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;


4
pager.c

@ -5,6 +5,8 @@ @@ -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) @@ -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();

Loading…
Cancel
Save