git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] PAGER_ENV: remove 'S' from $LESS by default

From
Matthieu Moy <matthieu.moy@imag.fr>
Date
Apr 28, 2014, 08:34 UTC
Message-ID
<1398674062-24288-1-git-send-email-Matthieu.Moy@imag.fr>
In-Reply-To
<20140425154722.GC11479@google.com>

By default, Git used to set $LESS to -FRSX if $LESS was not set by the user. The FRX flags actually make sense for Git (F and X because Git sometimes pipes short output to less, and R because Git pipes colored output). The S flag (chop long lines), on the other hand, is not related to Git and is a matter of user preference. Git should not decide for the user to change LESS's default.

More specifically, the S flag harms users who review untrusted code within a pager, since a patch looking like:

-old code; +new good code; [... lots of tabs ...] malicious code;

would appear identical to:

-old code; +new good code;

Users who prefer the old behavior can still set the $LESS environment variable to -FRSX explicitly, or set core.pager to 'less -S'.

The documentation in config.txt is made a bit longer to keep both an example setting the 'S' flag (needed to recover the old behavior) and an example showing how to unset a flag set by Git.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
---
> We agree here.  So, does someone who actually wants this change want to
> propose a patch? :)
Here you are.
 Documentation/config.txt | 13 ++++++++-----
 Makefile                 |  6 +++---
 perl/Git/SVN/Log.pm      |  2 +-
 3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index e30561d..b7f92ac 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -560,14 +560,17 @@ core.pager::
 	configuration, then `$PAGER`, and then the default chosen at
 	compile time (usually 'less').
 +
-When the `LESS` environment variable is unset, Git sets it to `FRSX`
+When the `LESS` environment variable is unset, Git sets it to `FRX`
 (if `LESS` environment variable is set, Git does not change it at
 all).  If you want to selectively override Git's default setting
-for `LESS`, you can set `core.pager` to e.g. `less -+S`.  This will
+for `LESS`, you can set `core.pager` to e.g. `less -S`.  This will
 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.
+command to `LESS=FRX less -S`. The environment does not set the
+`S` option but the command line does, instructing less to truncate
+long lines. Similarly, setting `core.pager` to `less -+F` will
+deactivate the `F` option specified by the environment from the
+command-line, deactivating the "quit if one screen" behavior of
+`less`.
 +
 Likewise, when the `LV` environment variable is unset, Git sets it
 to `-c`.  You can override this setting by exporting `LV` with
diff --git a/Makefile b/Makefile
index a3b298e..cd3cdf6 100644
--- a/Makefile
+++ b/Makefile
@@ -344,9 +344,9 @@ all::
 # Define PAGER_ENV to a SP separated VAR=VAL pairs to define
 # default environment variables to be passed when a pager is spawned, e.g.
 #
-#    PAGER_ENV = LESS=-FRSX LV=-c
+#    PAGER_ENV = LESS=-FRX LV=-c
 #
-# to say "export LESS=-FRSX (and LV=-c) if the environment variable
+# to say "export LESS=-FRX (and LV=-c) if the environment variable
 # LESS (and LV) is not set, respectively".
 
 GIT-VERSION-FILE: FORCE
@@ -1518,7 +1518,7 @@ NO_PYTHON = NoThanks
 endif
 
 ifndef PAGER_ENV
-PAGER_ENV = LESS=-FRSX LV=-c
+PAGER_ENV = LESS=-FRX LV=-c
 endif
 
 QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
diff --git a/perl/Git/SVN/Log.pm b/perl/Git/SVN/Log.pm
index 34f2869..6641053 100644
--- a/perl/Git/SVN/Log.pm
+++ b/perl/Git/SVN/Log.pm
@@ -116,7 +116,7 @@ sub run_pager {
 		return;
 	}
 	open STDIN, '<&', $rfd or fatal "Can't redirect stdin: $!";
-	$ENV{LESS} ||= 'FRSX';
+	$ENV{LESS} ||= 'FRX';
 	$ENV{LV} ||= '-c';
 	exec $pager or fatal "Can't run pager: $! ($pager)";
 }
-- 
1.9.2.698.ge58c0c2.dirty
Previous: Jonathan NiederNext: David Kastrup
Message 20 of 41 in “Harmful LESS flags”
  1. d9ba@mailtor.netApr 23, 2014
  2. Jonathan NiederApr 24, 2014
  3. Mark NudelmanApr 28, 2014
  4. David KastrupApr 24, 2014
  5. Junio C HamanoApr 24, 2014
  6. David KastrupApr 24, 2014
  7. Junio C HamanoApr 24, 2014
  8. David KastrupApr 24, 2014
  9. Jeff KingApr 24, 2014
  10. Junio C HamanoApr 24, 2014
  11. Jeff KingApr 24, 2014
  12. David KastrupApr 24, 2014
  13. Jeff KingApr 24, 2014
  14. David KastrupApr 24, 2014
  15. Jonathan NiederApr 24, 2014
  16. Matthieu MoyApr 25, 2014
  17. Jonathan NiederApr 25, 2014
  18. David KastrupApr 25, 2014
  19. Jonathan NiederApr 25, 2014
  20. PAGER_ENV: remove 'S' from $LESS by defaultMatthieu Moy, Apr 28, 2014
  21. David KastrupApr 28, 2014
  22. Matthieu MoyApr 28, 2014
  23. David KastrupApr 28, 2014
  24. Matthieu MoyApr 28, 2014
  25. Jeff KingApr 28, 2014
  26. Junio C HamanoApr 28, 2014
  27. Matthieu MoyApr 29, 2014
  28. Junio C HamanoApr 29, 2014
  29. pager: remove 'S' from $LESS by defaultMatthieu Moy, Apr 30, 2014
  30. Junio C HamanoApr 30, 2014
  31. Matthieu MoyApr 30, 2014
  32. Junio C HamanoApr 30, 2014
  33. Jonathan NiederMay 5, 2014
  34. Matthieu MoyMay 5, 2014
  35. Junio C HamanoMay 6, 2014
  36. David KastrupMay 6, 2014
  37. Matthieu MoyMay 6, 2014
  38. Jeff KingMay 6, 2014
  39. Junio C HamanoMay 7, 2014
  40. Matthieu MoyMay 7, 2014
  41. Junio C HamanoMay 7, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.