To: vim_dev@googlegroups.com Subject: Patch 8.1.1110 Fcc: outbox From: Bram Moolenaar 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 ///