patch 8.0.1318: terminal balloon only shows one line

Problem:    Terminal balloon only shows one line.
Solution:   Split into several lines in a clever way.  Add balloon_split().
            Make balloon_show() accept a list in the terminal.
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index c001f6f..2ce6c48 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2032,6 +2032,7 @@
 atan({expr})			Float	arc tangent of {expr}
 atan2({expr1}, {expr2})		Float	arc tangent of {expr1} / {expr2}
 balloon_show({msg})		none	show {msg} inside the balloon
+balloon_split({msg})		List	split {msg} as used for a balloon
 browse({save}, {title}, {initdir}, {default})
 				String	put up a file requester
 browsedir({title}, {initdir})	String	put up a directory requester
@@ -2682,8 +2683,12 @@
 <			2.356194
 		{only available when compiled with the |+float| feature}
 
-balloon_show({msg})					*balloon_show()*
-		Show {msg} inside the balloon.
+balloon_show({expr})					*balloon_show()*
+		Show {expr} inside the balloon.  For the GUI {expr} is used as
+		a string.  For a terminal {expr} can be a list, which contains
+		the lines of the balloon.  If {expr} is not a list it will be
+		split with |balloon_split()|.
+
 		Example: >
 			func GetBalloonContent()
 			   " initiate getting the content
@@ -2705,6 +2710,12 @@
 		error message.
 		{only available when compiled with the +balloon_eval feature}
 
+balloon_split({msg})					*balloon_split()*
+		Split {msg} into lines to be displayed in a balloon.  The
+		splits are made for the current window size and optimize to
+		show debugger output.
+		Returns a |List| with the split lines.
+
 							*browse()*
 browse({save}, {title}, {initdir}, {default})
 		Put up a file requester.  This only works when "has("browse")"
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
index 1c3c9df..aca56d2 100644
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -127,9 +127,11 @@
   call win_gotoid(s:gdbwin)
 
   " Enable showing a balloon with eval info
-  if has("balloon_eval")
-    set ballooneval
+  if has("balloon_eval") || has("balloon_eval_term")
     set balloonexpr=TermDebugBalloonExpr()
+    if has("balloon_eval")
+      set ballooneval
+    endif
     if has("balloon_eval_term")
       set balloonevalterm
     endif
@@ -158,9 +160,11 @@
     let &columns = s:save_columns
   endif
 
-  if has("balloon_eval")
-    set noballooneval
+  if has("balloon_eval") || has("balloon_eval_term")
     set balloonexpr=
+    if has("balloon_eval")
+      set noballooneval
+    endif
     if has("balloon_eval_term")
       set noballoonevalterm
     endif
@@ -366,6 +370,7 @@
   if a:msg =~ 'No symbol .* in current context'
 	\ || a:msg =~ 'Cannot access memory at address '
 	\ || a:msg =~ 'Attempt to use a type name as an expression'
+	\ || a:msg =~ 'A syntax error in expression,'
     " Result of s:SendEval() failed, ignore.
     return
   endif