summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1418
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1418')
-rw-r--r--data/vim/patches/8.1.1418323
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 ///