diff options
Diffstat (limited to 'data/vim/patches/8.1.1418')
-rw-r--r-- | data/vim/patches/8.1.1418 | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1418 b/data/vim/patches/8.1.1418 new file mode 100644 index 000000000..7e1b588e7 --- /dev/null +++ b/data/vim/patches/8.1.1418 @@ -0,0 +1,323 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1418 +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.1418 +Problem: Win_execute() is not implemented yet. +Solution: Implement it. +Files: src/evalfunc.c, src/popupwin.c, src/testdir/test_execute_func.vim, + runtime/doc/popup.txt, runtime/doc/eval.txt + + +*** ../vim-8.1.1417/src/evalfunc.c 2019-05-29 20:26:32.525530253 +0200 +--- src/evalfunc.c 2019-05-29 21:22:16.884099074 +0200 +*************** +*** 492,497 **** +--- 492,498 ---- + static void f_virtcol(typval_T *argvars, typval_T *rettv); + static void f_visualmode(typval_T *argvars, typval_T *rettv); + static void f_wildmenumode(typval_T *argvars, typval_T *rettv); ++ static void f_win_execute(typval_T *argvars, typval_T *rettv); + static void f_win_findbuf(typval_T *argvars, typval_T *rettv); + static void f_win_getid(typval_T *argvars, typval_T *rettv); + static void f_win_gotoid(typval_T *argvars, typval_T *rettv); +*************** +*** 1045,1050 **** +--- 1046,1052 ---- + {"virtcol", 1, 1, f_virtcol}, + {"visualmode", 0, 1, f_visualmode}, + {"wildmenumode", 0, 0, f_wildmenumode}, ++ {"win_execute", 2, 3, f_win_execute}, + {"win_findbuf", 1, 1, f_win_findbuf}, + {"win_getid", 0, 2, f_win_getid}, + {"win_gotoid", 1, 1, f_win_gotoid}, +*************** +*** 3519,3525 **** + * "execute()" function + */ + static void +! f_execute(typval_T *argvars, typval_T *rettv) + { + char_u *cmd = NULL; + list_T *list = NULL; +--- 3521,3527 ---- + * "execute()" function + */ + static void +! execute_common(typval_T *argvars, typval_T *rettv, int arg_off) + { + char_u *cmd = NULL; + list_T *list = NULL; +*************** +*** 3535,3543 **** + rettv->vval.v_string = NULL; + rettv->v_type = VAR_STRING; + +! if (argvars[0].v_type == VAR_LIST) + { +! list = argvars[0].vval.v_list; + if (list == NULL || list->lv_first == NULL) + /* empty list, no commands, empty output */ + return; +--- 3537,3545 ---- + rettv->vval.v_string = NULL; + rettv->v_type = VAR_STRING; + +! if (argvars[arg_off].v_type == VAR_LIST) + { +! list = argvars[arg_off].vval.v_list; + if (list == NULL || list->lv_first == NULL) + /* empty list, no commands, empty output */ + return; +*************** +*** 3545,3559 **** + } + else + { +! cmd = tv_get_string_chk(&argvars[0]); + if (cmd == NULL) + return; + } + +! if (argvars[1].v_type != VAR_UNKNOWN) + { + char_u buf[NUMBUFLEN]; +! char_u *s = tv_get_string_buf_chk(&argvars[1], buf); + + if (s == NULL) + return; +--- 3547,3561 ---- + } + else + { +! cmd = tv_get_string_chk(&argvars[arg_off]); + if (cmd == NULL) + return; + } + +! if (argvars[arg_off + 1].v_type != VAR_UNKNOWN) + { + char_u buf[NUMBUFLEN]; +! char_u *s = tv_get_string_buf_chk(&argvars[arg_off + 1], buf); + + if (s == NULL) + return; +*************** +*** 3621,3626 **** +--- 3623,3637 ---- + } + + /* ++ * "execute()" function ++ */ ++ static void ++ f_execute(typval_T *argvars, typval_T *rettv) ++ { ++ execute_common(argvars, rettv, 0); ++ } ++ ++ /* + * "exepath()" function + */ + static void +*************** +*** 6095,6100 **** +--- 6106,6135 ---- + } + } + } ++ ++ /* ++ * "win_execute()" function ++ */ ++ static void ++ f_win_execute(typval_T *argvars, typval_T *rettv) ++ { ++ int id = (int)tv_get_number(argvars); ++ win_T *wp = win_id2wp(id); ++ win_T *save_curwin = curwin; ++ ++ if (wp != NULL) ++ { ++ curwin = wp; ++ curbuf = curwin->w_buffer; ++ check_cursor(); ++ execute_common(argvars, rettv, 1); ++ if (win_valid(save_curwin)) ++ { ++ curwin = save_curwin; ++ curbuf = curwin->w_buffer; ++ } ++ } ++ } + + /* + * "win_findbuf()" function +*** ../vim-8.1.1417/src/popupwin.c 2019-05-29 20:26:32.525530253 +0200 +--- src/popupwin.c 2019-05-29 21:24:53.287215209 +0200 +*************** +*** 238,243 **** +--- 238,244 ---- + buf->b_p_ul = -1; // no undo + buf->b_p_swf = FALSE; // no swap file + buf->b_p_bl = FALSE; // unlisted buffer ++ buf->b_locked = TRUE; + + win_init_popup_win(wp, buf); + +*************** +*** 376,381 **** +--- 377,383 ---- + static void + popup_free(win_T *wp) + { ++ wp->w_buffer->b_locked = FALSE; + if (wp->w_winrow + wp->w_height >= cmdline_row) + clear_cmdline = TRUE; + win_free_popup(wp); +*** ../vim-8.1.1417/src/testdir/test_execute_func.vim 2018-12-08 13:57:38.553692769 +0100 +--- src/testdir/test_execute_func.vim 2019-05-29 21:41:04.481900749 +0200 +*************** +*** 78,80 **** +--- 78,104 ---- + endfor + call assert_equal('xyz ', text2) + endfunc ++ ++ func Test_win_execute() ++ let thiswin = win_getid() ++ new ++ let otherwin = win_getid() ++ call setline(1, 'the new window') ++ call win_gotoid(thiswin) ++ let line = win_execute(otherwin, 'echo getline(1)') ++ call assert_match('the new window', line) ++ ++ if has('textprop') ++ let popupwin = popup_create('the popup win', {'line': 2, 'col': 3}) ++ redraw ++ let line = win_execute(popupwin, 'echo getline(1)') ++ call assert_match('the popup win', line) ++ ++ call assert_fails('call win_execute(popupwin, "bwipe!")', 'E937:') ++ ++ call popup_close(popupwin) ++ endif ++ ++ call win_gotoid(otherwin) ++ bwipe! ++ endfunc +*** ../vim-8.1.1417/runtime/doc/popup.txt 2019-05-29 20:26:32.525530253 +0200 +--- runtime/doc/popup.txt 2019-05-29 20:49:40.058507387 +0200 +*************** +*** 70,75 **** +--- 70,76 ---- + there is not enough space, some text may be invisible. + + ++ + TODO: + + Example how to use syntax highlighting of a code snippet. +*************** +*** 242,255 **** + positioning mechanism applied. + If popup window {id} is not found an empty Dict is returned. + +- win_execute({id}, {command}) +- {not implemented yet} +- Like `execute()` but in the context of window {id}. +- The window will temporarily be made the current window, +- without triggering autocommands. +- Example: > +- call win_execute(winid, 'syntax enable') +- < + + *:popupclear* *:popupc* + :popupc[lear] Emergency solution to a misbehaving plugin: close all popup +--- 243,248 ---- +*************** +*** 274,279 **** +--- 267,276 ---- + + The window does have a cursor position, but the cursor is not displayed. + ++ To execute a command in the context of the popup window and buffer use ++ `win_execute()`. Example: > ++ call win_execute(winid, 'syntax enable') ++ + Options can be set on the window with `setwinvar()`, e.g.: > + call setwinvar(winid, '&wrap', 0) + And options can be set on the buffer with `setbufvar()`, e.g.: > +*** ../vim-8.1.1417/runtime/doc/eval.txt 2019-05-19 18:41:23.262148495 +0200 +--- runtime/doc/eval.txt 2019-05-29 20:52:47.933510908 +0200 +*************** +*** 2738,2743 **** +--- 2739,2746 ---- + virtcol({expr}) Number screen column of cursor or mark + visualmode([expr]) String last visual mode used + wildmenumode() Number whether 'wildmenu' mode is active ++ win_execute({id}, {command} [, {silent}]) ++ String execute {command} in window {id} + win_findbuf({bufnr}) List find windows containing {bufnr} + win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab} + win_gotoid({expr}) Number go to window with ID {expr} +*************** +*** 4011,4017 **** + To get a list of lines use |split()| on the result: > + split(execute('args'), "\n") + +! < When used recursively the output of the recursive call is not + included in the output of the higher level call. + + exepath({expr}) *exepath()* +--- 4014,4023 ---- + To get a list of lines use |split()| on the result: > + split(execute('args'), "\n") + +! < To execute a command in another window than the current one +! use `win_execute()`. +! +! When used recursively the output of the recursive call is not + included in the output of the higher level call. + + exepath({expr}) *exepath()* +*************** +*** 10306,10311 **** +--- 10315,10326 ---- + < + (Note, this needs the 'wildcharm' option set appropriately). + ++ win_execute({id}, {command} [, {silent}]) *win_execute()* ++ Like `execute()` but in the context of window {id}. ++ The window will temporarily be made the current window, ++ without triggering autocommands. ++ Example: > ++ call win_execute(winid, 'syntax enable') + + win_findbuf({bufnr}) *win_findbuf()* + Returns a list with |window-ID|s for windows that contain +*** ../vim-8.1.1417/src/version.c 2019-05-29 20:36:51.502509469 +0200 +--- src/version.c 2019-05-29 20:49:08.242676060 +0200 +*************** +*** 769,770 **** +--- 769,772 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1418, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +44. Your friends no longer send you e-mail...they just log on to your IRC + channel. + + /// 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 /// |