1
0
forked from aniani/vim

patch 8.0.0396: 'balloonexpr' only works synchronously

Problem:    'balloonexpr' only works synchronously.
Solution:   Add balloon_show(). (Jusufadis Bakamovic, closes #1449)
This commit is contained in:
Bram Moolenaar
2017-03-01 20:32:44 +01:00
parent f8ab1b14fd
commit 59716a27bd
5 changed files with 57 additions and 6 deletions

View File

@@ -1981,19 +1981,20 @@ argidx() Number current index in the argument list
arglistid([{winnr} [, {tabnr}]]) Number argument list id
argv({nr}) String {nr} entry of the argument list
argv() List the argument list
assert_equal({exp}, {act} [, {msg}]) none assert {exp} is equal to {act}
assert_exception({error} [, {msg}]) none assert {error} is in v:exception
assert_fails({cmd} [, {error}]) none assert {cmd} fails
assert_false({actual} [, {msg}]) none assert {actual} is false
assert_equal({exp}, {act} [, {msg}]) none assert {exp} is equal to {act}
assert_exception({error} [, {msg}]) none assert {error} is in v:exception
assert_fails({cmd} [, {error}]) none assert {cmd} fails
assert_false({actual} [, {msg}]) none assert {actual} is false
assert_inrange({lower}, {upper}, {actual} [, {msg}])
none assert {actual} is inside the range
assert_match({pat}, {text} [, {msg}]) none assert {pat} matches {text}
assert_match({pat}, {text} [, {msg}]) none assert {pat} matches {text}
assert_notequal({exp}, {act} [, {msg}]) none assert {exp} is not equal {act}
assert_notmatch({pat}, {text} [, {msg}]) none assert {pat} not matches {text}
assert_true({actual} [, {msg}]) none assert {actual} is true
assert_true({actual} [, {msg}]) none assert {actual} is true
asin({expr}) Float arc sine of {expr}
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
browse({save}, {title}, {initdir}, {default})
String put up a file requester
browsedir({title}, {initdir}) String put up a directory requester
@@ -2619,6 +2620,25 @@ atan2({expr1}, {expr2}) *atan2()*
< 2.356194
{only available when compiled with the |+float| feature}
balloon_show({msg}) *balloon_show()*
Show {msg} inside the balloon.
Example: >
func GetBalloonContent()
" initiate getting the content
return ''
endfunc
set balloonexpr=GetBalloonContent()
func BalloonCallback(result)
call balloon_show(a:result)
endfunc
<
The intended use is that fetching the content of the balloon
is initiated from 'balloonexpr'. It will invoke an
asynchronous method, in which a callback invokes
balloon_show(). The 'balloonexpr' itself can return an
empty string or a placeholder.
{only available when compiled with the +beval feature}
*browse()*
browse({save}, {title}, {initdir}, {default})

View File

@@ -58,6 +58,9 @@ static void f_asin(typval_T *argvars, typval_T *rettv);
static void f_atan(typval_T *argvars, typval_T *rettv);
static void f_atan2(typval_T *argvars, typval_T *rettv);
#endif
#ifdef FEAT_BEVAL
static void f_balloon_show(typval_T *argvars, typval_T *rettv);
#endif
static void f_browse(typval_T *argvars, typval_T *rettv);
static void f_browsedir(typval_T *argvars, typval_T *rettv);
static void f_bufexists(typval_T *argvars, typval_T *rettv);
@@ -483,6 +486,9 @@ static struct fst
#ifdef FEAT_FLOAT
{"atan", 1, 1, f_atan},
{"atan2", 2, 2, f_atan2},
#endif
#ifdef FEAT_BEVAL
{"balloon_show", 1, 1, f_balloon_show},
#endif
{"browse", 4, 4, f_browse},
{"browsedir", 2, 2, f_browsedir},
@@ -1362,6 +1368,17 @@ f_atan2(typval_T *argvars, typval_T *rettv)
}
#endif
/*
* "balloon_show()" function
*/
#ifdef FEAT_BEVAL
static void
f_balloon_show(typval_T *argvars, typval_T *rettv UNUSED)
{
gui_mch_post_balloon(balloonEval, get_tv_string_chk(&argvars[0]));
}
#endif
/*
* "browse(save, title, initdir, default)" function
*/

View File

@@ -467,6 +467,12 @@ mch_inchar(
if ((wait_time < 0 || wait_time > 100L) && channel_any_readahead())
wait_time = 10L;
#endif
#ifdef FEAT_BEVAL
if (p_beval && wait_time > 100L)
/* The 'balloonexpr' may indirectly invoke a callback while waiting
* for a character, need to check often. */
wait_time = 100L;
#endif
/*
* We want to be interrupted by the winch signal

View File

@@ -1467,6 +1467,12 @@ WaitForChar(long msec)
dwWaitTime = 10;
}
#endif
#ifdef FEAT_BEVAL
if (p_beval && dwWaitTime > 100)
/* The 'balloonexpr' may indirectly invoke a callback while
* waiting for a character, need to check often. */
dwWaitTime = 100;
#endif
#ifdef FEAT_MZSCHEME
if (mzthreads_allowed() && p_mzq > 0
&& (msec < 0 || (long)dwWaitTime > p_mzq))

View File

@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
396,
/**/
395,
/**/