diff options
author | Bram Moolenaar <Bram@vim.org> | 2006-03-20 21:59:49 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2006-03-20 21:59:49 +0000 |
commit | b3656edcb96bd36277db157baec80cb5e7a6f534 (patch) | |
tree | 196eed24afb857886081bbdc690e385715c59cb9 /src/gui_beval.c | |
parent | 9b2200acd6bd572eea00ea89eeb3b2c0764c8942 (diff) | |
download | vim-git-b3656edcb96bd36277db157baec80cb5e7a6f534.tar.gz |
updated for version 7.0230v7.0230
Diffstat (limited to 'src/gui_beval.c')
-rw-r--r-- | src/gui_beval.c | 70 |
1 files changed, 42 insertions, 28 deletions
diff --git a/src/gui_beval.c b/src/gui_beval.c index b79884ee8..077991d5a 100644 --- a/src/gui_beval.c +++ b/src/gui_beval.c @@ -28,6 +28,8 @@ general_beval_cb(beval, state) char_u *text; static char_u *result = NULL; long winnr = 0; + char_u *bexpr; + buf_T *save_curbuf; #ifdef FEAT_WINDOWS win_T *cw; #endif @@ -39,39 +41,51 @@ general_beval_cb(beval, state) return; #ifdef FEAT_EVAL - if (*p_bexpr != NUL - && get_beval_info(balloonEval, TRUE, &wp, &lnum, &text, &col) == OK) + if (get_beval_info(balloonEval, TRUE, &wp, &lnum, &text, &col) == OK) { + bexpr = (*wp->w_buffer->b_p_bexpr == NUL) ? p_bexpr + : wp->w_buffer->b_p_bexpr; + if (*bexpr != NUL) + { # ifdef FEAT_WINDOWS - /* Convert window pointer to number. */ - for (cw = firstwin; cw != wp; cw = cw->w_next) - ++winnr; + /* Convert window pointer to number. */ + for (cw = firstwin; cw != wp; cw = cw->w_next) + ++winnr; # endif - set_vim_var_nr(VV_BEVAL_BUFNR, (long)wp->w_buffer->b_fnum); - set_vim_var_nr(VV_BEVAL_WINNR, winnr); - set_vim_var_nr(VV_BEVAL_LNUM, (long)lnum); - set_vim_var_nr(VV_BEVAL_COL, (long)(col + 1)); - set_vim_var_string(VV_BEVAL_TEXT, text, -1); - vim_free(text); - - use_sandbox = was_set_insecurely((char_u *)"balloonexpr", 0); - if (use_sandbox) - ++sandbox; - ++textlock; - - vim_free(result); - result = eval_to_string(p_bexpr, NULL, TRUE); + set_vim_var_nr(VV_BEVAL_BUFNR, (long)wp->w_buffer->b_fnum); + set_vim_var_nr(VV_BEVAL_WINNR, winnr); + set_vim_var_nr(VV_BEVAL_LNUM, (long)lnum); + set_vim_var_nr(VV_BEVAL_COL, (long)(col + 1)); + set_vim_var_string(VV_BEVAL_TEXT, text, -1); + vim_free(text); - if (use_sandbox) - --sandbox; - --textlock; - - set_vim_var_string(VV_BEVAL_TEXT, NULL, -1); - if (result != NULL && result[0] != NUL) - { - gui_mch_post_balloon(beval, result); - return; + /* + * Temporarily change the curbuf, so that we can determine whether + * the buffer-local balloonexpr option was set insecurly. + */ + save_curbuf = curbuf; + curbuf = wp->w_buffer; + use_sandbox = was_set_insecurely((char_u *)"balloonexpr", + *curbuf->b_p_bexpr == NUL ? 0 : OPT_LOCAL); + curbuf = save_curbuf; + if (use_sandbox) + ++sandbox; + ++textlock; + + vim_free(result); + result = eval_to_string(bexpr, NULL, TRUE); + + if (use_sandbox) + --sandbox; + --textlock; + + set_vim_var_string(VV_BEVAL_TEXT, NULL, -1); + if (result != NULL && result[0] != NUL) + { + gui_mch_post_balloon(beval, result); + return; + } } } #endif |