To: vim_dev@googlegroups.com Subject: Patch 8.0.1553 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.1553 Problem: Cannot see what digraph is used to insert a character. Solution: Show the digraph with the "ga" command. (Christian Brabandt) Files: runtime/doc/various.txt, src/digraph.c, src/ex_cmds.c, src/proto/digraph.pro, src/testdir/shared.vim, src/testdir/test_matchadd_conceal.vim, src/testdir/test_digraph.vim, src/testdir/test_ga.vim, src/testdir/test_arabic.vim *** ../vim-8.0.1552/runtime/doc/various.txt 2017-11-12 19:21:06.557379725 +0100 --- runtime/doc/various.txt 2018-02-27 21:05:55.453640461 +0100 *************** *** 1,4 **** ! *various.txt* For Vim version 8.0. Last change: 2016 Sep 06 VIM REFERENCE MANUAL by Bram Moolenaar --- 1,4 ---- ! *various.txt* For Vim version 8.0. Last change: 2018 Feb 27 VIM REFERENCE MANUAL by Bram Moolenaar *************** *** 40,62 **** :as[cii] or *ga* *:as* *:ascii* ga Print the ascii value of the character under the ! cursor in decimal, hexadecimal and octal. For ! example, when the cursor is on a 'R': 82, Hex 52, Octal 122 ~ When the character is a non-standard ASCII character, but printable according to the 'isprint' option, the ! non-printable version is also given. When the ! character is larger than 127, the form is also ! printed. For example: <~A> 129, Hex 81, Octal 201 ~

<|~> 254, Hex fe, Octal 376 ~ (where

is a special character) The character in a file is stored internally as , but it will be shown as: <^@> 0, Hex 00, Octal 000 ~ If the character has composing characters these are also shown. The value of 'maxcombine' doesn't matter. ! Mnemonic: Get Ascii value. {not in Vi} *g8* g8 Print the hex values of the bytes used in the --- 40,74 ---- :as[cii] or *ga* *:as* *:ascii* ga Print the ascii value of the character under the ! cursor in decimal, hexadecimal and octal. ! Mnemonic: Get Ascii value. ! ! For example, when the cursor is on a 'R': 82, Hex 52, Octal 122 ~ When the character is a non-standard ASCII character, but printable according to the 'isprint' option, the ! non-printable version is also given. ! ! When the character is larger than 127, the form ! is also printed. For example: <~A> 129, Hex 81, Octal 201 ~

