diff options
Diffstat (limited to 'data/vim/patches/8.1.1372')
-rw-r--r-- | data/vim/patches/8.1.1372 | 320 |
1 files changed, 0 insertions, 320 deletions
diff --git a/data/vim/patches/8.1.1372 b/data/vim/patches/8.1.1372 deleted file mode 100644 index ec0892e8c..000000000 --- a/data/vim/patches/8.1.1372 +++ /dev/null @@ -1,320 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.1372 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.1372 -Problem: When evaluating 'statusline' the current window is unknown. - (Daniel Hahler) -Solution: Set "g:actual_curwin" for %{} items. Set "g:statusline_winid" - when evaluationg %!. (closes #4406, closes #3299) -Files: src/buffer.c, runtime/doc/options.txt, - src/testdir/test_statusline.vim - - -*** ../vim-8.1.1371/src/buffer.c 2019-05-23 21:35:44.451922663 +0200 ---- src/buffer.c 2019-05-23 22:05:41.446687352 +0200 -*************** -*** 3893,3899 **** - char_u base; - char_u opt; - #define TMPLEN 70 -! char_u tmp[TMPLEN]; - char_u *usefmt = fmt; - struct stl_hlrec *sp; - int save_must_redraw = must_redraw; ---- 3893,3900 ---- - char_u base; - char_u opt; - #define TMPLEN 70 -! char_u buf_tmp[TMPLEN]; -! char_u win_tmp[TMPLEN]; - char_u *usefmt = fmt; - struct stl_hlrec *sp; - int save_must_redraw = must_redraw; -*************** -*** 3906,3914 **** ---- 3907,3923 ---- - */ - if (fmt[0] == '%' && fmt[1] == '!') - { -+ typval_T tv; -+ -+ tv.v_type = VAR_NUMBER; -+ tv.vval.v_number = wp->w_id; -+ set_var((char_u *)"g:statusline_winid", &tv, FALSE); -+ - usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox); - if (usefmt == NULL) - usefmt = fmt; -+ -+ do_unlet((char_u *)"g:statusline_winid", TRUE); - } - #endif - -*************** -*** 4225,4232 **** - p = t; - - #ifdef FEAT_EVAL -! vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum); -! set_internal_string_var((char_u *)"g:actual_curbuf", tmp); - - save_curbuf = curbuf; - save_curwin = curwin; ---- 4234,4244 ---- - p = t; - - #ifdef FEAT_EVAL -! vim_snprintf((char *)buf_tmp, sizeof(buf_tmp), -! "%d", curbuf->b_fnum); -! set_internal_string_var((char_u *)"g:actual_curbuf", buf_tmp); -! vim_snprintf((char *)win_tmp, sizeof(win_tmp), "%d", curwin->w_id); -! set_internal_string_var((char_u *)"g:actual_curwin", win_tmp); - - save_curbuf = curbuf; - save_curwin = curwin; -*************** -*** 4238,4243 **** ---- 4250,4256 ---- - curwin = save_curwin; - curbuf = save_curbuf; - do_unlet((char_u *)"g:actual_curbuf", TRUE); -+ do_unlet((char_u *)"g:actual_curwin", TRUE); - - if (str != NULL && *str != 0) - { -*************** -*** 4290,4310 **** - break; - - case STL_ALTPERCENT: -! str = tmp; - get_rel_pos(wp, str, TMPLEN); - break; - - case STL_ARGLISTSTAT: - fillable = FALSE; -! tmp[0] = 0; -! if (append_arg_number(wp, tmp, (int)sizeof(tmp), FALSE)) -! str = tmp; - break; - - case STL_KEYMAP: - fillable = FALSE; -! if (get_keymap_str(wp, (char_u *)"<%s>", tmp, TMPLEN)) -! str = tmp; - break; - case STL_PAGENUM: - #if defined(FEAT_PRINTER) || defined(FEAT_GUI_TABLINE) ---- 4303,4323 ---- - break; - - case STL_ALTPERCENT: -! str = buf_tmp; - get_rel_pos(wp, str, TMPLEN); - break; - - case STL_ARGLISTSTAT: - fillable = FALSE; -! buf_tmp[0] = 0; -! if (append_arg_number(wp, buf_tmp, (int)sizeof(buf_tmp), FALSE)) -! str = buf_tmp; - break; - - case STL_KEYMAP: - fillable = FALSE; -! if (get_keymap_str(wp, (char_u *)"<%s>", buf_tmp, TMPLEN)) -! str = buf_tmp; - break; - case STL_PAGENUM: - #if defined(FEAT_PRINTER) || defined(FEAT_GUI_TABLINE) -*************** -*** 4360,4368 **** - if (*wp->w_buffer->b_p_ft != NUL - && STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 3) - { -! vim_snprintf((char *)tmp, sizeof(tmp), "[%s]", - wp->w_buffer->b_p_ft); -! str = tmp; - } - break; - ---- 4373,4381 ---- - if (*wp->w_buffer->b_p_ft != NUL - && STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 3) - { -! vim_snprintf((char *)buf_tmp, sizeof(buf_tmp), "[%s]", - wp->w_buffer->b_p_ft); -! str = buf_tmp; - } - break; - -*************** -*** 4371,4381 **** - if (*wp->w_buffer->b_p_ft != NUL - && STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 2) - { -! vim_snprintf((char *)tmp, sizeof(tmp), ",%s", - wp->w_buffer->b_p_ft); -! for (t = tmp; *t != 0; t++) - *t = TOUPPER_LOC(*t); -! str = tmp; - } - break; - ---- 4384,4394 ---- - if (*wp->w_buffer->b_p_ft != NUL - && STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 2) - { -! vim_snprintf((char *)buf_tmp, sizeof(buf_tmp), ",%s", - wp->w_buffer->b_p_ft); -! for (t = buf_tmp; *t != 0; t++) - *t = TOUPPER_LOC(*t); -! str = buf_tmp; - } - break; - -*** ../vim-8.1.1371/runtime/doc/options.txt 2019-05-23 15:37:41.961634991 +0200 ---- runtime/doc/options.txt 2019-05-23 22:10:41.405260815 +0200 -*************** -*** 5082,5087 **** ---- 5082,5089 ---- - When on allow some options that are an expression to be set in the - modeline. Check the option for whether it is affected by - 'modelineexpr'. Also see |modeline|. -+ This option cannot be set from a |modeline| or in the |sandbox|, for -+ security reasons. - - *'modelines'* *'mls'* - 'modelines' 'mls' number (default 5) -*************** -*** 7089,7095 **** - When the option starts with "%!" then it is used as an expression, - evaluated and the result is used as the option value. Example: > - :set statusline=%!MyStatusLine() -! < The result can contain %{} items that will be evaluated too. - Note that the "%!" expression is evaluated in the context of the - current window and buffer, while %{} items are evaluated in the - context of the window that the statusline belongs to. ---- 7091,7099 ---- - When the option starts with "%!" then it is used as an expression, - evaluated and the result is used as the option value. Example: > - :set statusline=%!MyStatusLine() -! < The *g:statusline_winid* variable will be set to the |window-ID| of the -! window that the status line belongs to. -! The result can contain %{} items that will be evaluated too. - Note that the "%!" expression is evaluated in the context of the - current window and buffer, while %{} items are evaluated in the - context of the window that the statusline belongs to. -*************** -*** 7192,7204 **** - become empty. This will make a group like the following disappear - completely from the statusline when none of the flags are set. > - :set statusline=...%(\ [%M%R%H]%)... -! < *g:actual_curbuf* -! Beware that an expression is evaluated each and every time the status -! line is displayed. The current buffer and current window will be set -! temporarily to that of the window (and buffer) whose statusline is -! currently being drawn. The expression will evaluate in this context. -! The variable "g:actual_curbuf" is set to the `bufnr()` number of the -! real current buffer. - - The 'statusline' option will be evaluated in the |sandbox| if set from - a modeline, see |sandbox-option|. ---- 7196,7210 ---- - become empty. This will make a group like the following disappear - completely from the statusline when none of the flags are set. > - :set statusline=...%(\ [%M%R%H]%)... -! < Beware that an expression is evaluated each and every time the status -! line is displayed. -! *g:actual_curbuf* *g:actual_curwin* -! The current buffer and current window will be set temporarily to that -! of the window (and buffer) whose statusline is currently being drawn. -! The expression will evaluate in this context. The variable -! "g:actual_curbuf" is set to the `bufnr()` number of the real current -! buffer and "g:actual_curwin" to the |window-ID| of the real current -! window. These values are strings. - - The 'statusline' option will be evaluated in the |sandbox| if set from - a modeline, see |sandbox-option|. -*** ../vim-8.1.1371/src/testdir/test_statusline.vim 2019-04-14 13:23:36.911963919 +0200 ---- src/testdir/test_statusline.vim 2019-05-23 22:08:43.121833219 +0200 -*************** -*** 29,35 **** - - " Function used to display syntax group. - func SyntaxItem() -! return synIDattr(synID(line("."),col("."),1),"name") - endfunc - - func Test_caught_error_in_statusline() ---- 29,37 ---- - - " Function used to display syntax group. - func SyntaxItem() -! call assert_equal(s:expected_curbuf, g:actual_curbuf) -! call assert_equal(s:expected_curwin, g:actual_curwin) -! return synIDattr(synID(line("."), col("."),1), "name") - endfunc - - func Test_caught_error_in_statusline() -*************** -*** 218,223 **** ---- 220,227 ---- - - "%{: Evaluate expression between '%{' and '}' and substitute result. - syntax on -+ let s:expected_curbuf = string(bufnr('')) -+ let s:expected_curwin = string(win_getid()) - set statusline=%{SyntaxItem()} - call assert_match('^vimNumber\s*$', s:get_statusline()) - s/^/"/ -*************** -*** 332,337 **** ---- 336,358 ---- - set statusline=%!2*3+1 - call assert_match('7\s*$', s:get_statusline()) - -+ func GetNested() -+ call assert_equal(string(win_getid()), g:actual_curwin) -+ call assert_equal(string(bufnr('')), g:actual_curbuf) -+ return 'nested' -+ endfunc -+ func GetStatusLine() -+ call assert_equal(win_getid(), g:statusline_winid) -+ return 'the %{GetNested()} line' -+ endfunc -+ set statusline=%!GetStatusLine() -+ call assert_match('the nested line', s:get_statusline()) -+ call assert_false(exists('g:actual_curwin')) -+ call assert_false(exists('g:actual_curbuf')) -+ call assert_false(exists('g:statusline_winid')) -+ delfunc GetNested -+ delfunc GetStatusLine -+ - " Check statusline in current and non-current window - " with the 'fillchars' option. - set fillchars=stl:^,stlnc:=,vert:\|,fold:-,diff:- -*** ../vim-8.1.1371/src/version.c 2019-05-23 21:35:44.459922615 +0200 ---- src/version.c 2019-05-23 21:45:13.452621087 +0200 -*************** -*** 769,770 **** ---- 769,772 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 1372, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -27. You refer to your age as 3.x. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |