diff options
-rw-r--r-- | src/beval.c | 13 | ||||
-rw-r--r-- | src/option.c | 15 | ||||
-rw-r--r-- | src/proto/option.pro | 1 | ||||
-rw-r--r-- | src/testdir/dumps/Test_balloon_eval_term_01.dump | 2 | ||||
-rw-r--r-- | src/testdir/dumps/Test_balloon_eval_term_01a.dump | 2 | ||||
-rw-r--r-- | src/testdir/dumps/Test_balloon_eval_term_02.dump | 2 | ||||
-rw-r--r-- | src/testdir/test_balloon.vim | 3 | ||||
-rw-r--r-- | src/version.c | 2 |
8 files changed, 36 insertions, 4 deletions
diff --git a/src/beval.c b/src/beval.c index 8b7570b575..a9d10a202e 100644 --- a/src/beval.c +++ b/src/beval.c @@ -259,6 +259,8 @@ general_beval_cb(BalloonEval *beval, int state UNUSED) : wp->w_buffer->b_p_bexpr; if (*bexpr != NUL) { + sctx_T save_sctx = current_sctx; + // Convert window pointer to number. for (cw = firstwin; cw != wp; cw = cw->w_next) ++winnr; @@ -284,6 +286,16 @@ general_beval_cb(BalloonEval *beval, int state UNUSED) ++sandbox; ++textwinlock; + if (bexpr == p_bexpr) + { + sctx_T *sp = get_option_sctx("balloonexpr"); + + if (sp != NULL) + current_sctx = *sp; + } + else + current_sctx = curbuf->b_p_script_ctx[BV_BEXPR]; + vim_free(result); result = eval_to_string(bexpr, TRUE); @@ -300,6 +312,7 @@ general_beval_cb(BalloonEval *beval, int state UNUSED) if (use_sandbox) --sandbox; --textwinlock; + current_sctx = save_sctx; set_vim_var_string(VV_BEVAL_TEXT, NULL, -1); if (result != NULL && result[0] != NUL) diff --git a/src/option.c b/src/option.c index 4cc6142b62..f6b6afad56 100644 --- a/src/option.c +++ b/src/option.c @@ -2615,6 +2615,21 @@ set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx) } /* + * Get the script context of global option "name". + * + */ + sctx_T * +get_option_sctx(char *name) +{ + int idx = findoption((char_u *)name); + + if (idx >= 0) + return &options[idx].script_ctx; + siemsg("no such option: %s", name); + return NULL; +} + +/* * Set the script_ctx for a termcap option. * "name" must be the two character code, e.g. "RV". * When "name" is NULL use "opt_idx". diff --git a/src/proto/option.pro b/src/proto/option.pro index a099624d5d..11f342c3f5 100644 --- a/src/proto/option.pro +++ b/src/proto/option.pro @@ -22,6 +22,7 @@ int was_set_insecurely(char_u *opt, int opt_flags); void redraw_titles(void); int valid_name(char_u *val, char *allowed); void set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx); +sctx_T *get_option_sctx(char *name); void set_term_option_sctx_idx(char *name, int opt_idx); void check_redraw(long_u flags); int findoption(char_u *arg); diff --git a/src/testdir/dumps/Test_balloon_eval_term_01.dump b/src/testdir/dumps/Test_balloon_eval_term_01.dump index 9ae7006cee..be98212d94 100644 --- a/src/testdir/dumps/Test_balloon_eval_term_01.dump +++ b/src/testdir/dumps/Test_balloon_eval_term_01.dump @@ -2,7 +2,7 @@ |t|w|o| |t|X|o| |t|w|o| @38 |t|h|r|e| +0#0000001#ffd7ff255@17| +0#0000000#ffffff0@27 |~+0#4040ff13&| @2| +0#0000001#ffd7ff255|l|i|n|e| |2| |c|o|l|u|m|n| |6|:| | +0#4040ff13#ffffff0@27 -|~| @2| +0#0000001#ffd7ff255|t|X|o| @13| +0#4040ff13#ffffff0@27 +|~| @2| +0#0000001#ffd7ff255|t|X|o|<| @12| +0#4040ff13#ffffff0@27 |~| @2| +0#0000001#ffd7ff255@17| +0#4040ff13#ffffff0@27 |~| @48 |~| @48 diff --git a/src/testdir/dumps/Test_balloon_eval_term_01a.dump b/src/testdir/dumps/Test_balloon_eval_term_01a.dump index 9ae7006cee..be98212d94 100644 --- a/src/testdir/dumps/Test_balloon_eval_term_01a.dump +++ b/src/testdir/dumps/Test_balloon_eval_term_01a.dump @@ -2,7 +2,7 @@ |t|w|o| |t|X|o| |t|w|o| @38 |t|h|r|e| +0#0000001#ffd7ff255@17| +0#0000000#ffffff0@27 |~+0#4040ff13&| @2| +0#0000001#ffd7ff255|l|i|n|e| |2| |c|o|l|u|m|n| |6|:| | +0#4040ff13#ffffff0@27 -|~| @2| +0#0000001#ffd7ff255|t|X|o| @13| +0#4040ff13#ffffff0@27 +|~| @2| +0#0000001#ffd7ff255|t|X|o|<| @12| +0#4040ff13#ffffff0@27 |~| @2| +0#0000001#ffd7ff255@17| +0#4040ff13#ffffff0@27 |~| @48 |~| @48 diff --git a/src/testdir/dumps/Test_balloon_eval_term_02.dump b/src/testdir/dumps/Test_balloon_eval_term_02.dump index 76a91ae035..51c5e328d3 100644 --- a/src/testdir/dumps/Test_balloon_eval_term_02.dump +++ b/src/testdir/dumps/Test_balloon_eval_term_02.dump @@ -3,7 +3,7 @@ |t|h|r|e|e+0&#e0e0e08| |t|h>r+0&#ffffff0|e@1| |t|h|r|e@1| @32 |~+0#4040ff13&| @2| +0#0000001#ffd7ff255@17| +0#4040ff13#ffffff0@27 |~| @2| +0#0000001#ffd7ff255|l|i|n|e| |3| |c|o|l|u|m|n| |5|:| | +0#4040ff13#ffffff0@27 -|~| @2| +0#0000001#ffd7ff255|e| |t|h|r| @11| +0#4040ff13#ffffff0@27 +|~| @2| +0#0000001#ffd7ff255|e| |t|h|r|<| @10| +0#4040ff13#ffffff0@27 |~| @2| +0#0000001#ffd7ff255@17| +0#4040ff13#ffffff0@27 |~| @48 |~| @48 diff --git a/src/testdir/test_balloon.vim b/src/testdir/test_balloon.vim index 319e54601e..ed0c6c1936 100644 --- a/src/testdir/test_balloon.vim +++ b/src/testdir/test_balloon.vim @@ -10,7 +10,8 @@ CheckScreendump let s:common_script =<< trim [CODE] call setline(1, ["one one one", "two tXo two", "three three three"]) - set balloonevalterm balloonexpr=MyBalloonExpr() balloondelay=100 + set balloonevalterm balloonexpr=MyBalloonExpr()..s:trailing balloondelay=100 + let s:trailing = '<' " check that script context is set func MyBalloonExpr() return "line " .. v:beval_lnum .. " column " .. v:beval_col .. ":\n" .. v:beval_text endfun diff --git a/src/version.c b/src/version.c index 86eb140126..88d32ffa8b 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4180, +/**/ 4179, /**/ 4178, |