diff options
author | Sam Bingner <sam@bingner.com> | 2019-06-05 22:02:50 -1000 |
---|---|---|
committer | Sam Bingner <sam@bingner.com> | 2019-06-05 22:02:50 -1000 |
commit | a255618e22152ca2e5fd361a3d0762e9db20dd80 (patch) | |
tree | 5c98f76c0de0785b8d5b58ac622da34f0d024a8f /data/vim/patches/8.1.1071 | |
parent | 1b1fa61507a809a66f053a8523f883b2b6a2f487 (diff) |
Update vim to 8.1.1471
Diffstat (limited to 'data/vim/patches/8.1.1071')
-rw-r--r-- | data/vim/patches/8.1.1071 | 321 |
1 files changed, 321 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1071 b/data/vim/patches/8.1.1071 new file mode 100644 index 000000000..32bed27a3 --- /dev/null +++ b/data/vim/patches/8.1.1071 @@ -0,0 +1,321 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1071 +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.1071 +Problem: Cannot get composing characters from the screen. +Solution: Add screenchars() and screenstring(). (partly by Ozaki Kiichi, + closes #4059) +Files: runtime/doc/eval.txt, runtime/doc/usr_41.txt, src/evalfunc.c, + src/testdir/test_utf8.vim, src/testdir/view_util.vim + + +*** ../vim-8.1.1070/runtime/doc/eval.txt 2019-03-29 12:19:34.949348952 +0100 +--- runtime/doc/eval.txt 2019-03-29 13:32:41.481037953 +0100 +*************** +*** 2500,2507 **** +--- 2525,2534 ---- + rubyeval({expr}) any evaluate |Ruby| expression + screenattr({row}, {col}) Number attribute at screen position + screenchar({row}, {col}) Number character at screen position ++ screenchars({row}, {col}) List List of characters at screen position + screencol() Number current cursor column + screenrow() Number current cursor row ++ screenstring({row}, {col}) String characters at screen position + search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) + Number search for {pattern} + searchdecl({name} [, {global} [, {thisblock}]]) +*************** +*** 7458,7463 **** +--- 7512,7524 ---- + This is mainly to be used for testing. + Returns -1 when row or col is out of range. + ++ screenchars({row}, {col}) *screenchars()* ++ The result is a List of Numbers. The first number is the same ++ as what |screenchar()| returns. Further numbers are ++ composing characters on top of the base character. ++ This is mainly to be used for testing. ++ Returns an empty List when row or col is out of range. ++ + screencol() *screencol()* + The result is a Number, which is the current screen column of + the cursor. The leftmost column has number 1. +*************** +*** 7479,7484 **** +--- 7540,7553 ---- + + Note: Same restrictions as with |screencol()|. + ++ screenstring({row}, {col}) *screenstring()* ++ The result is a String that contains the base character and ++ any composing characters at position [row, col] on the screen. ++ This is like |screenchars()| but returning a String with the ++ characters. ++ This is mainly to be used for testing. ++ Returns an empty String when row or col is out of range. ++ + search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* + Search for regexp pattern {pattern}. The search starts at the + cursor position (you can use |cursor()| to set it). +*** ../vim-8.1.1070/runtime/doc/usr_41.txt 2019-03-29 12:19:34.953348924 +0100 +--- runtime/doc/usr_41.txt 2019-03-29 13:44:52.996710729 +0100 +*************** +*** 722,727 **** +--- 723,730 ---- + diff_filler() get the number of filler lines above a line + screenattr() get attribute at a screen line/row + screenchar() get character code at a screen line/row ++ screenchars() get character codes at a screen line/row ++ screenstring() get string of characters at a screen line/row + + Working with text in the current buffer: *text-functions* + getline() get a line or list of lines from the buffer +*** ../vim-8.1.1070/src/evalfunc.c 2019-03-29 12:19:34.953348924 +0100 +--- src/evalfunc.c 2019-03-29 13:44:04.812822817 +0100 +*************** +*** 344,351 **** +--- 344,353 ---- + #endif + static void f_screenattr(typval_T *argvars, typval_T *rettv); + static void f_screenchar(typval_T *argvars, typval_T *rettv); ++ static void f_screenchars(typval_T *argvars, typval_T *rettv); + static void f_screencol(typval_T *argvars, typval_T *rettv); + static void f_screenrow(typval_T *argvars, typval_T *rettv); ++ static void f_screenstring(typval_T *argvars, typval_T *rettv); + static void f_search(typval_T *argvars, typval_T *rettv); + static void f_searchdecl(typval_T *argvars, typval_T *rettv); + static void f_searchpair(typval_T *argvars, typval_T *rettv); +*************** +*** 839,846 **** +--- 841,850 ---- + #endif + {"screenattr", 2, 2, f_screenattr}, + {"screenchar", 2, 2, f_screenchar}, ++ {"screenchars", 2, 2, f_screenchars}, + {"screencol", 0, 0, f_screencol}, + {"screenrow", 0, 0, f_screenrow}, ++ {"screenstring", 2, 2, f_screenstring}, + {"search", 1, 4, f_search}, + {"searchdecl", 1, 3, f_searchdecl}, + {"searchpair", 3, 7, f_searchpair}, +*************** +*** 10430,10437 **** + + row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; + col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; +! if (row < 0 || row >= screen_Rows +! || col < 0 || col >= screen_Columns) + c = -1; + else + { +--- 10434,10440 ---- + + row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; + col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; +! if (row < 0 || row >= screen_Rows || col < 0 || col >= screen_Columns) + c = -1; + else + { +*************** +*** 10445,10450 **** +--- 10448,10486 ---- + } + + /* ++ * "screenchars()" function ++ */ ++ static void ++ f_screenchars(typval_T *argvars, typval_T *rettv) ++ { ++ int row; ++ int col; ++ int off; ++ int c; ++ int i; ++ ++ if (rettv_list_alloc(rettv) == FAIL) ++ return; ++ row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; ++ col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; ++ if (row < 0 || row >= screen_Rows || col < 0 || col >= screen_Columns) ++ return; ++ ++ off = LineOffset[row] + col; ++ if (enc_utf8 && ScreenLinesUC[off] != 0) ++ c = ScreenLinesUC[off]; ++ else ++ c = ScreenLines[off]; ++ list_append_number(rettv->vval.v_list, (varnumber_T)c); ++ ++ if (enc_utf8) ++ ++ for (i = 0; i < Screen_mco && ScreenLinesC[i][off] != 0; ++i) ++ list_append_number(rettv->vval.v_list, ++ (varnumber_T)ScreenLinesC[i][off]); ++ } ++ ++ /* + * "screencol()" function + * + * First column is 1 to be consistent with virtcol(). +*************** +*** 10465,10470 **** +--- 10501,10543 ---- + } + + /* ++ * "screenstring()" function ++ */ ++ static void ++ f_screenstring(typval_T *argvars, typval_T *rettv) ++ { ++ int row; ++ int col; ++ int off; ++ int c; ++ int i; ++ char_u buf[MB_MAXBYTES + 1]; ++ int buflen = 0; ++ ++ rettv->vval.v_string = NULL; ++ rettv->v_type = VAR_STRING; ++ ++ row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; ++ col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; ++ if (row < 0 || row >= screen_Rows || col < 0 || col >= screen_Columns) ++ return; ++ ++ off = LineOffset[row] + col; ++ if (enc_utf8 && ScreenLinesUC[off] != 0) ++ c = ScreenLinesUC[off]; ++ else ++ 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); ++ ++ buf[buflen] = NUL; ++ rettv->vval.v_string = vim_strsave(buf); ++ } ++ ++ /* + * "search()" function + */ + static void +*** ../vim-8.1.1070/src/testdir/test_utf8.vim 2019-01-24 17:59:35.143217444 +0100 +--- src/testdir/test_utf8.vim 2019-03-29 14:01:18.960304440 +0100 +*************** +*** 1,5 **** +--- 1,6 ---- + " Tests for Unicode manipulations + ++ source view_util.vim + + " Visual block Insert adjusts for multi-byte char + func Test_visual_block_insert() +*************** +*** 60,62 **** +--- 61,97 ---- + call assert_equal(2, virtcol("'[")) + call assert_equal(2, virtcol("']")) + endfunc ++ ++ func Test_screenchar_utf8() ++ new ++ ++ " 1-cell, with composing characters ++ call setline(1, ["ABC\u0308"]) ++ redraw ++ call assert_equal([0x0041], screenchars(1, 1)) ++ call assert_equal([0x0042], screenchars(1, 2)) ++ call assert_equal([0x0043, 0x0308], screenchars(1, 3)) ++ call assert_equal("A", screenstring(1, 1)) ++ call assert_equal("B", screenstring(1, 2)) ++ call assert_equal("C\u0308", screenstring(1, 3)) ++ ++ " 2-cells, with composing characters ++ let text = "\u3042\u3044\u3046\u3099" ++ call setline(1, text) ++ redraw ++ call assert_equal([0x3042], screenchars(1, 1)) ++ call assert_equal([0], screenchars(1, 2)) ++ call assert_equal([0x3044], screenchars(1, 3)) ++ call assert_equal([0], screenchars(1, 4)) ++ call assert_equal([0x3046, 0x3099], screenchars(1, 5)) ++ ++ call assert_equal("\u3042", screenstring(1, 1)) ++ call assert_equal("", screenstring(1, 2)) ++ call assert_equal("\u3044", screenstring(1, 3)) ++ call assert_equal("", screenstring(1, 4)) ++ call assert_equal("\u3046\u3099", screenstring(1, 5)) ++ ++ call assert_equal([text . ' '], ScreenLinesUtf8(1, 8)) ++ ++ bwipe! ++ endfunc +*** ../vim-8.1.1070/src/testdir/view_util.vim 2017-09-30 20:54:26.000000000 +0200 +--- src/testdir/view_util.vim 2019-03-29 13:57:25.433562107 +0100 +*************** +*** 5,10 **** +--- 5,11 ---- + finish + endif + ++ " Get text on the screen, without composing characters. + " ScreenLines(lnum, width) or + " ScreenLines([start, end], width) + function! ScreenLines(lnum, width) abort +*************** +*** 22,27 **** +--- 23,47 ---- + endfor + return lines + endfunction ++ ++ " Get text on the screen, including composing characters. ++ " ScreenLines(lnum, width) or ++ " ScreenLines([start, end], width) ++ function! ScreenLinesUtf8(lnum, width) abort ++ redraw! ++ if type(a:lnum) == v:t_list ++ let start = a:lnum[0] ++ let end = a:lnum[1] ++ else ++ let start = a:lnum ++ let end = a:lnum ++ endif ++ let lines = [] ++ for l in range(start, end) ++ let lines += [join(map(range(1, a:width), 'screenstring(l, v:val)'), '')] ++ endfor ++ return lines ++ endfunction + + function! ScreenAttrs(lnum, width) abort + redraw! +*** ../vim-8.1.1070/src/version.c 2019-03-29 13:12:36.163021160 +0100 +--- src/version.c 2019-03-29 14:02:22.863949517 +0100 +*************** +*** 777,778 **** +--- 777,780 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1071, + /**/ + +-- +We are the Borg of GNU GPL. We will assimilate your source code. +Resistance is futile. + + /// 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 /// |