From c84d3c1638a140b3ca16e8285328a903e16aa27e Mon Sep 17 00:00:00 2001 From: Ryan Crum Date: Thu, 13 Aug 2020 13:02:17 +0200 Subject: [PATCH] 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 2be9743a454..111cecf92ba 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 b990c83cfcb..6f899fcb5c8 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))))) -- 2.39.5