threads / patch / 5039

patchpager: config variable pager.program

Subject: [PATCH] pager: config variable pager.program

## tl;dr

5 messages between Jul 29, 2006 and Jul 31, 2006. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Matthias Lederhofer· Jul 29, 2006, 21:28 UTC · lore
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
---
I'd like to use another pager (or other options) with git than the
normal pager.  Normally I would not want the -R option with less but
for git less should show colors.
---
 Documentation/config.txt |    5 +++++
 pager.c                  |   16 +++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletions(-)
Show changes to 2 files +20 −1

Documentation/config.txt, pager.c

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 465eb13..96429b6 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -116,6 +116,11 @@ apply.whitespace::
 	Tells `git-apply` how to handle whitespaces, in the same way
 	as the '--whitespace' option. See gitlink:git-apply[1].
 
+pager.program::
+	Use this program as pager.  git will try this configuration
+	variable first, then the 'PAGER' environment variable and
+	"less" as fallback.
+
 diff.color::
 	When true (or `always`), always use colors in patch.
 	When false (or `never`), never.  When set to `auto`, use
diff --git a/pager.c b/pager.c
index 280f57f..3f753f6 100644
--- a/pager.c
+++ b/pager.c
@@ -5,6 +5,18 @@ #include "cache.h"
  * something different on Windows, for example.
  */
 
+static const char *pager = NULL;
+
+static int git_pager_config(const char *var, const char *value)
+{
+	if (!strcmp(var, "pager.program")) {
+		if (value)
+			pager = strdup(value);
+		return 0;
+	}
+	return 0;
+}
+
 static void run_pager(const char *pager)
 {
 	execlp(pager, pager, NULL);
@@ -15,10 +27,12 @@ void setup_pager(void)
 {
 	pid_t pid;
 	int fd[2];
-	const char *pager = getenv("PAGER");
 
 	if (!isatty(1))
 		return;
+	git_config(git_pager_config);
+	if (!pager)
+		pager = getenv("PAGER");
 	if (!pager)
 		pager = "less";
 	else if (!*pager || !strcmp(pager, "cat"))
-- 
1.4.2.rc2.g688a
Junio C Hamano· Jul 31, 2006, 00:43 UTC · re: Matthias Lederhofer · lore

Re: [PATCH] pager: config variable pager.program

I am not enthused about any configuration stored in .git/config to override the environment variables. Files are to store reasonable default, and command line flags and environments are to override them, but this patch does it the other way around.

Matthias Lederhofer· Jul 31, 2006, 12:14 UTC · re: Junio C Hamano · lore
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
---
Junio C Hamano <junkio@cox.net> wrote:
> I am not enthused about any configuration stored in .git/config
> to override the environment variables.  Files are to store
> reasonable default, and command line flags and environments are
> to override them, but this patch does it the other way around.
You're right, this patch uses $GIT_PAGER.  I don't think pager.program
does make much sense with this (expect someone does not want to export
$PAGER/$GIT_PAGER), should it be introduced anyway (I don't need
it)?
---
 Documentation/git.txt |    3 +++
 pager.c               |    5 ++++-
 2 files changed, 7 insertions(+), 1 deletions(-)
Show changes to 2 files +7 −1

Documentation/git.txt, pager.c

diff --git a/Documentation/git.txt b/Documentation/git.txt
index 7310a2b..d243883 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -627,6 +627,9 @@ git Diffs
 
 other
 ~~~~~
+'GIT_PAGER'::
+	This environment variable overrides `$PAGER`.
+
 'GIT_TRACE'::
 	If this variable is set git will print `trace:` messages on
 	stderr telling about alias expansion, built-in command
diff --git a/pager.c b/pager.c
index 280f57f..ab9be5d 100644
--- a/pager.c
+++ b/pager.c
@@ -15,10 +15,13 @@ void setup_pager(void)
 {
 	pid_t pid;
 	int fd[2];
-	const char *pager = getenv("PAGER");
+	char *pager;
 
 	if (!isatty(1))
 		return;
+	pager = getenv("GIT_PAGER");
+	if (!pager)
+		pager = getenv("PAGER");
 	if (!pager)
 		pager = "less";
 	else if (!*pager || !strcmp(pager, "cat"))
-- 
1.4.2.rc2.g91b7
Johannes Schindelin· Jul 31, 2006, 12:56 UTC · re: Matthias Lederhofer · lore

Re: [PATCH] pager: config variable pager.program

Hi,
On Mon, 31 Jul 2006, Matthias Lederhofer wrote:
> Signed-off-by: Matthias Lederhofer <matled@gmx.net>
The commit message no longer reflects what the patch does ;-)
> -	const char *pager = getenv("PAGER");
> +	char *pager;

You do not need to lose the "const" (it means that you cannot access the memory it points to, but you can change the pointer). Also, you could make a more minimal patch by replacing PAGER by GIT_PAGER here, instead of having this extra line:

> +	pager = getenv("GIT_PAGER");

Ciao, Dscho

Matthias Lederhofer· Jul 31, 2006, 13:27 UTC · re: Johannes Schindelin · lore

[PATCH] pager: environment variable GIT_PAGER to override PAGER

Signed-off-by: Matthias Lederhofer <matled@gmx.net>
---
Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
Show 17 quoted lines
> Hi,
> 
> On Mon, 31 Jul 2006, Matthias Lederhofer wrote:
> 
> > Signed-off-by: Matthias Lederhofer <matled@gmx.net>
> 
> The commit message no longer reflects what the patch does ;-)
> 
> > -	const char *pager = getenv("PAGER");
> > +	char *pager;
> 
> You do not need to lose the "const" (it means that you cannot access the 
> memory it points to, but you can change the pointer). Also, you could make 
> a more minimal patch by replacing PAGER by GIT_PAGER here, instead of 
> having this extra line:
> 
> > +	pager = getenv("GIT_PAGER");
Thanks, I should be more careful when correcting a patch with
--amend.
---
 Documentation/git.txt |    3 +++
 pager.c               |    4 +++-
 2 files changed, 6 insertions(+), 1 deletions(-)
Show changes to 2 files +6 −1

Documentation/git.txt, pager.c

diff --git a/Documentation/git.txt b/Documentation/git.txt
index 7310a2b..d243883 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -627,6 +627,9 @@ git Diffs
 
 other
 ~~~~~
+'GIT_PAGER'::
+	This environment variable overrides `$PAGER`.
+
 'GIT_TRACE'::
 	If this variable is set git will print `trace:` messages on
 	stderr telling about alias expansion, built-in command
diff --git a/pager.c b/pager.c
index 280f57f..dcb398d 100644
--- a/pager.c
+++ b/pager.c
@@ -15,11 +15,13 @@ void setup_pager(void)
 {
 	pid_t pid;
 	int fd[2];
-	const char *pager = getenv("PAGER");
+	const char *pager = getenv("GIT_PAGER");
 
 	if (!isatty(1))
 		return;
 	if (!pager)
+		pager = getenv("PAGER");
+	if (!pager)
 		pager = "less";
 	else if (!*pager || !strcmp(pager, "cat"))
 		return;
-- 
1.4.2.rc2.g91b7

← back to recent threads