diff options
Diffstat (limited to 'data/vim/patches/8.1.1110')
-rw-r--r-- | data/vim/patches/8.1.1110 | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1110 b/data/vim/patches/8.1.1110 new file mode 100644 index 000000000..b8f33f7ef --- /dev/null +++ b/data/vim/patches/8.1.1110 @@ -0,0 +1,189 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1110 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.1110 +Problem: Composing chars on space wrong when 'listchars' is set. +Solution: Do not use "space" and "nbsp" entries of 'listchars' when there is + a composing character. (Yee Cheng Chin, closes #4197) +Files: src/screen.c, src/testdir/test_listchars.vim + + +*** ../vim-8.1.1109/src/screen.c 2019-03-30 18:46:57.360077328 +0100 +--- src/screen.c 2019-04-04 13:20:05.804978752 +0200 +*************** +*** 4808,4841 **** + } + #endif + +! // 'list': change char 160 to lcs_nbsp and space to lcs_space. +! if (wp->w_p_list) + { +! if ((c == 160 +! || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f))) +! && lcs_nbsp) + { +! c = lcs_nbsp; +! mb_c = c; +! if (enc_utf8 && utf_char2len(c) > 1) +! { +! mb_utf8 = TRUE; +! u8cc[0] = 0; +! c = 0xc0; +! } +! else +! mb_utf8 = FALSE; + } +! else if (c == ' ' && lcs_space && ptr - line <= trailcol) + { +! c = lcs_space; +! if (mb_utf8 == FALSE && area_attr == 0 && search_attr == 0) +! { +! n_attr = 1; +! extra_attr = HL_ATTR(HLF_8); +! saved_attr2 = char_attr; // save current attr +! } + } + } + + if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ') +--- 4808,4843 ---- + } + #endif + +! // 'list': Change char 160 to lcs_nbsp and space to lcs_space. +! // But not when the character is followed by a composing +! // character (use mb_l to check that). +! if (wp->w_p_list +! && ((((c == 160 && mb_l == 1) +! || (mb_utf8 +! && ((mb_c == 160 && mb_l == 2) +! || (mb_c == 0x202f && mb_l == 3)))) +! && lcs_nbsp) +! || (c == ' ' +! && mb_l == 1 +! && lcs_space +! && ptr - line <= trailcol))) + { +! c = (c == ' ') ? lcs_space : lcs_nbsp; +! if (area_attr == 0 && search_attr == 0) + { +! n_attr = 1; +! extra_attr = HL_ATTR(HLF_8); +! saved_attr2 = char_attr; /* save current attr */ + } +! mb_c = c; +! if (enc_utf8 && utf_char2len(c) > 1) + { +! mb_utf8 = TRUE; +! u8cc[0] = 0; +! c = 0xc0; + } ++ else ++ mb_utf8 = FALSE; + } + + if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ') +*** ../vim-8.1.1109/src/testdir/test_listchars.vim 2019-03-30 15:44:14.023783571 +0100 +--- src/testdir/test_listchars.vim 2019-04-04 13:14:10.463479095 +0200 +*************** +*** 114,119 **** +--- 114,146 ---- + set listchars& ff& + endfunc + ++ " Test that unicode listchars characters get properly inserted ++ func Test_listchars_unicode() ++ enew! ++ let oldencoding=&encoding ++ set encoding=utf-8 ++ set ff=unix ++ ++ set listchars=eol:⇔,space:␣,nbsp:≠,tab:←↔→ ++ 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('$'))) ++ let &encoding=oldencoding ++ enew! ++ set listchars& ff& ++ endfunction ++ ++ " Tests that space characters following composing character won't get replaced ++ " by listchars. + func Test_listchars_composing() + enew! + let oldencoding=&encoding +*************** +*** 121,138 **** + set ff=unix + set list + +! set listchars=eol:$,space:_ + call append(0, [ +! \ " \u3099 \u309A" + \ ]) + let expected = [ +! \ "_ \u3099^I \u309A$" + \ ] + redraw! + call cursor(1, 1) +! let got = ScreenLines(1, virtcol('$')) +! bw! +! call assert_equal(expected, got) + let &encoding=oldencoding + set listchars& ff& + endfunction +--- 148,167 ---- + set ff=unix + set list + +! set listchars=eol:$,space:_,nbsp:= +! +! 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) +! call assert_equal(expected, ScreenLines(1, virtcol('$'))) + let &encoding=oldencoding ++ enew! + set listchars& ff& + endfunction +*** ../vim-8.1.1109/src/version.c 2019-04-04 13:12:03.688430723 +0200 +--- src/version.c 2019-04-04 13:27:53.489896954 +0200 +*************** +*** 773,774 **** +--- 773,776 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1110, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +191. You rate eating establishments not by the quality of the food, + but by the availability of electrical outlets for your PowerBook. + + /// Bram Moolenaar -- Bram@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 /// |