emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 54ac1165bc3: Support setting PAGER=cat in comint.el (bug#62958)


From: Eli Zaretskii
Subject: master 54ac1165bc3: Support setting PAGER=cat in comint.el (bug#62958)
Date: Fri, 26 May 2023 07:30:27 -0400 (EDT)

branch: master
commit 54ac1165bc3f6012201689b7f23d7edba2926f6d
Author: Spencer Baugh <sbaugh@janestreet.com>
Commit: Eli Zaretskii <eliz@gnu.org>

    Support setting PAGER=cat in comint.el (bug#62958)
    
    Paging can be undesirable in comint-derived commands such as
    async-shell-command and M-x shell.  It is a frequent footgun for new
    Emacs users when they try to run commands which start a pager in such
    modes.
    
    Simply adding (setenv "PAGER" "cat") globally is not correct, since
    that will break modes like term, which support paging quite well.
    It's only and exactly the comint-derived modes which don't need
    paging.
    
    * lisp/comint.el (comint-pager): Add. (bug#62958)
    (comint-exec-1): Use comint-pager to set PAGER.
---
 lisp/comint.el | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/lisp/comint.el b/lisp/comint.el
index 77973ab76de..718a972a582 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -258,6 +258,35 @@ to set this in a mode hook, rather than customize the 
default value."
                 file)
   :group 'comint)
 
+(defcustom comint-pager nil
+  "If non-nil, the program to use for 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 limits the amount of output produced and
+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\".
+
+The interactive browsing aspects of pagination are not needed, and get
+in the way, when the output of the program is directed to an Emacs
+buffer, so in those cases pagination might need to be disabled.
+Disabling pagination means that some programs will produce large
+amounts of output, but most such programs have other ways to limit
+their output, such as additional arguments or Emacs interfaces.
+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."
+  :version "30.1"
+  :type '(choice (const :tag "Use default PAGER" nil)
+                 (const :tag "Don't do paging (PAGER=cat)" "cat")
+                 (string :tag "Program name or absolute path of pager"))
+  :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.")
@@ -865,6 +894,10 @@ series of processes in the same Comint buffer.  The hook
         (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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]