From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Spencer Baugh Newsgroups: gmane.emacs.bugs Subject: bug#62958: [PATCH] Set PAGER=cat in comint.el Date: Thu, 20 Apr 2023 12:01:49 -0400 Message-ID: References: <83edof6oln.fsf@gnu.org> <83zg724kea.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22327"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: 62958@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Apr 20 18:03:32 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ppWku-0005Zb-6G for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 20 Apr 2023 18:03:32 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppWjT-0007sX-PA; Thu, 20 Apr 2023 12:02:03 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppWjS-0007r8-Jt for bug-gnu-emacs@gnu.org; Thu, 20 Apr 2023 12:02:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ppWjS-00023b-BV for bug-gnu-emacs@gnu.org; Thu, 20 Apr 2023 12:02:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ppWjR-00041M-VF for bug-gnu-emacs@gnu.org; Thu, 20 Apr 2023 12:02:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Spencer Baugh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 20 Apr 2023 16:02:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 62958 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 62958-submit@debbugs.gnu.org id=B62958.168200652015447 (code B ref 62958); Thu, 20 Apr 2023 16:02:01 +0000 Original-Received: (at 62958) by debbugs.gnu.org; 20 Apr 2023 16:02:00 +0000 Original-Received: from localhost ([127.0.0.1]:38569 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ppWjP-000415-H3 for submit@debbugs.gnu.org; Thu, 20 Apr 2023 12:01:59 -0400 Original-Received: from mxout5.mail.janestreet.com ([64.215.233.18]:50693) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ppWjK-00040q-QZ for 62958@debbugs.gnu.org; Thu, 20 Apr 2023 12:01:58 -0400 In-Reply-To: <83zg724kea.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 20 Apr 2023 18:56:45 +0300") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:260346 Archived-At: Eli Zaretskii writes: >> From: Spencer Baugh >> Cc: 62958@debbugs.gnu.org >> Date: Thu, 20 Apr 2023 11:47:42 -0400 >> >> Eli Zaretskii writes: >> >> > Sorry, this default cannot be universally correct. You assume that >> > 'cat' is always available, which is not true on non-Posix platforms. >> > So at the very least the value should be set according to >> > executable-find. >> >> executable-find is not correct in the case of "cat" unfortunately, >> because there are programs (git, for one) which if they see PAGER=cat, >> just don't start a pager at all, for greater efficiency. (which is >> desirable behavior) > > 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: 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')." + :version "30.1" + :type '(choice (const :tag "Use default PAGER" nil) + (const :tag "Don't do paging (PAGER=cat)" "cat") + string) + :group 'comint) + (defvar comint-input-ring-file-prefix nil "The prefix to skip when parsing the input ring file. This is useful in Zsh when the extended_history option is on.") @@ -864,6 +907,10 @@ comint-exec-1 (nconc (comint-term-environment) (list (format "INSIDE_EMACS=%s,comint" emacs-version)) + (when comint-pager + (if (stringp comint-pager) + (list (format "PAGER=%s" comint-pager)) + (error "comint-pager should be a string: %s" comint-pager))) process-environment)) (default-directory (if (file-accessible-directory-p default-directory)