unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Spencer Baugh <sbaugh@janestreet.com>
Cc: 62958@debbugs.gnu.org
Subject: bug#62958: [PATCH] Set PAGER=cat in comint.el
Date: Fri, 05 May 2023 09:35:18 +0300	[thread overview]
Message-ID: <835y97jnfd.fsf@gnu.org> (raw)
In-Reply-To: <ierjzy6zgnm.fsf@janestreet.com> (message from Spencer Baugh on Thu, 20 Apr 2023 12:01:49 -0400)

> From: Spencer Baugh <sbaugh@janestreet.com>
> Cc: 62958@debbugs.gnu.org
> Date: Thu, 20 Apr 2023 12:01:49 -0400
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> > Is this about removing the leading directories from the value of
> > executable-find?  If so, that is trivial to do, and is not the main
> > point of what I wrote.
> 
> Yes.  But anyway, the default is nil now, so it should be fine.  Unless
> you'd like the custom option of "cat" to not show up on non-UNIX
> platforms, somehow?
> 
> >> > Should this test that comint-pager is a string?
> >> 
> >> I don't think that's necessary; doing
> >> (if (stringp comint-pager) (list (format "PAGER=%s" comint-pager)))
> >> would have unexpected behavior if comint-pager was accidentally set to a
> >> non-string; doing
> >> (when comint-pager (progn (assert (stringp comint-pager))
> >>   (list (format "PAGER=%s" comint-pager))))
> >> is a bit verbose and looks weird and is probably not that important.
> >
> > So we are okay with the user setting the variable to a symbol or a
> > list or a vector?
> 
> Fair enough, I added a check:

Thanks.  This is almost ready to go, I have only 2 minor comments:


> diff --git a/lisp/comint.el b/lisp/comint.el
> index 682b555a33c..a145751565f 100644
> --- a/lisp/comint.el
> +++ b/lisp/comint.el
> @@ -258,6 +258,49 @@ comint-input-ring-file-name
>  		 file)
>    :group 'comint)
>  
> +(defcustom comint-pager nil
> +  "If non-nil, name of the program to use as a pager.
> +
> +If non-nil, comint sets the PAGER environment variable to this
> +value before starting a subprocess.  PAGER controls the pager
> +that will be used.  If you prefer to not use a pager, you can set
> +this variable to \"cat\".
> +
> +If nil, the PAGER environment variable is not set and the default
> +pager will be used.  On Unix systems, typically this is \"less\".
> +
> +Some programs start a pager before producing output.  A pager
> +supports viewing text page by page, so that if the parent program
> +produces more output than will fit on the screen, that output can
> +be viewed incrementally.
> +
> +When a program is running under Emacs, this behavior can be
> +undesirable, since Emacs itself supports viewing text page by
> +page, and a pager requires input from the user before it will
> +show more text.  Furthermore, comint is not a full fledged
> +terminal emulator, so a pager will typically behave badly.
> +
> +However, pagers also provide backpressure: They will not consume
> +more output from the parent program than the user has actually
> +viewed, which on Unix means the output pipe will fill up and the
> +parent program will be stopped from producing unnecessary output.
> +Many programs (such as \"git log\") take advantage of this by
> +producing large amounts of output by default and relying on the
> +pager to not consume text that the user doesn't view.
> +
> +Emacs and comint do not keep track of what text the user has
> +viewed, so they can't provide backpressure like a pager does.
> +This means users who do not use a pager should be careful to not
> +run commands which produce a lot of output.  Users can avoid this
> +by limiting the amount of output (such as with \"git log -n10\")
> +or by using native Emacs interfaces instead (such as
> +`vc-print-log')."

This is too long, IMO.  There's no need for such a long doc string.  I
have tried to make it shorter without losing important details:

    "If non-nil, the program to use to disable pagination of program output.

  Some programs produce large amounts of output, and have provision for
  pagination of their output through a filter program, commonly known
  as a \"pager\".  The pager allows the user to interactively browse
  the output one page at a time.
  Some programs paginate their output by default, by always starting
  a pager.  The program they use as the pager is specified by the
  environment variable PAGER; if that variable is not defined, they
  use some fixed default, such as \"less\".

  Pagination is not needed, and gets in the way, when the output of
  the program is directed to an Emacs buffer, so in those cases
  pagination should be disabled.  To disable pagination, this
  variable's value should be a string that names a program, such
  as \"cat\", which passes through all of the output without any
  filtering or delays.  Comint will then set the PAGER variable
  to name that program, when it invokes external programs."

> +  :type '(choice (const :tag "Use default PAGER" nil)
> +                 (const :tag "Don't do paging (PAGER=cat)" "cat")
> +		 string)

Could we have a helpful :tag for the 'string' alternative?  It would
be good to explain there what kind of strings should be used: either a
full absolute file name or a basename that can be found via PATH.





  reply	other threads:[~2023-05-05  6:35 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-19 21:57 bug#62958: [PATCH] Set PAGER=cat in comint.el Spencer Baugh
2023-04-20  6:43 ` Eli Zaretskii
2023-04-20 15:47   ` Spencer Baugh
2023-04-20 15:56     ` Eli Zaretskii
2023-04-20 16:01       ` Spencer Baugh
2023-05-05  6:35         ` Eli Zaretskii [this message]
2023-05-08 19:38           ` Spencer Baugh
2023-05-09  5:08             ` Eli Zaretskii
2023-05-09 14:55               ` sbaugh
2023-05-09 15:46                 ` Eli Zaretskii
2023-05-09 16:30                   ` Spencer Baugh
2023-05-09 16:43                     ` Eli Zaretskii
2023-05-09 16:53                       ` Spencer Baugh
2023-05-09 16:59                         ` Eli Zaretskii
2023-05-09 17:01                           ` Spencer Baugh
2023-05-09 17:05                             ` Eli Zaretskii
2023-05-09 17:13                               ` Spencer Baugh
2023-05-09 18:58                                 ` Eli Zaretskii
2023-05-16 19:49                                   ` Spencer Baugh
2023-05-17 11:32                                     ` Eli Zaretskii
2023-05-17 14:55                                       ` Spencer Baugh
2023-05-19  6:09                                         ` Eli Zaretskii
2023-05-26 11:31                                           ` Eli Zaretskii
2023-05-09 17:03                           ` Eli Zaretskii
2023-05-10 16:39                 ` Juri Linkov
2023-05-10 16:59                   ` Eli Zaretskii
2023-05-10 18:13                   ` Gregory Heytings
2023-05-12 17:49                     ` Juri Linkov
2023-05-12 22:21                       ` Gregory Heytings
2023-04-26  7:54   ` Philip Kaludercic
2023-04-26  9:15     ` Eli Zaretskii

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=835y97jnfd.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=62958@debbugs.gnu.org \
    --cc=sbaugh@janestreet.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).