Fix line-wrapping for term.el (Bug#30775)
* lisp/term.el (term-emulate-terminal): Leave line-wrapping state if point was moved after we entered it. * test/lisp/term-tests.el (term-line-wrapping-then-motion): New test.
This commit is contained in:
parent
e0f18aa07f
commit
4c33ad4a24
2 changed files with 20 additions and 3 deletions
11
lisp/term.el
11
lisp/term.el
|
@ -2891,9 +2891,11 @@ See `term-prompt-regexp'."
|
|||
;; If the last char was written in last column,
|
||||
;; back up one column, but remember we did so.
|
||||
;; Thus we emulate xterm/vt100-style line-wrapping.
|
||||
(cond ((eq (term-current-column) term-width)
|
||||
(term-move-columns -1)
|
||||
(setq term-do-line-wrapping t)))
|
||||
(when (eq (term-current-column) term-width)
|
||||
(term-move-columns -1)
|
||||
;; We check after ctrl sequence handling if point
|
||||
;; was moved (and leave line-wrapping state if so).
|
||||
(setq term-do-line-wrapping (point)))
|
||||
(setq term-current-column nil)
|
||||
(setq i funny))
|
||||
(pcase-exhaustive (and (<= ctl-end str-length) (aref str i))
|
||||
|
@ -2993,6 +2995,9 @@ See `term-prompt-regexp'."
|
|||
(substring str i ctl-end)))))
|
||||
;; Ignore NUL, Shift Out, Shift In.
|
||||
((or ?\0 #xE #xF 'nil) nil))
|
||||
;; Leave line-wrapping state if point was moved.
|
||||
(unless (eq term-do-line-wrapping (point))
|
||||
(setq term-do-line-wrapping nil))
|
||||
(if (term-handling-pager)
|
||||
(progn
|
||||
;; Finish stuff to get ready to handle PAGER.
|
||||
|
|
|
@ -124,6 +124,18 @@ line6\r
|
|||
40 12 (list "\eAnSiTc /f" "oo/\n") 'default-directory)
|
||||
"/foo/"))))
|
||||
|
||||
(ert-deftest term-line-wrapping-then-motion ()
|
||||
"Make sure we reset the line-wrapping state after moving cursor.
|
||||
A real-life example is the default zsh prompt which writes spaces
|
||||
to the end of line (triggering line-wrapping state), and then
|
||||
sends a carriage return followed by another space to overwrite
|
||||
the first character of the line."
|
||||
(let* ((width 10)
|
||||
(strs (list "x" (make-string (1- width) ?_)
|
||||
"\r_")))
|
||||
(should (equal (term-test-screen-from-input width 12 strs)
|
||||
(make-string width ?_)))))
|
||||
|
||||
(provide 'term-tests)
|
||||
|
||||
;;; term-tests.el ends here
|
||||
|
|
Loading…
Add table
Reference in a new issue