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:
@@ -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})
|
||||
|
@@ -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
|
||||
*/
|
||||
|
@@ -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
|
||||
|
@@ -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))
|
||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
396,
|
||||
/**/
|
||||
395,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user