0
0
mirror of https://github.com/vim/vim.git synced 2025-09-28 04:24:06 -04:00

patch 9.0.1598: screenchar() and others are wrong with DBCS 'encoding'

Problem:    screenchar(), screenchars() and screenstring() do not work
            properly when 'encoding' is set to a double-byte encoding.
Solution:   Fix the way the bytes of the characters are obtained.
            (issue #12469)
This commit is contained in:
zeertzjq
2023-06-01 20:26:55 +01:00
committed by Bram Moolenaar
parent 8509014add
commit 47eec6716b
5 changed files with 58 additions and 35 deletions

View File

@@ -3217,6 +3217,31 @@ func Test_screen_functions()
call assert_equal(-1, screenattr(-1, -1))
call assert_equal(-1, screenchar(-1, -1))
call assert_equal([], screenchars(-1, -1))
" Run this in a separate Vim instance to avoid messing up.
let after =<< trim [CODE]
scriptencoding utf-8
call setline(1, '口')
redraw
call assert_equal(0, screenattr(1, 1))
call assert_equal(char2nr('口'), screenchar(1, 1))
call assert_equal([char2nr('口')], screenchars(1, 1))
call assert_equal('口', screenstring(1, 1))
call writefile(v:errors, 'Xresult')
qall!
[CODE]
let encodings = ['utf-8', 'cp932', 'cp936', 'cp949', 'cp950']
if !has('win32')
let encodings += ['euc-jp']
endif
for enc in encodings
let msg = 'enc=' .. enc
if RunVim([], after, $'--clean --cmd "set encoding={enc}"')
call assert_equal([], readfile('Xresult'), msg)
endif
call delete('Xresult')
endfor
endfunc
" Test for getcurpos() and setpos()