mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-25 19:11:56 +00:00
Fix term.el cursor movement at bottom margin (Bug#31690)
* lisp/term.el (term-handle-ansi-escape) <\E[B cud>: Allow moving the cursor to the bottom margin line, rather than stopping one line before.
This commit is contained in:
parent
4c3fae3cf2
commit
8a1576cc03
@ -3387,11 +3387,10 @@ option is enabled. See `term-set-goto-process-mark'."
|
||||
;; \E[B - cursor down (terminfo: cud)
|
||||
((eq char ?B)
|
||||
(let ((tcr (term-current-row)))
|
||||
(unless (= tcr (1- term-scroll-end))
|
||||
(unless (>= tcr term-scroll-end)
|
||||
(term-down
|
||||
(if (> (+ tcr term-terminal-parameter) term-scroll-end)
|
||||
(- term-scroll-end 1 tcr)
|
||||
(max 1 term-terminal-parameter)) t))))
|
||||
(min (- term-scroll-end tcr) (max 1 term-terminal-parameter))
|
||||
t))))
|
||||
;; \E[C - cursor right (terminfo: cuf, cuf1)
|
||||
((eq char ?C)
|
||||
(term-move-columns
|
||||
|
@ -124,6 +124,27 @@ line6\r
|
||||
40 12 (list "\eAnSiTc /f" "oo/\n") 'default-directory)
|
||||
"/foo/"))))
|
||||
|
||||
(ert-deftest term-to-margin ()
|
||||
"Test cursor movement at the scroll margin.
|
||||
This is a reduced example from GNU nano's initial screen."
|
||||
(let* ((width 10)
|
||||
(x (make-string width ?x))
|
||||
(y (make-string width ?y)))
|
||||
(should (equal (term-test-screen-from-input
|
||||
width 3
|
||||
`("\e[1;3r" ; Setup 3 line scrolling region.
|
||||
"\e[2;1H" ; Move to 2nd last line.
|
||||
,x ; Fill with 'x'.
|
||||
"\r\e[1B" ; Next line.
|
||||
,y)) ; Fill with 'y'.
|
||||
(concat "\n" x "\n" y)))
|
||||
;; Same idea, but moving upwards.
|
||||
(should (equal (term-test-screen-from-input
|
||||
width 3
|
||||
`("\e[1;3r" "\e[2;1H" ,x "\r\e[1A" ,y))
|
||||
(concat y "\n" x)))))
|
||||
|
||||
|
||||
(provide 'term-tests)
|
||||
|
||||
;;; term-tests.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user