emacs-diffs
[Top][All Lists]
Advanced

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

master c84d3c1 2/2: Add a new variable to not recenter term on all input


From: Lars Ingebrigtsen
Subject: master c84d3c1 2/2: Add a new variable to not recenter term on all input
Date: Thu, 13 Aug 2020 07:02:29 -0400 (EDT)

branch: master
commit c84d3c1638a140b3ca16e8285328a903e16aa27e
Author: Ryan Crum <ryan@ryancrum.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Add a new variable to not recenter term on all input
    
    * lisp/term.el (term-scroll-snap-to-bottom): New variable (bug#15744).
    * lisp/term.el (term-emulate-terminal): Use it.
---
 etc/NEWS     |  6 ++++++
 lisp/term.el | 17 ++++++++++++++---
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 2be9743..111cecf 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -780,6 +780,12 @@ digits.
 
 ** Miscellaneous
 
+---
+*** New variable 'term-scroll-snap-to-bottom'
+term will, by default, recenter the buffer so that the prompt on the
+final line in the window.  Setting this new variable to nil inhibits
+this behavior.
+
 *** The new library hierarchy.el has been added.
 It's a library to create, query, navigate and display hierarchy
 structures.
diff --git a/lisp/term.el b/lisp/term.el
index b990c83..6f899fc 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -501,6 +501,13 @@ This variable is buffer-local."
   :type 'boolean
   :group 'term)
 
+(defcustom term-scroll-snap-to-bottom t
+  "Control whether to keep the prompt at the bottom of the window.
+If non-nil, when the prompt is visible within the window, then
+scroll so that the prompt is on the bottom on any input or
+output."
+  :type 'boolean)
+
 (defcustom term-scroll-show-maximum-output nil
   "Controls how interpreter output causes window to scroll.
 If non-nil, then show the maximum output when the window is scrolled.
@@ -3108,15 +3115,19 @@ See `term-prompt-regexp'."
                                    (or (eq scroll 'this) (not save-point)))
                               (and (eq scroll 'others)
                                    (not (eq selected win))))
-                      (goto-char term-home-marker)
-                      (recenter 0)
+                      (when term-scroll-snap-to-bottom
+                        (goto-char term-home-marker)
+                        (recenter 0))
                       (goto-char (process-mark proc))
                       (if (not (pos-visible-in-window-p (point) win))
                           (recenter -1)))
                     ;; Optionally scroll so that the text
                     ;; ends at the bottom of the window.
                     (when (and term-scroll-show-maximum-output
-                               (>= (point) (process-mark proc)))
+                               (>= (point) (process-mark proc))
+                               (or term-scroll-snap-to-bottom
+                                   (not (pos-visible-in-window-p
+                                          (point-max) win))))
                       (save-excursion
                         (goto-char (point-max))
                         (recenter -1)))))



reply via email to

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