From: Junio C Hamano <gitster@pobox•com>
To: Jonathan Nieder <jrnieder@gmail•com>
Cc: Olaf Meeuwissen <olaf.meeuwissen@avasys•jp>, git@vger•kernel.org
Subject: Re: [PATCH] pager: set LV=-c alongside LESS=FRSX
Date: Tue, 07 Jan 2014 09:00:02 -0800 [thread overview]
Message-ID: <xmqqha9fg225.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20140107021404.GK3881@google.com> (Jonathan Nieder's message of "Mon, 6 Jan 2014 18:14:05 -0800")
Jonathan Nieder <jrnieder@gmail•com> writes:
> On systems with lv configured as the preferred pager (i.e.,
> DEFAULT_PAGER=lv at build time, or PAGER=lv exported in the
> environment) git commands that use color show control codes instead of
> color in the pager:
>
> $ git diff
> ^[[1mdiff --git a/.mailfilter b/.mailfilter^[[m
> ^[[1mindex aa4f0b2..17e113e 100644^[[m
> ^[[1m--- a/.mailfilter^[[m
> ^[[1m+++ b/.mailfilter^[[m
> ^[[36m@@ -1,11 +1,58 @@^[[m
>
> "less" avoids this problem because git uses the LESS environment
> variable to pass the -R option ('output ANSI color escapes in raw
> form') by default. Use the LV environment variable to pass 'lv' the
> -c option ('allow ANSI escape sequences for text decoration / color')
> to fix it for lv, too.
>
> Noticed when the default value for color.ui flipped to 'auto' in
> v1.8.4-rc0~36^2~1 (2013-06-10).
>
> Reported-by: Olaf Meeuwissen <olaf.meeuwissen@avasys•jp>
> Signed-off-by: Jonathan Nieder <jrnieder@gmail•com>
> ---
> Olaf Meeuwissen wrote[1]:
>
>> Yes, it's called LV and documented in the lv(1) manual page. Simply
>> search for 'env' ;-)
>
> Ah, thanks. How about this patch?
>
> [1] http://bugs.debian.org/730527
Looks good; though I have to wonder two (and a half) things:
- Scripted Porcelains get LESS=-FRSX while C Porcelains get
LESS=FRSX as the default (the leading dash being the
difference), which looks somewhat inconsistent. Not a new
problem, though.
- Can we generalize this a bit so that a builder can pass a list
of var=val pairs and demote the existing LESS=FRSX to just a
canned setting of such a mechanism?
- Can such a code be reused to make this into a runtime setting,
even? Would it be worth the complexity?
Thanks.
> Documentation/config.txt | 4 ++++
> git-sh-setup.sh | 3 ++-
> pager.c | 11 +++++++++--
> perl/Git/SVN/Log.pm | 1 +
> t/t7006-pager.sh | 12 ++++++++++++
> 5 files changed, 28 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index a405806..ed59853 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -567,6 +567,10 @@ be passed to the shell by Git, which will translate the final
> command to `LESS=FRSX less -+S`. The environment tells the command
> to set the `S` option to chop long lines but the command line
> resets it to the default to fold long lines.
> ++
> +Likewise, when the `LV` environment variable is unset, Git sets it
> +to `-c`. You can override this setting by exporting `LV` with
> +another value or setting `core.pager` to `lv +c`.
>
> core.whitespace::
> A comma separated list of common whitespace problems to
> diff --git a/git-sh-setup.sh b/git-sh-setup.sh
> index 190a539..fffa3c7 100644
> --- a/git-sh-setup.sh
> +++ b/git-sh-setup.sh
> @@ -159,7 +159,8 @@ git_pager() {
> GIT_PAGER=cat
> fi
> : ${LESS=-FRSX}
> - export LESS
> + : ${LV=-c}
> + export LESS LV
>
> eval "$GIT_PAGER" '"$@"'
> }
> diff --git a/pager.c b/pager.c
> index 345b0bc..0cc75a8 100644
> --- a/pager.c
> +++ b/pager.c
> @@ -80,8 +80,15 @@ void setup_pager(void)
> pager_process.use_shell = 1;
> pager_process.argv = pager_argv;
> pager_process.in = -1;
> - if (!getenv("LESS")) {
> - static const char *env[] = { "LESS=FRSX", NULL };
> + if (!getenv("LESS") || !getenv("LV")) {
> + static const char *env[3];
> + int i = 0;
> +
> + if (!getenv("LESS"))
> + env[i++] = "LESS=FRSX";
> + if (!getenv("LV"))
> + env[i++] = "LV=-c";
> + env[i] = NULL;
> pager_process.env = env;
> }
> if (start_command(&pager_process))
> diff --git a/perl/Git/SVN/Log.pm b/perl/Git/SVN/Log.pm
> index 3f8350a..34f2869 100644
> --- a/perl/Git/SVN/Log.pm
> +++ b/perl/Git/SVN/Log.pm
> @@ -117,6 +117,7 @@ sub run_pager {
> }
> open STDIN, '<&', $rfd or fatal "Can't redirect stdin: $!";
> $ENV{LESS} ||= 'FRSX';
> + $ENV{LV} ||= '-c';
> exec $pager or fatal "Can't run pager: $! ($pager)";
> }
>
> diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh
> index ff25908..7fe3367 100755
> --- a/t/t7006-pager.sh
> +++ b/t/t7006-pager.sh
> @@ -37,6 +37,18 @@ test_expect_failure TTY 'pager runs from subdir' '
> test_cmp expected actual
> '
>
> +test_expect_success TTY 'LESS and LV envvars are set for pagination' '
> + (
> + sane_unset LESS LV &&
> + PAGER="env >pager-env.out" &&
> + export PAGER &&
> +
> + test_terminal git log
> + ) &&
> + grep ^LESS= pager-env.out &&
> + grep ^LV= pager-env.out
> +'
> +
> test_expect_success TTY 'some commands do not use a pager' '
> rm -f paginated.out &&
> test_terminal git rev-list HEAD &&
next prev parent reply other threads:[~2014-01-07 17:00 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <874n6zbqlh.fsf@helix.nebula.avasys.jp>
[not found] ` <20140106193339.GH3881@google.com>
[not found] ` <874n5ghenr.fsf@helix.nebula.avasys.jp>
2014-01-07 2:14 ` [PATCH] pager: set LV=-c alongside LESS=FRSX Jonathan Nieder
2014-01-07 4:09 ` Olaf Meeuwissen
2014-01-07 17:00 ` Junio C Hamano [this message]
2014-01-07 18:17 ` Andreas Schwab
2014-01-30 7:15 ` Anders Kaseorg
2014-01-30 16:42 ` [PATCH jn/pager-lv-default-env] pager test: make fake pager consume all its input Jonathan Nieder
2014-01-31 17:07 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqha9fg225.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=jrnieder@gmail$(echo .)com \
--cc=olaf.meeuwissen@avasys$(echo .)jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox