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