summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1455
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1455')
-rw-r--r--data/vim/patches/8.1.1455341
1 files changed, 341 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1455 b/data/vim/patches/8.1.1455
new file mode 100644
index 000000000..06db6a060
--- /dev/null
+++ b/data/vim/patches/8.1.1455
@@ -0,0 +1,341 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1455
+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.1455
+Problem: Popup_atcursor() not completely implemented.
+Solution: Add the default for the "moved" property.
+Files: src/popupwin.c, src/normal.c, src/vim.h,
+ src/testdir/test_popupwin.vim
+
+
+*** ../vim-8.1.1454/src/popupwin.c 2019-06-02 18:40:02.637508840 +0200
+--- src/popupwin.c 2019-06-02 19:49:53.304066084 +0200
+***************
+*** 138,149 ****
+ }
+
+ /*
+ * 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;
+--- 138,176 ----
+ }
+
+ /*
++ * Used when popup options contain "moved": set default moved values.
++ */
++ static void
++ set_moved_values(win_T *wp)
++ {
++ wp->w_popup_curwin = curwin;
++ wp->w_popup_lnum = curwin->w_cursor.lnum;
++ wp->w_popup_mincol = curwin->w_cursor.col;
++ wp->w_popup_maxcol = curwin->w_cursor.col;
++ }
++
++ /*
++ * Used when popup options contain "moved" with "word" or "WORD".
++ */
++ static void
++ set_moved_columns(win_T *wp, int flags)
++ {
++ char_u *ptr;
++ int len = find_ident_under_cursor(&ptr, flags | FIND_NOERROR);
++
++ if (len > 0)
++ {
++ wp->w_popup_mincol = (int)(ptr - ml_get_curline());
++ wp->w_popup_maxcol = wp->w_popup_mincol + len - 1;
++ }
++ }
++
++ /*
+ * 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;
+***************
+*** 155,173 ****
+ wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth");
+ wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight");
+
+- if (atcursor)
+- {
+- wp->w_popup_pos = POPPOS_BOTLEFT;
+- setcursor_mayforce(TRUE);
+- wp->w_wantline = screen_screenrow();
+- if (wp->w_wantline == 0) // cursor in first line
+- {
+- wp->w_wantline = 2;
+- wp->w_popup_pos = POPPOS_TOPLEFT;
+- }
+- wp->w_wantcol = screen_screencol() + 1;
+- }
+-
+ get_pos_options(wp, dict);
+
+ wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
+--- 182,187 ----
+***************
+*** 289,298 ****
+ di = dict_find(dict, (char_u *)"moved", -1);
+ if (di != NULL)
+ {
+! wp->w_popup_curwin = curwin;
+! wp->w_popup_lnum = curwin->w_cursor.lnum;
+! wp->w_popup_mincol = curwin->w_cursor.col;
+! wp->w_popup_maxcol = curwin->w_cursor.col;
+ if (di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL)
+ {
+ char_u *s = di->di_tv.vval.v_string;
+--- 303,309 ----
+ di = dict_find(dict, (char_u *)"moved", -1);
+ if (di != NULL)
+ {
+! set_moved_values(wp);
+ if (di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL)
+ {
+ char_u *s = di->di_tv.vval.v_string;
+***************
+*** 305,320 ****
+ else if (STRCMP(s, "any") != 0)
+ semsg(_(e_invarg2), s);
+ if (flags != 0)
+! {
+! char_u *ptr;
+! int len = find_ident_under_cursor(&ptr, flags);
+!
+! if (len > 0)
+! {
+! wp->w_popup_mincol = (int)(ptr - ml_get_curline());
+! wp->w_popup_maxcol = wp->w_popup_mincol + len - 1;
+! }
+! }
+ }
+ else if (di->di_tv.v_type == VAR_LIST
+ && di->di_tv.vval.v_list != NULL
+--- 316,322 ----
+ else if (STRCMP(s, "any") != 0)
+ semsg(_(e_invarg2), s);
+ if (flags != 0)
+! set_moved_columns(wp, flags);
+ }
+ else if (di->di_tv.v_type == VAR_LIST
+ && di->di_tv.vval.v_list != NULL
+***************
+*** 554,566 ****
+ wp->w_popup_last_changedtick = CHANGEDTICK(wp->w_buffer);
+ }
+
+ /*
+ * 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;
+--- 556,574 ----
+ wp->w_popup_last_changedtick = CHANGEDTICK(wp->w_buffer);
+ }
+
++ typedef enum
++ {
++ TYPE_NORMAL,
++ TYPE_ATCURSOR
++ } create_type_T;
++
+ /*
+ * 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, create_type_T type)
+ {
+ win_T *wp;
+ buf_T *buf;
+***************
+*** 652,659 ****
+ ml_delete(buf->b_ml.ml_line_count, FALSE);
+ 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)
+--- 660,682 ----
+ ml_delete(buf->b_ml.ml_line_count, FALSE);
+ curbuf = curwin->w_buffer;
+
++ if (type == TYPE_ATCURSOR)
++ {
++ wp->w_popup_pos = POPPOS_BOTLEFT;
++ setcursor_mayforce(TRUE);
++ wp->w_wantline = screen_screenrow();
++ if (wp->w_wantline == 0) // cursor in first line
++ {
++ wp->w_wantline = 2;
++ wp->w_popup_pos = POPPOS_TOPLEFT;
++ }
++ wp->w_wantcol = screen_screencol() + 1;
++ set_moved_values(wp);
++ set_moved_columns(wp, FIND_STRING);
++ }
++
+ // Deal with options.
+! apply_options(wp, buf, argvars[1].vval.v_dict);
+
+ // set default values
+ if (wp->w_zindex == 0)
+***************
+*** 672,678 ****
+ void
+ f_popup_create(typval_T *argvars, typval_T *rettv)
+ {
+! popup_create(argvars, rettv, FALSE);
+ }
+
+ /*
+--- 695,701 ----
+ void
+ f_popup_create(typval_T *argvars, typval_T *rettv)
+ {
+! popup_create(argvars, rettv, TYPE_NORMAL);
+ }
+
+ /*
+***************
+*** 681,687 ****
+ void
+ f_popup_atcursor(typval_T *argvars, typval_T *rettv)
+ {
+! popup_create(argvars, rettv, TRUE);
+ }
+
+ /*
+--- 704,710 ----
+ void
+ f_popup_atcursor(typval_T *argvars, typval_T *rettv)
+ {
+! popup_create(argvars, rettv, TYPE_ATCURSOR);
+ }
+
+ /*
+*** ../vim-8.1.1454/src/normal.c 2019-05-28 23:08:12.068648696 +0200
+--- src/normal.c 2019-06-02 19:42:59.866656946 +0200
+***************
+*** 3461,3473 ****
+ if (ptr[col] == NUL || (i == 0
+ && (has_mbyte ? this_class != 2 : !vim_iswordc(ptr[col]))))
+ {
+! /*
+! * didn't find an identifier or string
+! */
+! if (find_type & FIND_STRING)
+! emsg(_("E348: No string under cursor"));
+! else
+! emsg(_(e_noident));
+ return 0;
+ }
+ ptr += col;
+--- 3461,3474 ----
+ if (ptr[col] == NUL || (i == 0
+ && (has_mbyte ? this_class != 2 : !vim_iswordc(ptr[col]))))
+ {
+! // didn't find an identifier or string
+! if ((find_type & FIND_NOERROR) == 0)
+! {
+! if (find_type & FIND_STRING)
+! emsg(_("E348: No string under cursor"));
+! else
+! emsg(_(e_noident));
+! }
+ return 0;
+ }
+ ptr += col;
+*** ../vim-8.1.1454/src/vim.h 2019-06-01 17:13:15.884517713 +0200
+--- src/vim.h 2019-06-02 19:43:48.170353186 +0200
+***************
+*** 879,888 ****
+ #define SEARCH_PEEK 0x800 /* peek for typed char, cancel search */
+ #define SEARCH_COL 0x1000 /* start at specified column instead of zero */
+
+! /* Values for find_ident_under_cursor() */
+! #define FIND_IDENT 1 /* find identifier (word) */
+! #define FIND_STRING 2 /* find any string (WORD) */
+! #define FIND_EVAL 4 /* include "->", "[]" and "." */
+
+ /* Values for file_name_in_line() */
+ #define FNAME_MESS 1 /* give error message */
+--- 879,889 ----
+ #define SEARCH_PEEK 0x800 /* peek for typed char, cancel search */
+ #define SEARCH_COL 0x1000 /* start at specified column instead of zero */
+
+! // Values for find_ident_under_cursor()
+! #define FIND_IDENT 1 // find identifier (word)
+! #define FIND_STRING 2 // find any string (WORD)
+! #define FIND_EVAL 4 // include "->", "[]" and "."
+! #define FIND_NOERROR 8 // no error when no word found
+
+ /* Values for file_name_in_line() */
+ #define FNAME_MESS 1 /* give error message */
+*** ../vim-8.1.1454/src/testdir/test_popupwin.vim 2019-06-02 18:40:02.641508815 +0200
+--- src/testdir/test_popupwin.vim 2019-06-02 19:51:53.963344600 +0200
+***************
+*** 1009,1016 ****
+ call assert_equal({}, popup_getpos(winid))
+ popupclear
+
+ exe "normal gg0/WORD\<CR>"
+! let winid = popup_atcursor('text', {'moved': 'WORD'})
+ redraw
+ call assert_equal(1, popup_getpos(winid).visible)
+ call feedkeys("eli\<Esc>", 'xt')
+--- 1009,1017 ----
+ call assert_equal({}, popup_getpos(winid))
+ popupclear
+
++ " WORD is the default
+ exe "normal gg0/WORD\<CR>"
+! let winid = popup_atcursor('text', {})
+ redraw
+ call assert_equal(1, popup_getpos(winid).visible)
+ call feedkeys("eli\<Esc>", 'xt')
+*** ../vim-8.1.1454/src/version.c 2019-06-02 19:02:24.478427721 +0200
+--- src/version.c 2019-06-02 19:28:23.096298172 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1455,
+ /**/
+
+--
+From "know your smileys":
+ :~) A man with a tape recorder up his nose
+
+ /// 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 ///