patch 8.0.1553: cannot see what digraph is used to insert a character

Problem:    Cannot see what digraph is used to insert a character.
Solution:   Show the digraph with the "ga" command. (Christian Brabandt)
diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim
index ef85514..5fef6bd 100644
--- a/src/testdir/shared.vim
+++ b/src/testdir/shared.vim
@@ -259,3 +259,14 @@
 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
diff --git a/src/testdir/test_arabic.vim b/src/testdir/test_arabic.vim
index e62b022..17e925e 100644
--- a/src/testdir/test_arabic.vim
+++ b/src/testdir/test_arabic.vim
@@ -16,9 +16,9 @@
   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')
+    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
diff --git a/src/testdir/test_digraph.vim b/src/testdir/test_digraph.vim
index 6290680..271066d 100644
--- a/src/testdir/test_digraph.vim
+++ b/src/testdir/test_digraph.vim
@@ -4,15 +4,15 @@
   finish
 endif
 
-func! Put_Dig(chars)
+func Put_Dig(chars)
   exe "norm! o\<c-k>".a:chars
 endfu
 
-func! Put_Dig_BS(char1, char2)
+func Put_Dig_BS(char1, char2)
   exe "norm! o".a:char1."\<bs>".a:char2
 endfu
 
-func! Test_digraphs()
+func Test_digraphs()
   new
   call Put_Dig("00")
   call assert_equal("∞", getline('.'))
@@ -214,7 +214,7 @@
   bw!
 endfunc
 
-func! Test_digraphs_option()
+func Test_digraphs_option()
   " reset whichwrap option, so that testing <esc><bs>A works,
   " without moving up a line
   set digraph ww=
@@ -420,7 +420,7 @@
   bw!
 endfunc
 
-func! Test_digraphs_output()
+func Test_digraphs_output()
   new
   let out = execute(':digraph')
   call assert_equal('Eu €  8364',  matchstr(out, '\C\<Eu\D*8364\>'))
@@ -436,7 +436,7 @@
   bw!
 endfunc
 
-func! Test_loadkeymap()
+func Test_loadkeymap()
   if !has('keymap')
     return
   endif
@@ -450,7 +450,7 @@
   bw!
 endfunc
 
-func! Test_digraph_cmndline()
+func Test_digraph_cmndline()
   " Create digraph on commandline
   " This is a hack, to let Vim create the digraph in commandline mode
   let s = ''
@@ -458,4 +458,11 @@
   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
diff --git a/src/testdir/test_ga.vim b/src/testdir/test_ga.vim
index f9357dd..6a7cba2 100644
--- a/src/testdir/test_ga.vim
+++ b/src/testdir/test_ga.vim
@@ -11,13 +11,13 @@
   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"))
+  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,  Octal 001",    Do_ga("\x01"))
-  call assert_equal("\n<^I>  9,  Hex 09,  Octal 011",    Do_ga("\t"))
+  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,8 +26,8 @@
   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('ẻ'))
+  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"))
diff --git a/src/testdir/test_matchadd_conceal.vim b/src/testdir/test_matchadd_conceal.vim
index d285a4c..123bdf0 100644
--- a/src/testdir/test_matchadd_conceal.vim
+++ b/src/testdir/test_matchadd_conceal.vim
@@ -7,17 +7,7 @@
   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
+source shared.vim
 
 function! Test_simple_matchadd()
   new
@@ -30,7 +20,7 @@
   call matchadd('Conceal', '\%2l ')
   redraw!
   let lnum = 2
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +43,7 @@
   call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'})
   redraw!
   let lnum = 2
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +69,7 @@
   call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'})
   redraw!
   let lnum = 2
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +82,7 @@
 
   call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'})
   redraw!
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +106,7 @@
   call matchadd('Conceal', '\%2l ', 10, -1, {})
   redraw!
   let lnum = 2
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +119,7 @@
   set listchars=conceal:+
   redraw!
 
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +143,7 @@
   syntax match MyConceal /\%2l / conceal containedin=ALL cchar=*
   redraw!
   let lnum = 2
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +155,7 @@
   call clearmatches()
   redraw!
 
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +181,7 @@
   redraw!
 
   let lnum = 2
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +194,7 @@
   call setmatches(a)
   redraw!
 
-  call assert_equal(expect, s:screenline(lnum))
+  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,7 +222,7 @@
   redraw!
 
   let lnum = 2
-  call assert_equal(expect, s:screenline(lnum))
+  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,13 +244,13 @@
   1put ='TARGET_TARGETTARGET'
   call cursor(1, 1)
   redraw
-  call assert_equal('TARGET_TARGETTARGET', s:screenline(2))
+  call assert_equal('TARGET_TARGETTARGET', Screenline(2))
 
   setlocal conceallevel=2
   call matchadd('Conceal', 'TARGET', 10, -1, {'conceal': 't'})
 
   redraw
-  call assert_equal('t_tt', s:screenline(2))
+  call assert_equal('t_tt', Screenline(2))
 
   quit!
 endfunction
@@ -276,13 +266,13 @@
   syntax on
   syntax keyword coqKwd bool conceal cchar=-
   redraw!
-  call assert_equal(expect, s:screenline(1))
+  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, s:screenline(1))
+  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))