summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1428
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1428')
-rw-r--r--data/vim/patches/8.1.1428442
1 files changed, 442 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1428 b/data/vim/patches/8.1.1428
new file mode 100644
index 000000000..9de3b1d8b
--- /dev/null
+++ b/data/vim/patches/8.1.1428
@@ -0,0 +1,442 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1428
+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.1428
+Problem: Popup_atcursor() not implemented yet.
+Solution: Implement it. (Yasuhiro Matsumoto, closes #4456)
+Files: runtime/doc/popup.txt, src/evalfunc.c, src/popupwin.c,
+ src/proto/popupwin.pro, src/testdir/test_popupwin.vim
+
+
+*** ../vim-8.1.1427/runtime/doc/popup.txt 2019-05-30 14:29:42.597507636 +0200
+--- runtime/doc/popup.txt 2019-05-30 19:22:30.828010454 +0200
+***************
+*** 85,95 ****
+
+ IMPLEMENTATION:
+ - Code is in popupwin.c
+! - when creating the window set options to Vim default? (verify with 'number')
+ - Implement filter.
+ Check that popup_close() works in the filter.
+- - Implement the "pos" option.
+ - Handle screen resize in screenalloc().
+ - Make redrawing more efficient and avoid flicker.
+ Store popup info in a mask, use the mask in screen_line()
+ Fix redrawing problem with completion.
+--- 85,95 ----
+
+ IMPLEMENTATION:
+ - Code is in popupwin.c
+! - Implement the "pos" option.
+ - Implement filter.
+ Check that popup_close() works in the filter.
+ - Handle screen resize in screenalloc().
++ - show [Popup] instead of [Scratch] in ":ls!"
+ - Make redrawing more efficient and avoid flicker.
+ Store popup info in a mask, use the mask in screen_line()
+ Fix redrawing problem with completion.
+***************
+*** 97,103 ****
+ Fix redrawing the statusline on top of a popup
+ - Figure out the size and position better.
+ if wrapping splits a double-wide character
+! if wrapping has an indent
+ - Can the buffer be re-used, to avoid using up lots of buffer numbers?
+ - Implement all the unimplemented options and features.
+
+--- 97,103 ----
+ Fix redrawing the statusline on top of a popup
+ - Figure out the size and position better.
+ if wrapping splits a double-wide character
+! if wrapping inserts indent
+ - Can the buffer be re-used, to avoid using up lots of buffer numbers?
+ - Implement all the unimplemented options and features.
+
+***************
+*** 160,169 ****
+
+
+ popup_atcursor({text}, {options}) *popup_atcursor()*
+- {not implemented yet}
+ Show the {text} above the cursor, and close it when the cursor
+ moves. This works like: >
+ call popup_create({text}, {
+ \ 'line': 'cursor-1',
+ \ 'col': 'cursor',
+ \ 'moved': 'WORD',
+--- 160,169 ----
+
+
+ popup_atcursor({text}, {options}) *popup_atcursor()*
+ Show the {text} above the cursor, and close it when the cursor
+ moves. This works like: >
+ call popup_create({text}, {
++ \ 'pos': 'botleft',
+ \ 'line': 'cursor-1',
+ \ 'col': 'cursor',
+ \ 'moved': 'WORD',
+***************
+*** 270,279 ****
+ - 'bufhidden' is "hide"
+ - 'buflisted' is off
+ - 'undolevels' is -1: no undo at all
+! TODO: more
+
+! It is possible to change these options, but anything might break then, so
+! better leave them alone.
+
+ The window does have a cursor position, but the cursor is not displayed.
+
+--- 270,280 ----
+ - 'bufhidden' is "hide"
+ - 'buflisted' is off
+ - 'undolevels' is -1: no undo at all
+! - all other buffer-local and window_local options are set to their Vim default
+! value.
+
+! It is possible to change the specifically mentioned options, but anything
+! might break then, so better leave them alone.
+
+ The window does have a cursor position, but the cursor is not displayed.
+
+***************
+*** 306,317 ****
+ "cursor", "cursor+1" or "cursor-1" to use the line of
+ the cursor and add or subtract a number of lines;
+ default is "cursor-1".
+- {only number is implemented}
+ col screen column where to position the popup; can use
+ "cursor" to use the column of the cursor, "cursor+99"
+ and "cursor-99" to add or subtract a number of
+ columns; default is "cursor"
+- {only number is implemented}
+ pos "topleft", "topright", "botleft" or "botright":
+ defines what corner of the popup "line" and "col" are
+ used for. When not set "topleft" is used.
+--- 307,316 ----
+***************
+*** 342,350 ****
+ {not implemented yet}
+ highlight highlight group name to use for the text, stored in
+ the 'wincolor' option
+ border list with numbers, defining the border thickness
+! above/right/below/left of the popup; an empty list
+! uses a border of 1 all around
+ {not implemented yet}
+ borderhighlight highlight group name to use for the border
+ {not implemented yet}
+--- 341,357 ----
+ {not implemented yet}
+ highlight highlight group name to use for the text, stored in
+ the 'wincolor' option
++ padding list with numbers, defining the padding
++ above/right/below/left of the popup (similar to CSS);
++ an empty list uses a padding of 1 all around; the
++ padding goes around the text, inside any border;
++ padding uses the 'wincolor' highlight; Example: [1, 2,
++ 1, 3] has 1 line of padding above, 2 columns on the
++ right, 1 line below and 3 columns on the left
++ {not implemented yet}
+ border list with numbers, defining the border thickness
+! above/right/below/left of the popup (similar to CSS);
+! an empty list uses a border of 1 all around
+ {not implemented yet}
+ borderhighlight highlight group name to use for the border
+ {not implemented yet}
+*** ../vim-8.1.1427/src/evalfunc.c 2019-05-30 17:29:34.767666654 +0200
+--- src/evalfunc.c 2019-05-30 19:05:00.148910615 +0200
+***************
+*** 809,814 ****
+--- 809,815 ----
+ {"perleval", 1, 1, f_perleval},
+ #endif
+ #ifdef FEAT_TEXT_PROP
++ {"popup_atcursor", 2, 2, f_popup_atcursor},
+ {"popup_close", 1, 1, f_popup_close},
+ {"popup_create", 2, 2, f_popup_create},
+ {"popup_getoptions", 1, 1, f_popup_getoptions},
+*** ../vim-8.1.1427/src/popupwin.c 2019-05-30 19:03:19.653294536 +0200
+--- src/popupwin.c 2019-05-30 19:20:36.144585240 +0200
+***************
+*** 16,26 ****
+ #ifdef FEAT_TEXT_PROP
+
+ /*
+ * Go through the options in "dict" and apply them to buffer "buf" displayed in
+ * popup window "wp".
+ */
+ static void
+! apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
+ {
+ int nr;
+ char_u *str;
+--- 16,70 ----
+ #ifdef FEAT_TEXT_PROP
+
+ /*
++ * Get option value for"key", which is "line" or "col".
++ * Handles "cursor+N" and "cursor-N".
++ */
++ static int
++ popup_options_pos(dict_T *dict, char_u *key)
++ {
++ dictitem_T *di;
++ char_u *val;
++ char_u *s;
++ char_u *endp;
++ int n = 0;
++
++ di = dict_find(dict, key, -1);
++ if (di == NULL)
++ return 0;
++
++ val = tv_get_string(&di->di_tv);
++ if (STRNCMP(val, "cursor", 6) != 0)
++ return dict_get_number(dict, key);
++
++ setcursor_mayforce(TRUE);
++ s = val + 6;
++ if (*s != NUL)
++ {
++ n = strtol((char *)s, (char **)&endp, 10);
++ if (endp != NULL && *skipwhite(endp) != NUL)
++ {
++ semsg(_(e_invexpr2), val);
++ return 0;
++ }
++ }
++
++ if (STRCMP(key, "line") == 0)
++ n = screen_screenrow() + 1 + n;
++ else // "col"
++ n = screen_screencol() + 1 + n;
++
++ if (n < 1)
++ n = 1;
++ return n;
++ }
++
++ /*
+ * Go through the options in "dict" and apply them to buffer "buf" displayed in
+ * popup window "wp".
++ * When called from f_popup_atcursor() "atcursor" is TRUE.
+ */
+ static void
+! apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict, int atcursor)
+ {
+ int nr;
+ char_u *str;
+***************
+*** 30,37 ****
+ wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth");
+ wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight");
+
+! wp->w_wantline = dict_get_number(dict, (char_u *)"line");
+! wp->w_wantcol = dict_get_number(dict, (char_u *)"col");
+
+ wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
+
+--- 74,92 ----
+ wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth");
+ wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight");
+
+! if (atcursor)
+! {
+! setcursor_mayforce(TRUE);
+! wp->w_wantline = screen_screenrow();
+! wp->w_wantcol = screen_screencol() + 1;
+! }
+!
+! nr = popup_options_pos(dict, (char_u *)"line");
+! if (nr > 0)
+! wp->w_wantline = nr;
+! nr = popup_options_pos(dict, (char_u *)"col");
+! if (nr > 0)
+! wp->w_wantcol = nr;
+
+ wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
+
+***************
+*** 215,223 ****
+
+ /*
+ * popup_create({text}, {options})
+ */
+! void
+! f_popup_create(typval_T *argvars, typval_T *rettv)
+ {
+ win_T *wp;
+ buf_T *buf;
+--- 270,280 ----
+
+ /*
+ * popup_create({text}, {options})
++ * popup_atcursor({text}, {options})
++ * When called from f_popup_atcursor() "atcursor" is TRUE.
+ */
+! static void
+! popup_create(typval_T *argvars, typval_T *rettv, int atcursor)
+ {
+ win_T *wp;
+ buf_T *buf;
+***************
+*** 309,315 ****
+ curbuf = curwin->w_buffer;
+
+ // Deal with options.
+! apply_options(wp, buf, argvars[1].vval.v_dict);
+
+ // set default values
+ if (wp->w_zindex == 0)
+--- 366,372 ----
+ curbuf = curwin->w_buffer;
+
+ // Deal with options.
+! apply_options(wp, buf, argvars[1].vval.v_dict, atcursor);
+
+ // set default values
+ if (wp->w_zindex == 0)
+***************
+*** 323,328 ****
+--- 380,403 ----
+ }
+
+ /*
++ * popup_create({text}, {options})
++ */
++ void
++ f_popup_create(typval_T *argvars, typval_T *rettv)
++ {
++ popup_create(argvars, rettv, FALSE);
++ }
++
++ /*
++ * popup_atcursor({text}, {options})
++ */
++ void
++ f_popup_atcursor(typval_T *argvars, typval_T *rettv)
++ {
++ popup_create(argvars, rettv, TRUE);
++ }
++
++ /*
+ * Find the popup window with window-ID "id".
+ * If the popup window does not exist NULL is returned.
+ * If the window is not a popup window, and error message is given.
+*** ../vim-8.1.1427/src/proto/popupwin.pro 2019-05-30 14:29:42.597507636 +0200
+--- src/proto/popupwin.pro 2019-05-30 19:05:00.148910615 +0200
+***************
+*** 1,15 ****
+ /* popupwin.c */
+- void popup_adjust_position(win_T *wp);
+- void f_popup_create(typval_T *argvars, typval_T *rettv);
+ int popup_any_visible(void);
+ void f_popup_close(typval_T *argvars, typval_T *rettv);
+ void f_popup_hide(typval_T *argvars, typval_T *rettv);
+ void f_popup_show(typval_T *argvars, typval_T *rettv);
+ void popup_close(int id);
+ void popup_close_tabpage(tabpage_T *tp, int id);
+- void close_all_popups(void);
+- void ex_popupclear(exarg_T *eap);
+- void f_popup_move(typval_T *argvars, typval_T *rettv);
+- void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
+- void f_popup_getposition(typval_T *argvars, typval_T *rettv);
+ /* vim: set ft=c : */
+--- 1,16 ----
+ /* popupwin.c */
+ int popup_any_visible(void);
++ void close_all_popups(void);
++ void ex_popupclear(exarg_T *eap);
++ void f_popup_atcursor(typval_T *argvars, typval_T *rettv);
+ void f_popup_close(typval_T *argvars, typval_T *rettv);
++ void f_popup_create(typval_T *argvars, typval_T *rettv);
++ void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
++ void f_popup_getposition(typval_T *argvars, typval_T *rettv);
+ void f_popup_hide(typval_T *argvars, typval_T *rettv);
++ void f_popup_move(typval_T *argvars, typval_T *rettv);
+ void f_popup_show(typval_T *argvars, typval_T *rettv);
++ void popup_adjust_position(win_T *wp);
+ void popup_close(int id);
+ void popup_close_tabpage(tabpage_T *tp, int id);
+ /* vim: set ft=c : */
+*** ../vim-8.1.1427/src/testdir/test_popupwin.vim 2019-05-30 18:40:20.120405138 +0200
+--- src/testdir/test_popupwin.vim 2019-05-30 19:21:59.304168903 +0200
+***************
+*** 335,337 ****
+--- 335,386 ----
+ call popup_close(winid)
+ bwipe
+ endfunc
++
++ func Test_popup_atcursor()
++ topleft vnew
++ call setline(1, [
++ \ 'xxxxxxxxxxxxxxxxx',
++ \ 'xxxxxxxxxxxxxxxxx',
++ \ 'xxxxxxxxxxxxxxxxx',
++ \])
++
++ call cursor(2, 2)
++ redraw
++ let winid = popup_atcursor('vim', {})
++ redraw
++ let line = join(map(range(1, 17), 'screenstring(1, v:val)'), '')
++ call assert_equal('xvimxxxxxxxxxxxxx', line)
++ call popup_close(winid)
++
++ call cursor(3, 4)
++ redraw
++ let winid = popup_atcursor('vim', {})
++ redraw
++ let line = join(map(range(1, 17), 'screenstring(2, v:val)'), '')
++ call assert_equal('xxxvimxxxxxxxxxxx', line)
++ call popup_close(winid)
++
++ call cursor(1, 1)
++ redraw
++ let winid = popup_create('vim', {
++ \ 'line': 'cursor+2',
++ \ 'col': 'cursor+1',
++ \})
++ redraw
++ let line = join(map(range(1, 17), 'screenstring(3, v:val)'), '')
++ call assert_equal('xvimxxxxxxxxxxxxx', line)
++ call popup_close(winid)
++
++ call cursor(3, 3)
++ redraw
++ let winid = popup_create('vim', {
++ \ 'line': 'cursor-2',
++ \ 'col': 'cursor-1',
++ \})
++ redraw
++ let line = join(map(range(1, 17), 'screenstring(1, v:val)'), '')
++ call assert_equal('xvimxxxxxxxxxxxxx', line)
++ call popup_close(winid)
++
++ bwipe!
++ endfunc
+*** ../vim-8.1.1427/src/version.c 2019-05-30 19:03:19.653294536 +0200
+--- src/version.c 2019-05-30 19:23:28.679718885 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1428,
+ /**/
+
+--
+"I simultaneously try to keep my head in the clouds and my feet on the
+ground. Sometimes it's a stretch, though." -- Larry Wall
+
+ /// 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 ///