Patch 8.2.2640
Problem: screenstring() returns non-existing composing characters.
Solution: Only use composing characters if there is a base character.
Files: src/evalfunc.c, src/testdir/test_listchars.vim
*** ../vim-8.2.2639/src/evalfunc.c 2021-03-14 19:46:22.007284572 +0100
--- src/evalfunc.c 2021-03-22 17:08:19.500462426 +0100
***************
*** 7902,7908 ****
c = ScreenLines[off];
buflen += mb_char2bytes(c, buf);
! if (enc_utf8)
for (i = 0; i < Screen_mco && ScreenLinesC[i][off] != 0; ++i)
buflen += mb_char2bytes(ScreenLinesC[i][off], buf + buflen);
--- 7902,7908 ----
c = ScreenLines[off];
buflen += mb_char2bytes(c, buf);
! if (enc_utf8 && ScreenLinesUC[off] != 0)
for (i = 0; i < Screen_mco && ScreenLinesC[i][off] != 0; ++i)
buflen += mb_char2bytes(ScreenLinesC[i][off], buf + buflen);
*** ../vim-8.2.2639/src/testdir/test_listchars.vim 2021-02-16 21:14:30.549742128 +0100
--- src/testdir/test_listchars.vim 2021-03-22 17:10:35.952068682 +0100
***************
*** 146,152 ****
set list
" Non-breaking space
let nbsp = nr2char(0xa0)
! call append(0, [ ">".nbsp."<" ])
let expected = '>X< '
--- 146,152 ----
set list
" Non-breaking space
let nbsp = nr2char(0xa0)
! call append(0, [ ">" .. nbsp .. "<" ])
let expected = '>X< '
***************
*** 193,204 ****
set list
let nbsp = nr2char(0xa0)
! call append(0, [
! \ "a\tb c".nbsp."d"
! \ ])
! let expected = [
! \ 'a←↔↔↔↔↔→b␣c≠d⇔'
! \ ]
redraw!
call cursor(1, 1)
call assert_equal(expected, ScreenLines(1, virtcol('$')))
--- 193,200 ----
set list
let nbsp = nr2char(0xa0)
! call append(0, ["a\tb c" .. nbsp .. "d"])
! let expected = ['a←↔↔↔↔↔→b␣c≠d⇔']
redraw!
call cursor(1, 1)
call assert_equal(expected, ScreenLines(1, virtcol('$')))
***************
*** 221,230 ****
let nbsp1 = nr2char(0xa0)
let nbsp2 = nr2char(0x202f)
call append(0, [
! \ " \u3099\t \u309A".nbsp1.nbsp1."\u0302".nbsp2.nbsp2."\u0302",
\ ])
let expected = [
! \ "_ \u3099^I \u309A=".nbsp1."\u0302=".nbsp2."\u0302$"
\ ]
redraw!
call cursor(1, 1)
--- 217,226 ----
let nbsp1 = nr2char(0xa0)
let nbsp2 = nr2char(0x202f)
call append(0, [
! \ " \u3099\t \u309A" .. nbsp1 .. nbsp1 .. "\u0302" .. nbsp2 .. nbsp2 .. "\u0302",
\ ])
let expected = [
! \ "_ \u3099^I \u309A=" .. nbsp1 .. "\u0302=" .. nbsp2 .. "\u0302$"
\ ]
redraw!
call cursor(1, 1)
*** ../vim-8.2.2639/src/version.c 2021-03-22 16:45:32.524949544 +0100
--- src/version.c 2021-03-22 17:09:12.504309112 +0100
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 2640,
/**/
--
hundred-and-one symptoms of being an internet addict:
15. Your heart races faster and beats irregularly each time you see a new WWW
site address in print or on TV, even though you've never had heart
problems before.
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language --
http://www.Zimbu.org ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///