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

Re: [PATCH 2/3] setup_pager: set MORE=R

From
Jeff King <peff@peff.net>
Date
Jan 21, 2014, 05:49 UTC
Message-ID
<20140121054927.GD5878@sigill.intra.peff.net>
In-Reply-To
<xmqqvbxiwh8y.fsf@gitster.dls.corp.google.com>
On Fri, Jan 17, 2014 at 11:17:01AM -0800, Junio C Hamano wrote:
Show 19 quoted lines
> > +#ifdef PAGER_MORE_UNDERSTANDS_R
> > +	if (!getenv("MORE"))
> > +		argv_array_push(&env, "MORE=R");
> > +#endif
> >  	pager_process.env = argv_array_detach(&env, NULL);
> >  
> >  	if (start_command(&pager_process))
> 
> Let me repeat from $gmane/240110:
> 
>  - 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?
> 
> As we need to maintain this "set these environments when unset" here
> and also in git-sh-setup.sh, I think it is about time to do that
> clean-up.  Duplicating two settings was borderline OK, but seeing
> the third added fairly soon after the second was added tells me that
> the clean-up must come before adding the third.

Wow, I somehow _completely_ missed that thread. When I looked at the code with LV, I assumed it was just something that had happened long ago and I had forgotten about. I didn't even bother reading "git log".

Yeah, I agree that git-sh-setup should be consistent with what the C porcelains do. However, adding build-time variables like:

  PAGER_ENV = LESS=-FRSX LV=-c

does complicate the point of my series, which was to add more intimate logic about how we handle LESS. With the current code, I can know that an unset "LESS" variable means we will set "R" ourselves and turn on color. We can get around that with something like:

  int pager_can_handle_color(void)
  {
        const char *pager = get_pager();
        if (!strcmp(pager, "less")) {
                const char *x = getenv("LESS");
                if (!x) {
                        const char *e;
                        for (e = pager_env; *e; e++)
                                if ((x = skip_prefix(e, "LESS=")))
                                        break;
                }
                return !x || strchr(x, 'R');
    }
    [...]
  }

but we are still hard-coding a lot of intelligence about "less" here. I wonder if the abstraction provided by the Makefile variable is really worthwhile. Anybody adding a new line to it would also want to tweak pager_can_handle_color to add similar logic.

Taking a step back for a moment, we are getting two things out of such a Makefile variable:

  1. An easy way for packager to add intelligence about common pagers on
     their system.
  2. DRY between git-sh-setup and the C code.

I do like (1), but I do not know if we want to try to encode the "can handle color" logic into a Makefile variable. What would it look like?

For (2), an alternate method would be to simply provide "git pager" as C code, which spawns the appropriate pager as the C code would. Then git-sh-setup can easily build around that.

-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 25 of 39 in “'git log' escape symbols shown as ESC[33 and ESC[m”
  1. YuriJan 17, 2014
  2. Jeff KingJan 17, 2014
  3. YuriJan 17, 2014
  4. Jeff KingJan 17, 2014
  5. YuriJan 17, 2014
  6. Jeff KingJan 17, 2014
  7. YuriJan 17, 2014
  8. Jonathan NiederJan 17, 2014
  9. Jeff KingJan 17, 2014
  10. Jeff KingJan 17, 2014
  11. 0/3 improved out-of-the-box color settingsJeff King, Jan 17, 2014
  12. 1/3 setup_pager: refactor LESS/LV environment settingJeff King, Jan 17, 2014
  13. 2/3 setup_pager: set MORE=RJeff King, Jan 17, 2014
  14. Kyle J. McKayJan 17, 2014
  15. Junio C HamanoJan 17, 2014
  16. Jeff KingJan 21, 2014
  17. Kyle J. McKayJan 21, 2014
  18. Jeff KingJan 23, 2014
  19. Junio C HamanoJan 23, 2014
  20. Junio C HamanoJan 17, 2014
  21. Junio C HamanoJan 17, 2014
  22. Junio C HamanoJan 17, 2014
  23. Jeff KingJan 21, 2014
  24. Junio C HamanoJan 21, 2014
  25. Jeff KingJan 21, 2014
  26. Junio C HamanoJan 21, 2014
  27. Jeff KingFeb 4, 2014
  28. Junio C HamanoFeb 4, 2014
  29. Jeff KingFeb 4, 2014
  30. YuriFeb 4, 2014
  31. Jeff KingFeb 4, 2014
  32. Junio C HamanoFeb 4, 2014
  33. YuriFeb 4, 2014
  34. Kyle J. McKayFeb 5, 2014
  35. 3/3 pager: disable colors for some known-bad configurationsJeff King, Jan 17, 2014
  36. YuriJan 17, 2014
  37. YuriJan 17, 2014
  38. YuriFeb 5, 2014
  39. Jeff KingFeb 5, 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.