<|~> 254, Hex fe, Octal 376 ~ (where

is a special character) + The character in a file is stored internally as , but it will be shown as: <^@> 0, Hex 00, Octal 000 ~ + If the character has composing characters these are also shown. The value of 'maxcombine' doesn't matter. ! ! If the character can be inserted as a digraph, also ! output the two characters that can be used to create ! the character: ! <ö> 246, Hex 00f6, Oct 366, Digr o: ~ ! This shows you can type CTRL-K o : to insert ö. ! ! {not in Vi} *g8* g8 Print the hex values of the bytes used in the *** ../vim-8.0.1552/src/digraph.c 2018-01-28 17:05:12.409577523 +0100 --- src/digraph.c 2018-02-27 20:01:13.127332284 +0100 *************** *** 1975,1980 **** --- 1975,2015 ---- } /* + * Find a digraph for "val". If found return the string to display it. + * If not found return NULL. + */ + char_u * + get_digraph_for_char(val) + int val; + { + int i; + int use_defaults; + digr_T *dp; + static char_u r[3]; + + for (use_defaults = 0; use_defaults <= 1; use_defaults++) + { + if (use_defaults == 0) + dp = (digr_T *)user_digraphs.ga_data; + else + dp = digraphdefault; + for (i = 0; use_defaults ? dp->char1 != NUL + : i < user_digraphs.ga_len; ++i) + { + if (dp->result == val) + { + r[0] = dp->char1; + r[1] = dp->char2; + r[2] = NUL; + return r; + } + ++dp; + } + } + return NULL; + } + + /* * Get a digraph. Used after typing CTRL-K on the command line or in normal * mode. * Returns composed character, or NUL when ESC was used. *** ../vim-8.0.1552/src/ex_cmds.c 2018-02-19 23:09:57.385619337 +0100 --- src/ex_cmds.c 2018-02-27 20:03:00.902620216 +0100 *************** *** 49,54 **** --- 49,57 ---- char buf1[20]; char buf2[20]; char_u buf3[7]; + #ifdef FEAT_DIGRAPHS + char_u *dig; + #endif #ifdef FEAT_MBYTE int cc[MAX_MCO]; int ci = 0; *************** *** 94,100 **** else #endif buf2[0] = NUL; ! vim_snprintf((char *)IObuff, IOSIZE, _("<%s>%s%s %d, Hex %02x, Octal %03o"), transchar(c), buf1, buf2, cval, cval, cval); #ifdef FEAT_MBYTE --- 97,111 ---- else #endif buf2[0] = NUL; ! #ifdef FEAT_DIGRAPHS ! dig = get_digraph_for_char(cval); ! if (dig != NULL) ! vim_snprintf((char *)IObuff, IOSIZE, ! _("<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s"), ! transchar(c), buf1, buf2, cval, cval, cval, dig); ! else ! #endif ! vim_snprintf((char *)IObuff, IOSIZE, _("<%s>%s%s %d, Hex %02x, Octal %03o"), transchar(c), buf1, buf2, cval, cval, cval); #ifdef FEAT_MBYTE *************** *** 121,129 **** ) IObuff[len++] = ' '; /* draw composing char on top of a space */ len += (*mb_char2bytes)(c, IObuff + len); ! vim_snprintf((char *)IObuff + len, IOSIZE - len, ! c < 0x10000 ? _("> %d, Hex %04x, Octal %o") ! : _("> %d, Hex %08x, Octal %o"), c, c, c); if (ci == MAX_MCO) break; if (enc_utf8) --- 132,150 ---- ) IObuff[len++] = ' '; /* draw composing char on top of a space */ len += (*mb_char2bytes)(c, IObuff + len); ! #ifdef FEAT_DIGRAPHS ! dig = get_digraph_for_char(c); ! if (dig != NULL) ! vim_snprintf((char *)IObuff + len, IOSIZE - len, ! c < 0x10000 ? _("> %d, Hex %04x, Oct %o, Digr %s") ! : _("> %d, Hex %08x, Oct %o, Digr %s"), ! c, c, c, dig); ! else ! #endif ! vim_snprintf((char *)IObuff + len, IOSIZE - len, ! c < 0x10000 ? _("> %d, Hex %04x, Octal %o") ! : _("> %d, Hex %08x, Octal %o"), ! c, c, c); if (ci == MAX_MCO) break; if (enc_utf8) *** ../vim-8.0.1552/src/proto/digraph.pro 2018-01-28 17:05:12.413577503 +0100 --- src/proto/digraph.pro 2018-02-27 19:52:40.834727597 +0100 *************** *** 1,5 **** --- 1,6 ---- /* digraph.c */ int do_digraph(int c); + char_u *get_digraph_for_char(int val); int get_digraph(int cmdline); int getdigraph(int char1, int char2, int meta_char); void putdigraph(char_u *str); *** ../vim-8.0.1552/src/testdir/shared.vim 2018-02-27 17:17:32.439413984 +0100 --- src/testdir/shared.vim 2018-02-27 20:14:42.241933704 +0100 *************** *** 259,261 **** --- 259,272 ---- func CanRunGui() return has('gui') && ($DISPLAY != "" || has('gui_running')) endfunc + + " Get line "lnum" as displayed on the screen. + " Trailing white space is trimmed. + func! Screenline(lnum) + let chars = [] + for c in range(1, winwidth(0)) + call add(chars, nr2char(screenchar(a:lnum, c))) + endfor + let line = join(chars, '') + return matchstr(line, '^.\{-}\ze\s*$') + endfunc *** ../vim-8.0.1552/src/testdir/test_matchadd_conceal.vim 2016-10-28 22:10:22.771343841 +0200 --- src/testdir/test_matchadd_conceal.vim 2018-02-27 20:11:53.647061644 +0100 *************** *** 7,23 **** set term=ansi endif ! function! s:screenline(lnum) abort ! let line = [] ! for c in range(1, winwidth(0)) ! call add(line, nr2char(screenchar(a:lnum, c))) ! endfor ! return s:trim(join(line, '')) ! endfunction ! ! function! s:trim(str) abort ! return matchstr(a:str,'^\s*\zs.\{-}\ze\s*$') ! endfunction function! Test_simple_matchadd() new --- 7,13 ---- set term=ansi endif ! source shared.vim function! Test_simple_matchadd() new *************** *** 30,36 **** call matchadd('Conceal', '\%2l ') redraw! let lnum = 2 ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) --- 20,26 ---- call matchadd('Conceal', '\%2l ') redraw! let lnum = 2 ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) *************** *** 53,59 **** call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) redraw! let lnum = 2 ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 43,49 ---- call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) redraw! let lnum = 2 ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 79,85 **** call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) redraw! let lnum = 2 ! call assert_equal(expect, s:screenline(lnum)) call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 69,75 ---- call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) redraw! let lnum = 2 ! call assert_equal(expect, Screenline(lnum)) call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 92,98 **** call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'}) redraw! ! call assert_equal(expect, s:screenline(lnum)) call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2) , screenattr(lnum, 7)) call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 10)) --- 82,88 ---- call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'}) redraw! ! call assert_equal(expect, Screenline(lnum)) call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2) , screenattr(lnum, 7)) call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 10)) *************** *** 116,122 **** call matchadd('Conceal', '\%2l ', 10, -1, {}) redraw! let lnum = 2 ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 106,112 ---- call matchadd('Conceal', '\%2l ', 10, -1, {}) redraw! let lnum = 2 ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 129,135 **** set listchars=conceal:+ redraw! ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 119,125 ---- set listchars=conceal:+ redraw! ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 153,159 **** syntax match MyConceal /\%2l / conceal containedin=ALL cchar=* redraw! let lnum = 2 ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 143,149 ---- syntax match MyConceal /\%2l / conceal containedin=ALL cchar=* redraw! let lnum = 2 ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 165,171 **** call clearmatches() redraw! ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 155,161 ---- call clearmatches() redraw! ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 191,197 **** redraw! let lnum = 2 ! call assert_equal(expect, s:screenline(lnum)) call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 181,187 ---- redraw! let lnum = 2 ! call assert_equal(expect, Screenline(lnum)) call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 204,210 **** call setmatches(a) redraw! ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) --- 194,200 ---- call setmatches(a) redraw! ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10)) *************** *** 232,238 **** redraw! let lnum = 2 ! call assert_equal(expect, s:screenline(lnum)) call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 2)) call assert_notequal(screenattr(lnum, 2) , screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 7)) --- 222,228 ---- redraw! let lnum = 2 ! call assert_equal(expect, Screenline(lnum)) call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 2)) call assert_notequal(screenattr(lnum, 2) , screenattr(lnum, 7)) call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 7)) *************** *** 254,266 **** 1put ='TARGET_TARGETTARGET' call cursor(1, 1) redraw ! call assert_equal('TARGET_TARGETTARGET', s:screenline(2)) setlocal conceallevel=2 call matchadd('Conceal', 'TARGET', 10, -1, {'conceal': 't'}) redraw ! call assert_equal('t_tt', s:screenline(2)) quit! endfunction --- 244,256 ---- 1put ='TARGET_TARGETTARGET' call cursor(1, 1) redraw ! call assert_equal('TARGET_TARGETTARGET', Screenline(2)) setlocal conceallevel=2 call matchadd('Conceal', 'TARGET', 10, -1, {'conceal': 't'}) redraw ! call assert_equal('t_tt', Screenline(2)) quit! endfunction *************** *** 276,288 **** syntax on syntax keyword coqKwd bool conceal cchar=- redraw! ! call assert_equal(expect, s:screenline(1)) call assert_notequal(screenattr(1, 10) , screenattr(1, 11)) call assert_notequal(screenattr(1, 11) , screenattr(1, 12)) call assert_equal(screenattr(1, 11) , screenattr(1, 32)) call matchadd('CheckedByCoq', '\%<2l\%>9c\%<16c') redraw! ! call assert_equal(expect, s:screenline(1)) call assert_notequal(screenattr(1, 10) , screenattr(1, 11)) call assert_notequal(screenattr(1, 11) , screenattr(1, 12)) call assert_equal(screenattr(1, 11) , screenattr(1, 32)) --- 266,278 ---- syntax on syntax keyword coqKwd bool conceal cchar=- redraw! ! call assert_equal(expect, Screenline(1)) call assert_notequal(screenattr(1, 10) , screenattr(1, 11)) call assert_notequal(screenattr(1, 11) , screenattr(1, 12)) call assert_equal(screenattr(1, 11) , screenattr(1, 32)) call matchadd('CheckedByCoq', '\%<2l\%>9c\%<16c') redraw! ! call assert_equal(expect, Screenline(1)) call assert_notequal(screenattr(1, 10) , screenattr(1, 11)) call assert_notequal(screenattr(1, 11) , screenattr(1, 12)) call assert_equal(screenattr(1, 11) , screenattr(1, 32)) *** ../vim-8.0.1552/src/testdir/test_digraph.vim 2017-10-15 22:07:35.207683184 +0200 --- src/testdir/test_digraph.vim 2018-02-27 21:08:09.032768991 +0100 *************** *** 4,18 **** finish endif ! func! Put_Dig(chars) exe "norm! o\".a:chars endfu ! func! Put_Dig_BS(char1, char2) exe "norm! o".a:char1."\".a:char2 endfu ! func! Test_digraphs() new call Put_Dig("00") call assert_equal("∞", getline('.')) --- 4,18 ---- finish endif ! func Put_Dig(chars) exe "norm! o\".a:chars endfu ! func Put_Dig_BS(char1, char2) exe "norm! o".a:char1."\".a:char2 endfu ! func Test_digraphs() new call Put_Dig("00") call assert_equal("∞", getline('.')) *************** *** 214,220 **** bw! endfunc ! func! Test_digraphs_option() " reset whichwrap option, so that testing A works, " without moving up a line set digraph ww= --- 214,220 ---- bw! endfunc ! func Test_digraphs_option() " reset whichwrap option, so that testing A works, " without moving up a line set digraph ww= *************** *** 420,426 **** bw! endfunc ! func! Test_digraphs_output() new let out = execute(':digraph') call assert_equal('Eu € 8364', matchstr(out, '\C\')) --- 420,426 ---- bw! endfunc ! func Test_digraphs_output() new let out = execute(':digraph') call assert_equal('Eu € 8364', matchstr(out, '\C\')) *************** *** 436,442 **** bw! endfunc ! func! Test_loadkeymap() if !has('keymap') return endif --- 436,442 ---- bw! endfunc ! func Test_loadkeymap() if !has('keymap') return endif *************** *** 450,456 **** bw! endfunc ! func! Test_digraph_cmndline() " Create digraph on commandline " This is a hack, to let Vim create the digraph in commandline mode let s = '' --- 450,456 ---- bw! endfunc ! func Test_digraph_cmndline() " Create digraph on commandline " This is a hack, to let Vim create the digraph in commandline mode let s = '' *************** *** 458,461 **** --- 458,468 ---- call assert_equal("€", s) endfunc + func Test_show_digraph() + new + call Put_Dig("e=") + call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii')) + bwipe! + endfunc + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-8.0.1552/src/testdir/test_ga.vim 2017-02-01 20:53:18.659092738 +0100 --- src/testdir/test_ga.vim 2018-02-27 20:52:25.538926287 +0100 *************** *** 11,23 **** new set display=uhex call assert_equal("\nNUL", Do_ga('')) ! call assert_equal("\n<<01>> 1, Hex 01, Octal 001", Do_ga("\x01")) ! call assert_equal("\n<<09>> 9, Hex 09, Octal 011", Do_ga("\t")) set display= call assert_equal("\nNUL", Do_ga('')) ! call assert_equal("\n<^A> 1, Hex 01, Octal 001", Do_ga("\x01")) ! call assert_equal("\n<^I> 9, Hex 09, Octal 011", Do_ga("\t")) call assert_equal("\n 101, Hex 65, Octal 145", Do_ga('e')) --- 11,23 ---- new set display=uhex call assert_equal("\nNUL", Do_ga('')) ! call assert_equal("\n<<01>> 1, Hex 01, Oct 001, Digr SH", Do_ga("\x01")) ! call assert_equal("\n<<09>> 9, Hex 09, Oct 011, Digr HT", Do_ga("\t")) set display= call assert_equal("\nNUL", Do_ga('')) ! call assert_equal("\n<^A> 1, Hex 01, Oct 001, Digr SH", Do_ga("\x01")) ! call assert_equal("\n<^I> 9, Hex 09, Oct 011, Digr HT", Do_ga("\t")) call assert_equal("\n 101, Hex 65, Octal 145", Do_ga('e')) *************** *** 26,33 **** endif " Test a few multi-bytes characters. ! call assert_equal("\n<é> 233, Hex 00e9, Octal 351", Do_ga('é')) ! call assert_equal("\n<ẻ> 7867, Hex 1ebb, Octal 17273", Do_ga('ẻ')) " Test with combining characters. call assert_equal("\n 101, Hex 65, Octal 145 < ́> 769, Hex 0301, Octal 1401", Do_ga("e\u0301")) --- 26,33 ---- endif " Test a few multi-bytes characters. ! call assert_equal("\n<é> 233, Hex 00e9, Oct 351, Digr e'", Do_ga('é')) ! call assert_equal("\n<ẻ> 7867, Hex 1ebb, Oct 17273, Digr e2", Do_ga('ẻ')) " Test with combining characters. call assert_equal("\n 101, Hex 65, Octal 145 < ́> 769, Hex 0301, Octal 1401", Do_ga("e\u0301")) *** ../vim-8.0.1552/src/testdir/test_arabic.vim 2017-03-21 13:22:40.681468530 +0100 --- src/testdir/test_arabic.vim 2018-02-27 20:59:25.152187290 +0100 *************** *** 16,24 **** let numchars = strchars(getline('.'), 1) for i in range(1, numchars) exe 'norm ' i . '|' ! let c=execute('ascii') ! let c=substitute(c, '\n\?<.\{-}Hex\s*', 'U+', 'g') ! let c=substitute(c, ',\s*Octal\s*\d*', '', 'g') call add(chars, c) endfor return chars --- 16,24 ---- let numchars = strchars(getline('.'), 1) for i in range(1, numchars) exe 'norm ' i . '|' ! let c = execute('ascii') ! let c = substitute(c, '\n\?<.\{-}Hex\s*', 'U+', 'g') ! let c = substitute(c, ',\s*Oct\(al\)\=\s\d*\(, Digr ..\)\=', '', 'g') call add(chars, c) endfor return chars *** ../vim-8.0.1552/src/version.c 2018-02-27 19:09:56.711821176 +0100 --- src/version.c 2018-02-27 21:06:47.185302954 +0100 *************** *** 780,781 **** --- 780,783 ---- { /* Add new patch number below this line */ + /**/ + 1553, /**/ -- Communication is one of the most compli..., eh, well, it's hard. You know what I mean. Not? /// 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 ///