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

Re: Forcing git to use a pager without a tty

From
AMAvishay Matayev <me@avishay.dev>
Date
Jun 23, 2021, 08:25 UTC
Message-ID
<CAJ-0Oswry0Rry_0ZqZzzVGuzfU-apZnv95LcxQEhm7GVA=uOxA@mail.gmail.com>
In-Reply-To
<60d294eb984ba_3122081@natae.notmuch>

On Wed, 23 Jun 2021 at 04:57, Felipe Contreras <felipe.contreras@gmail.com> wrote:

Show 16 quoted lines
>
> Avishay Matayev wrote:
>
> > Some git commands use a pager, which is usually a program that needs a
> > pty to function properly (`less`, for example). Fugitive can't really
> > use a pty for the pager as vim runs its subprocesses without a pty.
> > Therefore Fugitive just creates its own pager (which is a simple
> > window in vim) and pastes the git command output there.
>
> That's not necessarily true; vim uses a bunch of convoluted logic to
> sometimes use a pty, but that depends on the mode used (graphical vs.
> console), and a bunch of other things.
>
> Even more complicated when you throw nvim into the mix.
>
> But yeah, for the sake of simplication let's say that's true.
True, I did oversimplify.
Show 30 quoted lines
> > We had some ideas how to make this feasible (as you can read on the
> > thread) but for brevity's sake I'll present the best (IMO) idea:
> > Essentially, at `pager.c`, don't short-circuit in `git_pager` (or
> > `setup_pager`?) due to pty absence if a new environment variable is
> > present, perhaps something like `GIT_PAGER_FORCE` which will override
> > the `PAGER` and `GIT_PAGER` variables. This will allow Fugitive to
> > apply custom logic through to pager to know if one exists and present
> > the window in vim.
>
> Seems like a completely sensible request to me, except I would do it a
> slightly different place:
>
> --- a/pager.c
> +++ b/pager.c
> @@ -101,7 +101,7 @@ void prepare_pager_args(struct child_process *pager_process, const char *pager)
>
>  void setup_pager(void)
>  {
> -       const char *pager = git_pager(isatty(1));
> +       const char *pager = git_pager(git_env_bool("GIT_PAGER_FORCE", isatty(1)));
>
>         if (!pager)
>                 return;
>
> I'm Cc'ing Jonathan Nieder who seems to have toched these lines.
>
> Cheers.
>
> --
> Felipe Contreras

Well I'm glad to hear you find it sensible, though your patch suggests that `GIT_PAGER_FORCE` will be a boolean, while I expect it to be an actual pager, which would make more sense IMO.

Avishay
Previous: Felipe ContrerasNext: Felipe Contreras
Message 3 of 13 in “”
  1. Avishay MatayevJun 22, 2021
  2. Felipe ContrerasJun 23, 2021
  3. Avishay MatayevJun 23, 2021
  4. Felipe ContrerasJun 25, 2021
  5. Avishay MatayevJun 26, 2021
  6. Why empty subject? (was Re: )Bagas Sanjaya, Jun 23, 2021
  7. Avishay MatayevJun 23, 2021
  8. Phillip WoodJun 23, 2021
  9. Phillip WoodJun 23, 2021
  10. Avishay MatayevJun 24, 2021
  11. Ævar Arnfjörð BjarmasonJun 24, 2021
  12. Avishay MatayevJun 26, 2021
  13. Junio C HamanoJun 29, 2021

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.