forked from aniani/vim
patch 8.0.1203: terminal window mistreats composing characters
Problem: Terminal window mistreats composing characters. Solution: Count composing characters with the base character. (Ozaki Kiichi, closes #2195)
This commit is contained in:
@@ -685,3 +685,60 @@ func Test_terminal_wall()
|
||||
exe buf . 'bwipe'
|
||||
unlet g:job
|
||||
endfunc
|
||||
|
||||
func Test_terminal_composing_unicode()
|
||||
let save_enc = &encoding
|
||||
set encoding=utf-8
|
||||
|
||||
if has('win32')
|
||||
let cmd = "cmd /K chcp 65001"
|
||||
let lnum = [3, 6, 9]
|
||||
else
|
||||
let cmd = &shell
|
||||
let lnum = [1, 3, 5]
|
||||
endif
|
||||
|
||||
enew
|
||||
let buf = term_start(cmd, {'curwin': bufnr('')})
|
||||
let job = term_getjob(buf)
|
||||
call term_wait(buf, 50)
|
||||
|
||||
" ascii + composing
|
||||
let txt = "a\u0308bc"
|
||||
call term_sendkeys(buf, "echo " . txt . "\r")
|
||||
call term_wait(buf, 50)
|
||||
call assert_match("echo " . txt, term_getline(buf, lnum[0]))
|
||||
call assert_equal(txt, term_getline(buf, lnum[0] + 1))
|
||||
let l = term_scrape(buf, lnum[0] + 1)
|
||||
call assert_equal("a\u0308", l[0].chars)
|
||||
call assert_equal("b", l[1].chars)
|
||||
call assert_equal("c", l[2].chars)
|
||||
|
||||
" multibyte + composing
|
||||
let txt = "\u304b\u3099\u304e\u304f\u3099\u3052\u3053\u3099"
|
||||
call term_sendkeys(buf, "echo " . txt . "\r")
|
||||
call term_wait(buf, 50)
|
||||
call assert_match("echo " . txt, term_getline(buf, lnum[1]))
|
||||
call assert_equal(txt, term_getline(buf, lnum[1] + 1))
|
||||
let l = term_scrape(buf, lnum[1] + 1)
|
||||
call assert_equal("\u304b\u3099", l[0].chars)
|
||||
call assert_equal("\u304e", l[1].chars)
|
||||
call assert_equal("\u304f\u3099", l[2].chars)
|
||||
call assert_equal("\u3052", l[3].chars)
|
||||
call assert_equal("\u3053\u3099", l[4].chars)
|
||||
|
||||
" \u00a0 + composing
|
||||
let txt = "abc\u00a0\u0308"
|
||||
call term_sendkeys(buf, "echo " . txt . "\r")
|
||||
call term_wait(buf, 50)
|
||||
call assert_match("echo " . txt, term_getline(buf, lnum[2]))
|
||||
call assert_equal(txt, term_getline(buf, lnum[2] + 1))
|
||||
let l = term_scrape(buf, lnum[2] + 1)
|
||||
call assert_equal("\u00a0\u0308", l[3].chars)
|
||||
|
||||
call term_sendkeys(buf, "exit\r")
|
||||
call WaitFor('job_status(job) == "dead"')
|
||||
call assert_equal('dead', job_status(job))
|
||||
bwipe!
|
||||
let &encoding = save_enc
|
||||
endfunc
|
||||
|
Reference in New Issue
Block a user