summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1110
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1110')
-rw-r--r--data/vim/patches/8.1.1110189
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 ///