>From 174673f0d98b1042ef10a3307bc3956c17b41100 Mon Sep 17 00:00:00 2001 From: John Shahid Date: Mon, 29 Apr 2019 13:53:38 -0400 Subject: [PATCH] Fix setting and unsetting scroll-with-delete * lisp/term.el (term-set-scroll-region): Do not set term-scroll-with-delete when the region is set to the height of the terminal. * lisp/term.el (term-reset-terminal): Reset term-scroll-with-delete. * test/lisp/term-tests.el (term-scrolling-region): Add more tests to term mode handle scroll region properly. --- lisp/term.el | 5 +-- test/lisp/term-tests.el | 78 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 80 insertions(+), 3 deletions(-) diff --git a/lisp/term.el b/lisp/term.el index d69ab94b7a..1fe27da181 100644 --- a/lisp/term.el +++ b/lisp/term.el @@ -1174,7 +1174,7 @@ term-reset-size (setq term-start-line-column nil) (setq term-current-row nil) (setq term-current-column nil) - (term-set-scroll-region 0 height) + (term-set-scroll-region 0 (1- height)) ;; `term-set-scroll-region' causes these to be set, we have to ;; clear them again since we're changing point (Bug#30544). (setq term-start-line-column nil) @@ -3215,6 +3215,7 @@ term-reset-terminal (setq term-current-column 1) (setq term-scroll-start 0) (setq term-scroll-end term-height) + (setq term-scroll-with-delete nil) (setq term-insert-mode nil) ;; FIXME: No idea why this is here, it looks wrong. --Stef (setq term-ansi-face-already-done nil)) @@ -3439,7 +3440,7 @@ term-set-scroll-region (setq term-scroll-with-delete (or (term-using-alternate-sub-buffer) (not (and (= term-scroll-start 0) - (= term-scroll-end term-height))))) + (= term-scroll-end (1- term-height)))))) (term-move-columns (- (term-current-column))) (term-goto 0 0)) diff --git a/test/lisp/term-tests.el b/test/lisp/term-tests.el index 9f5dcd559e..b0b9a11974 100644 --- a/test/lisp/term-tests.el +++ b/test/lisp/term-tests.el @@ -119,7 +119,83 @@ term-test-screen-from-input line4\r line5\r line6\r -")))) +"))) + + ;; test reverse scrolling + (should (equal "line1 +line7 +line6 +line2 +line5" + (term-test-screen-from-input 40 5 + '("\e[0;0H" + "\e[J" + "line1\r +line2\r +line3\r +line4\r +line5" + "\e[2;4r" + "\e[2;0H" + "\e[2;0H" + "\eMline6" + "\e[2;0H" + "\eMline7")))) + + ;; test scrolling down + (should (equal "line1 +line3 +line4 +line7 +line5" + (term-test-screen-from-input 40 5 + '("\e[0;0H" + "\e[J" + "line1\r +line2\r +line3\r +line4\r +line5" + "\e[2;4r" + "\e[2;0H" + "\e[4;5H" + "\n\rline7")))) + + ;; setting the scroll region to the entire height should not turn on + ;; term-scroll-with-delete + (should (equal "line1 +line2 +line3 +line4 +line5 +line6" + (term-test-screen-from-input 40 5 + '("\e[1;5r" + "line1\r +line2\r +line3\r +line4\r +line5\r +line6")))) + + ;; reset should reset term-scroll-with-delete + (should (equal "line1 +line2 +line3 +line4 +line5 +line6 +line7" + (term-test-screen-from-input 40 5 + '("\e[2;5r" ;set the region + "\ec" ;reset + "line1\r +line2\r +line3\r +line4\r +line5\r +line6\r +line7"))))) (ert-deftest term-set-directory () (let ((term-ansi-at-user (user-real-login-name))) -- 2.21.0