Fix term.el bug with very short multibyte character chunk
Before this change, a chunk containing only a part of a multibyte character would be discarded and displayed undecoded on the terminal. * lisp/term.el (term-emulate-terminal): Fix handling chunks with part of a multibyte character. (Bug#77410) * test/lisp/term-tests.el (term-decode-partial) (term-undecodable-input): Fix and enhance tests. Copyright-paperwork-exempt: yes
This commit is contained in:
parent
b0d6fe1449
commit
158cf528c4
2 changed files with 10 additions and 9 deletions
|
@ -3116,7 +3116,7 @@ See `term-prompt-regexp'."
|
|||
(- count 1 partial)))
|
||||
'eight-bit))
|
||||
(incf partial))
|
||||
(when (> count partial 0)
|
||||
(when (> partial 0)
|
||||
(setq term-terminal-undecoded-bytes
|
||||
(substring decoded-substring (- partial)))
|
||||
(setq decoded-substring
|
||||
|
|
|
@ -402,17 +402,18 @@ This is a reduced example from GNU nano's initial screen."
|
|||
(ert-deftest term-decode-partial () ;; Bug#25288.
|
||||
"Test multibyte characters sent into multiple chunks."
|
||||
;; Set `locale-coding-system' so test will be deterministic.
|
||||
(let* ((locale-coding-system 'utf-8-unix)
|
||||
(string (make-string 7 ?ш))
|
||||
(bytes (encode-coding-string string locale-coding-system)))
|
||||
(should (equal string
|
||||
(term-test-screen-from-input
|
||||
40 1 `(,(substring bytes 0 (/ (length bytes) 2))
|
||||
,(substring bytes (/ (length bytes) 2))))))))
|
||||
(let ((locale-coding-system 'utf-8-unix))
|
||||
(should (equal "шшш" (term-test-screen-from-input
|
||||
40 1 '("\321" "\210\321\210\321\210"))))
|
||||
(should (equal "шшш" (term-test-screen-from-input
|
||||
40 1 '("\321\210\321" "\210\321\210"))))
|
||||
(should (equal "шшш" (term-test-screen-from-input
|
||||
40 1 '("\321\210\321\210\321" "\210"))))))
|
||||
|
||||
(ert-deftest term-undecodable-input () ;; Bug#29918.
|
||||
"Undecodable bytes should be passed through without error."
|
||||
(let* ((locale-coding-system 'utf-8-unix) ; As above.
|
||||
(bytes "\376\340\360\370")
|
||||
(bytes "\376\340\360\370.")
|
||||
(string (decode-coding-string bytes locale-coding-system)))
|
||||
(should (equal string
|
||||
(term-test-screen-from-input
|
||||
|
|
Loading…
Add table
Reference in a new issue