]> git.eshelyaron.com Git - emacs.git/commitdiff
Add a new variable to not recenter term on all input
authorRyan Crum <ryan@ryancrum.org>
Thu, 13 Aug 2020 11:02:17 +0000 (13:02 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 13 Aug 2020 11:02:17 +0000 (13:02 +0200)
* lisp/term.el (term-scroll-snap-to-bottom): New variable (bug#15744).
* lisp/term.el (term-emulate-terminal): Use it.

etc/NEWS
lisp/term.el

index 2be9743a454c859850601c0de398d1cb8a74e1d8..111cecf92badee90bb9a7d19ae4a1b46b40f97e3 100644 (file)
--- 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.
index b990c83cfcb86140728c169ad0c06a12ea06e157..6f899fcb5c82c9d286a3e5ca77d36be226df3280 100644 (file)
@@ -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)))))