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':
                                <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 <M-x> form is also
!                       printed.  For example:
                                <~A>  <M-^A>  129,  Hex 81,  Octal 201 ~
                                <p>  <|~>  <M-~>  254,  Hex fe,  Octal 376 ~
                        (where <p> is a special character)
                        The <Nul> character in a file is stored internally as
                        <NL>, 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':
                                <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 <M-x> form
!                       is also printed.  For example:
                                <~A>  <M-^A>  129,  Hex 81,  Octal 201 ~
                                <p>  <|~>  <M-~>  254,  Hex fe,  Octal 376 ~
                        (where <p> is a special character)
+ 
                        The <Nul> character in a file is stored internally as
                        <NL>, 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\<c-k>".a:chars
  endfu
  
! func! Put_Dig_BS(char1, char2)
    exe "norm! o".a:char1."\<bs>".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\<c-k>".a:chars
  endfu
  
! func Put_Dig_BS(char1, char2)
    exe "norm! o".a:char1."\<bs>".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 <esc><bs>A works,
    " without moving up a line
    set digraph ww=
--- 214,220 ----
    bw!
  endfunc
  
! func Test_digraphs_option()
    " reset whichwrap option, so that testing <esc><bs>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\<Eu\D*8364\>'))
--- 420,426 ----
    bw!
  endfunc
  
! func Test_digraphs_output()
    new
    let out = execute(':digraph')
    call assert_equal('Eu €  8364',  matchstr(out, '\C\<Eu\D*8364\>'))
***************
*** 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<e>  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<e>  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<e>  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<e>  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 -- b...@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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui