To: vim_dev@googlegroups.com Subject: Patch 9.0.1463 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.1463 Problem: Virtual text truncation only works with Unicode 'encoding'. Solution: Convert the ellipsis character to 'encoding' if needed. (Hirohito Higashi, closes #12233) Files: src/drawline.c, src/testdir/test_textprop.vim, src/testdir/dumps/Test_prop_with_text_after_trunc_ambiw_d_1.dump, src/testdir/dumps/Test_prop_with_text_after_trunc_not_utf8.dump *** ../vim-9.0.1462/src/drawline.c 2023-03-02 18:49:05.989526230 +0000 --- src/drawline.c 2023-04-17 21:42:00.308625806 +0100 *************** *** 739,748 **** if (has_mbyte) { ! // change last character to '…' lp -= (*mb_head_off)(l, lp); ! STRCPY(lp, "…"); n_used = lp - l + 3 - before - padding; } else // change last character to '>' --- 739,775 ---- if (has_mbyte) { ! char_u buf[MB_MAXBYTES + 1]; ! char_u *cp = buf; ! ! // change the last character to '…', converted to the ! // current 'encoding' ! STRCPY(buf, "…"); ! if (!enc_utf8) ! { ! vimconv_T vc; ! ! vc.vc_type = CONV_NONE; ! convert_setup(&vc, (char_u *)"utf-8", p_enc); ! if (vc.vc_type != CONV_NONE) ! { ! cp = string_convert(&vc, buf, NULL); ! if (cp == NULL) ! { ! // when conversion fails use '>' ! cp = buf; ! STRCPY(buf, ">"); ! } ! convert_setup(&vc, NULL, NULL); ! } ! } ! ! lp -= (*mb_ptr2cells)(cp) - 1; lp -= (*mb_head_off)(l, lp); ! STRCPY(lp, cp); n_used = lp - l + 3 - before - padding; + if (cp != buf) + vim_free(cp); } else // change last character to '>' *** ../vim-9.0.1462/src/testdir/test_textprop.vim 2023-04-14 21:54:21.096430659 +0100 --- src/testdir/test_textprop.vim 2023-04-17 21:35:30.549948593 +0100 *************** *** 2949,2954 **** --- 2949,3005 ---- call StopVimInTerminal(buf) endfunc + func Test_props_with_text_after_truncated_and_ambiwidth_is_double() + CheckRunVimInTerminal + + let lines =<< trim END + set ambiwidth=double + call setline(1, ['one two three four five six seven']) + call prop_type_add('afterprop', #{highlight: 'Search'}) + call prop_add(1, 0, #{type: 'afterprop', text: ' ONE and TWO and THREE and FOUR and FIVE'}) + + call setline(2, ['one two three four five six seven']) + call prop_add(2, 0, #{type: 'afterprop', text: ' one AND two AND three AND four AND five', text_align: 'right'}) + + call setline(3, ['one two three four five six seven']) + call prop_add(3, 0, #{type: 'afterprop', text: ' one AND two AND three AND four AND five lets wrap after some more text', text_align: 'below'}) + + call setline(4, ['cursor here']) + normal 4Gfh + END + call writefile(lines, 'XscriptPropsWithTextAfterTrunc-and-ambiwidth-is-double', 'D') + let buf = RunVimInTerminal('-S XscriptPropsWithTextAfterTrunc-and-ambiwidth-is-double', #{rows: 9, cols: 60}) + call VerifyScreenDump(buf, 'Test_prop_with_text_after_trunc_ambiw_d_1', {}) + + call StopVimInTerminal(buf) + endfunc + + + func Test_props_with_text_after_truncated_not_utf8() + CheckRunVimInTerminal + + let lines =<< trim END + set enc=cp932 tenc=utf-8 + call setline(1, ['one two three four five six seven']) + call prop_type_add('afterprop', #{highlight: 'Search'}) + call prop_add(1, 0, #{type: 'afterprop', text: ' ONE and TWO and THREE and FOUR and FIVE'}) + + call setline(2, ['one two three four five six seven']) + call prop_add(2, 0, #{type: 'afterprop', text: ' one AND two AND three AND four AND five', text_align: 'right'}) + + call setline(3, ['one two three four five six seven']) + call prop_add(3, 0, #{type: 'afterprop', text: ' one AND two AND three AND four AND five lets wrap after some more text', text_align: 'below'}) + + call setline(4, ['cursor here']) + normal 4Gfh + END + call writefile(lines, 'XscriptPropsWithTextAfterTrunc-enc-is-not-utf8', 'D') + let buf = RunVimInTerminal('-S XscriptPropsWithTextAfterTrunc-enc-is-not-utf8', #{rows: 9, cols: 60}) + call VerifyScreenDump(buf, 'Test_prop_with_text_after_trunc_not_utf8', {}) + + call StopVimInTerminal(buf) + endfunc + func Test_props_with_text_empty_line() CheckRunVimInTerminal *** ../vim-9.0.1462/src/testdir/dumps/Test_prop_with_text_after_trunc_ambiw_d_1.dump 2023-04-17 21:43:35.332399035 +0100 --- src/testdir/dumps/Test_prop_with_text_after_trunc_ambiw_d_1.dump 2023-04-17 21:29:05.751803131 +0100 *************** *** 0 **** --- 1,9 ---- + |o+0&#ffffff0|n|e| |t|w|o| |t|h|r|e@1| |f|o|u|r| |f|i|v|e| |s|i|x| |s|e|v|e|n| +0&#ffff4012|O|N|E| |a|n|d| |T|W|O| |a|n|d| |T|H|R|E@1| |a|n|…| + |o+0&#ffffff0|n|e| |t|w|o| |t|h|r|e@1| |f|o|u|r| |f|i|v|e| |s|i|x| |s|e|v|e|n| +0&#ffff4012|o|n|e| |A|N|D| |t|w|o| |A|N|D| |t|h|r|e@1| |A|N|…| + |o+0&#ffffff0|n|e| |t|w|o| |t|h|r|e@1| |f|o|u|r| |f|i|v|e| |s|i|x| |s|e|v|e|n| @26 + | +0&#ffff4012|o|n|e| |A|N|D| |t|w|o| |A|N|D| |t|h|r|e@1| |A|N|D| |f|o|u|r| |A|N|D| |f|i|v|e| |l|e|t|s| |w|r|a|p| |a|f|t|e|r| |s|…| + |c+0&#ffffff0|u|r|s|o|r| >h|e|r|e| @48 + |~+0#4040ff13&| @58 + |~| @58 + |~| @58 + | +0#0000000&@41|4|,|8| @10|A|l@1| *** ../vim-9.0.1462/src/testdir/dumps/Test_prop_with_text_after_trunc_not_utf8.dump 2023-04-17 21:43:35.336399026 +0100 --- src/testdir/dumps/Test_prop_with_text_after_trunc_not_utf8.dump 2023-04-17 21:29:05.751803131 +0100 *************** *** 0 **** --- 1,9 ---- + |o+0&#ffffff0|n|e| |t|w|o| |t|h|r|e@1| |f|o|u|r| |f|i|v|e| |s|i|x| |s|e|v|e|n| +0&#ffff4012|O|N|E| |a|n|d| |T|W|O| |a|n|d| |T|H|R|E@1| |a|n|…| +0&#ffffff0 + |o|n|e| |t|w|o| |t|h|r|e@1| |f|o|u|r| |f|i|v|e| |s|i|x| |s|e|v|e|n| +0&#ffff4012|o|n|e| |A|N|D| |t|w|o| |A|N|D| |t|h|r|e@1| |A|N|…| +0&#ffffff0 + |o|n|e| |t|w|o| |t|h|r|e@1| |f|o|u|r| |f|i|v|e| |s|i|x| |s|e|v|e|n| @26 + | +0&#ffff4012|o|n|e| |A|N|D| |t|w|o| |A|N|D| |t|h|r|e@1| |A|N|D| |f|o|u|r| |A|N|D| |f|i|v|e| |l|e|t|s| |w|r|a|p| |a|f|t|e|r| |s|…| +0&#ffffff0 + |c|u|r|s|o|r| >h|e|r|e| @48 + |~+0#4040ff13&| @58 + |~| @58 + |~| @58 + | +0#0000000&@41|4|,|8| @10|A|l@1| *** ../vim-9.0.1462/src/version.c 2023-04-17 19:23:41.946037074 +0100 --- src/version.c 2023-04-17 21:31:06.987432972 +0100 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 1463, /**/ -- Sometimes I think the surest sign that intelligent life exists elsewhere in the universe is that none of it has tried to contact us. (Calvin) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///