summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1407
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1407')
-rw-r--r--data/vim/patches/8.1.1407516
1 files changed, 516 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1407 b/data/vim/patches/8.1.1407
new file mode 100644
index 000000000..41a106eba
--- /dev/null
+++ b/data/vim/patches/8.1.1407
@@ -0,0 +1,516 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1407
+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.1407
+Problem: Popup_create() does not support text properties.
+Solution: Support the third form of the text argument.
+Files: src/textprop.c, src/proto/textprop.pro, src/popupwin.c,
+ src/testdir/test_popupwin.vim, src/screen.c,
+ src/testdir/dumps/Test_popupwin_02.dump,
+ src/testdir/dumps/Test_popupwin_03.dump,
+ src/testdir/dumps/Test_popupwin_04.dump,
+ runtime/doc/popup.txt
+
+
+*** ../vim-8.1.1406/src/textprop.c 2019-05-25 20:21:24.685950973 +0200
+--- src/textprop.c 2019-05-26 23:30:46.064098867 +0200
+***************
+*** 142,164 ****
+ void
+ f_prop_add(typval_T *argvars, typval_T *rettv UNUSED)
+ {
+- linenr_T lnum;
+ linenr_T start_lnum;
+- linenr_T end_lnum;
+ colnr_T start_col;
+- colnr_T end_col;
+- dict_T *dict;
+- char_u *type_name;
+- proptype_T *type;
+- buf_T *buf = curbuf;
+- int id = 0;
+- char_u *newtext;
+- int proplen;
+- size_t textlen;
+- char_u *props = NULL;
+- char_u *newprops;
+- textprop_T tmp_prop;
+- int i;
+
+ start_lnum = tv_get_number(&argvars[0]);
+ start_col = tv_get_number(&argvars[1]);
+--- 142,149 ----
+***************
+*** 172,178 ****
+ emsg(_(e_dictreq));
+ return;
+ }
+! dict = argvars[2].vval.v_dict;
+
+ if (dict == NULL || dict_find(dict, (char_u *)"type", -1) == NULL)
+ {
+--- 157,194 ----
+ emsg(_(e_dictreq));
+ return;
+ }
+!
+! prop_add_common(start_lnum, start_col, argvars[2].vval.v_dict,
+! curbuf, &argvars[2]);
+! }
+!
+! /*
+! * Shared between prop_add() and popup_create().
+! * "dict_arg" is the function argument of a dict containing "bufnr".
+! * it is NULL for popup_create().
+! */
+! void
+! prop_add_common(
+! linenr_T start_lnum,
+! colnr_T start_col,
+! dict_T *dict,
+! buf_T *default_buf,
+! typval_T *dict_arg)
+! {
+! linenr_T lnum;
+! linenr_T end_lnum;
+! colnr_T end_col;
+! char_u *type_name;
+! proptype_T *type;
+! buf_T *buf = default_buf;
+! int id = 0;
+! char_u *newtext;
+! int proplen;
+! size_t textlen;
+! char_u *props = NULL;
+! char_u *newprops;
+! textprop_T tmp_prop;
+! int i;
+
+ if (dict == NULL || dict_find(dict, (char_u *)"type", -1) == NULL)
+ {
+***************
+*** 221,227 ****
+ if (dict_find(dict, (char_u *)"id", -1) != NULL)
+ id = dict_get_number(dict, (char_u *)"id");
+
+! if (get_bufnr_from_arg(&argvars[2], &buf) == FAIL)
+ return;
+
+ type = lookup_prop_type(type_name, buf);
+--- 237,243 ----
+ if (dict_find(dict, (char_u *)"id", -1) != NULL)
+ id = dict_get_number(dict, (char_u *)"id");
+
+! if (dict_arg != NULL && get_bufnr_from_arg(dict_arg, &buf) == FAIL)
+ return;
+
+ type = lookup_prop_type(type_name, buf);
+***************
+*** 278,289 ****
+ mch_memmove(newtext, buf->b_ml.ml_line_ptr, textlen);
+
+ // Find the index where to insert the new property.
+! // Since the text properties are not aligned properly when stored with the
+! // text, we need to copy them as bytes before using it as a struct.
+ for (i = 0; i < proplen; ++i)
+ {
+ mch_memmove(&tmp_prop, props + i * sizeof(textprop_T),
+! sizeof(textprop_T));
+ if (tmp_prop.tp_col >= col)
+ break;
+ }
+--- 294,305 ----
+ mch_memmove(newtext, buf->b_ml.ml_line_ptr, textlen);
+
+ // Find the index where to insert the new property.
+! // Since the text properties are not aligned properly when stored with
+! // the text, we need to copy them as bytes before using it as a struct.
+ for (i = 0; i < proplen; ++i)
+ {
+ mch_memmove(&tmp_prop, props + i * sizeof(textprop_T),
+! sizeof(textprop_T));
+ if (tmp_prop.tp_col >= col)
+ break;
+ }
+***************
+*** 298,304 ****
+ tmp_prop.tp_flags = (lnum > start_lnum ? TP_FLAG_CONT_PREV : 0)
+ | (lnum < end_lnum ? TP_FLAG_CONT_NEXT : 0);
+ mch_memmove(newprops + i * sizeof(textprop_T), &tmp_prop,
+! sizeof(textprop_T));
+
+ if (i < proplen)
+ mch_memmove(newprops + (i + 1) * sizeof(textprop_T),
+--- 314,320 ----
+ tmp_prop.tp_flags = (lnum > start_lnum ? TP_FLAG_CONT_PREV : 0)
+ | (lnum < end_lnum ? TP_FLAG_CONT_NEXT : 0);
+ mch_memmove(newprops + i * sizeof(textprop_T), &tmp_prop,
+! sizeof(textprop_T));
+
+ if (i < proplen)
+ mch_memmove(newprops + (i + 1) * sizeof(textprop_T),
+*** ../vim-8.1.1406/src/proto/textprop.pro 2019-05-19 22:53:36.504914607 +0200
+--- src/proto/textprop.pro 2019-05-26 23:30:50.644073843 +0200
+***************
+*** 1,5 ****
+--- 1,6 ----
+ /* textprop.c */
+ void f_prop_add(typval_T *argvars, typval_T *rettv);
++ void prop_add_common(linenr_T start_lnum, colnr_T start_col, dict_T *dict, buf_T *default_buf, typval_T *dict_arg);
+ int get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change);
+ proptype_T *text_prop_type_by_id(buf_T *buf, int id);
+ void f_prop_clear(typval_T *argvars, typval_T *rettv);
+*** ../vim-8.1.1406/src/popupwin.c 2019-05-26 22:17:31.736315033 +0200
+--- src/popupwin.c 2019-05-26 23:06:35.631863187 +0200
+***************
+*** 60,65 ****
+--- 60,150 ----
+ }
+
+ /*
++ * Add lines to the popup from a list of strings.
++ */
++ static void
++ add_popup_strings(buf_T *buf, list_T *l)
++ {
++ listitem_T *li;
++ linenr_T lnum = 0;
++ char_u *p;
++
++ for (li = l->lv_first; li != NULL; li = li->li_next)
++ if (li->li_tv.v_type == VAR_STRING)
++ {
++ p = li->li_tv.vval.v_string;
++ ml_append_buf(buf, lnum++,
++ p == NULL ? (char_u *)"" : p, (colnr_T)0, TRUE);
++ }
++ }
++
++ /*
++ * Add lines to the popup from a list of dictionaries.
++ */
++ static void
++ add_popup_dicts(buf_T *buf, list_T *l)
++ {
++ listitem_T *li;
++ listitem_T *pli;
++ linenr_T lnum = 0;
++ char_u *p;
++ dict_T *dict;
++
++ // first add the text lines
++ for (li = l->lv_first; li != NULL; li = li->li_next)
++ {
++ if (li->li_tv.v_type != VAR_DICT)
++ {
++ emsg(_(e_dictreq));
++ return;
++ }
++ dict = li->li_tv.vval.v_dict;
++ p = dict == NULL ? NULL
++ : dict_get_string(dict, (char_u *)"text", FALSE);
++ ml_append_buf(buf, lnum++,
++ p == NULL ? (char_u *)"" : p, (colnr_T)0, TRUE);
++ }
++
++ // add the text properties
++ lnum = 1;
++ for (li = l->lv_first; li != NULL; li = li->li_next, ++lnum)
++ {
++ dictitem_T *di;
++ list_T *plist;
++
++ dict = li->li_tv.vval.v_dict;
++ di = dict_find(dict, (char_u *)"props", -1);
++ if (di != NULL)
++ {
++ if (di->di_tv.v_type != VAR_LIST)
++ {
++ emsg(_(e_listreq));
++ return;
++ }
++ plist = di->di_tv.vval.v_list;
++ if (plist != NULL)
++ {
++ for (pli = plist->lv_first; pli != NULL; pli = pli->li_next)
++ {
++ if (pli->li_tv.v_type != VAR_DICT)
++ {
++ emsg(_(e_dictreq));
++ return;
++ }
++ dict = pli->li_tv.vval.v_dict;
++ if (dict != NULL)
++ {
++ int col = dict_get_number(dict, (char_u *)"col");
++
++ prop_add_common( lnum, col, dict, buf, NULL);
++ }
++ }
++ }
++ }
++ }
++ }
++
++ /*
+ * popup_create({text}, {options})
+ */
+ void
+***************
+*** 128,154 ****
+
+ // Add text to the buffer.
+ if (argvars[0].v_type == VAR_STRING)
+ // just a string
+ ml_append_buf(buf, 0, argvars[0].vval.v_string, (colnr_T)0, TRUE);
+- else if (argvars[0].vval.v_list->lv_first->li_tv.v_type == VAR_STRING)
+- {
+- listitem_T *li;
+- linenr_T lnum = 0;
+- char_u *p;
+-
+- // list of strings
+- for (li = argvars[0].vval.v_list->lv_first; li != NULL;
+- li = li->li_next)
+- if (li->li_tv.v_type == VAR_STRING)
+- {
+- p = li->li_tv.vval.v_string;
+- ml_append_buf(buf, lnum++,
+- p == NULL ? (char_u *)"" : p, (colnr_T)0, TRUE);
+- }
+ }
+ else
+! // TODO: handle a list of dictionaries
+! emsg("Not implemented yet");
+
+ // Delete the line of the empty buffer.
+ curbuf = buf;
+--- 213,233 ----
+
+ // Add text to the buffer.
+ if (argvars[0].v_type == VAR_STRING)
++ {
+ // just a string
+ ml_append_buf(buf, 0, argvars[0].vval.v_string, (colnr_T)0, TRUE);
+ }
+ else
+! {
+! list_T *l = argvars[0].vval.v_list;
+!
+! if (l->lv_first->li_tv.v_type == VAR_STRING)
+! // list of strings
+! add_popup_strings(buf, l);
+! else
+! // list of dictionaries
+! add_popup_dicts(buf, l);
+! }
+
+ // Delete the line of the empty buffer.
+ curbuf = buf;
+*** ../vim-8.1.1406/src/testdir/test_popupwin.vim 2019-05-26 22:17:31.740314999 +0200
+--- src/testdir/test_popupwin.vim 2019-05-26 23:17:26.152504812 +0200
+***************
+*** 14,19 ****
+--- 14,21 ----
+ \ "call setline(1, range(1, 100))",
+ \ "hi PopupColor1 ctermbg=lightblue",
+ \ "hi PopupColor2 ctermbg=lightcyan",
++ \ "hi Comment ctermfg=red",
++ \ "call prop_type_add('comment', {'highlight': 'Comment'})",
+ \ "let winid = popup_create('hello there', {'line': 3, 'col': 11, 'highlight': 'PopupColor1'})",
+ \ "let winid2 = popup_create(['another one', 'another two', 'another three'], {'line': 3, 'col': 25})",
+ \ "call setwinvar(winid2, '&wincolor', 'PopupColor2')",
+***************
+*** 23,29 ****
+
+ " Add a tabpage
+ call term_sendkeys(buf, ":tabnew\<CR>")
+! call term_sendkeys(buf, ":call popup_create('other tab', {'line': 4, 'col': 9})\<CR>")
+ call VerifyScreenDump(buf, 'Test_popupwin_02', {})
+
+ " switch back to first tabpage
+--- 25,36 ----
+
+ " Add a tabpage
+ call term_sendkeys(buf, ":tabnew\<CR>")
+! call term_sendkeys(buf, ":call popup_create(["
+! \ .. "{'text': 'other tab'},"
+! \ .. "{'text': 'a comment line', 'props': [{"
+! \ .. "'col': 3, 'length': 7, 'type': 'comment'"
+! \ .. "}]},"
+! \ .. "], {'line': 4, 'col': 9})\<CR>")
+ call VerifyScreenDump(buf, 'Test_popupwin_02', {})
+
+ " switch back to first tabpage
+*** ../vim-8.1.1406/src/screen.c 2019-05-26 22:17:31.740314999 +0200
+--- src/screen.c 2019-05-26 23:20:55.635380744 +0200
+***************
+*** 4405,4411 ****
+ char_attr = hl_combine_attr(line_attr, search_attr);
+ # ifdef FEAT_TEXT_PROP
+ else if (text_prop_type != NULL)
+! char_attr = hl_combine_attr(line_attr, text_prop_attr);
+ # endif
+ else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL)
+ || vcol < fromcol || vcol_prev < fromcol_prev
+--- 4405,4414 ----
+ char_attr = hl_combine_attr(line_attr, search_attr);
+ # ifdef FEAT_TEXT_PROP
+ else if (text_prop_type != NULL)
+! {
+! char_attr = hl_combine_attr(
+! line_attr != 0 ? line_attr : win_attr, text_prop_attr);
+! }
+ # endif
+ else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL)
+ || vcol < fromcol || vcol_prev < fromcol_prev
+***************
+*** 4429,4435 ****
+ char_attr = hl_combine_attr(
+ syntax_attr, text_prop_attr);
+ else
+! char_attr = text_prop_attr;
+ }
+ else
+ #endif
+--- 4432,4439 ----
+ char_attr = hl_combine_attr(
+ syntax_attr, text_prop_attr);
+ else
+! char_attr = hl_combine_attr(
+! win_attr, text_prop_attr);
+ }
+ else
+ #endif
+*** ../vim-8.1.1406/src/testdir/dumps/Test_popupwin_02.dump 2019-05-26 14:10:59.909979018 +0200
+--- src/testdir/dumps/Test_popupwin_02.dump 2019-05-26 23:21:17.503256302 +0200
+***************
+*** 2,10 ****
+ > +0#0000000#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @10| +0#4040ff13#ffffff0@46
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+! |~| @73
+! |:+0#0000000&|c|a|l@1| |p|o|p|u|p|_|c|r|e|a|t|e|(|'|o|t|h|e|r| |t|a|b|'|,| |{|'|l|i|n|e|'|:| |4|,| |'|c|o|l|'|:| |9|}|)| @2|0|,|0|-|1| @8|A|l@1|
+--- 2,10 ----
+ > +0#0000000#ffffff0@74
+ |~+0#4040ff13&| @73
+ |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @10| +0#4040ff13#ffffff0@46
++ |~| @6|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| @5| +0#4040ff13#ffffff0@46
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+! | +0#0000000&@56|0|,|0|-|1| @8|A|l@1|
+*** ../vim-8.1.1406/src/testdir/dumps/Test_popupwin_03.dump 2019-05-26 21:03:19.940073927 +0200
+--- src/testdir/dumps/Test_popupwin_03.dump 2019-05-26 23:21:59.287019422 +0200
+***************
+*** 7,10 ****
+ |6| @73
+ |7| @73
+ |8| @73
+! |:|c|a|l@1| |p|o|p|u|p|_|c|r|e|a|t|e|(|'|o|t|h|e|r| |t|a|b|'|,| |{|'|l|i|n|e|'|:| |4|,| |'|c|o| @9|1|,|1| @10|T|o|p|
+--- 7,10 ----
+ |6| @73
+ |7| @73
+ |8| @73
+! @57|1|,|1| @10|T|o|p|
+*** ../vim-8.1.1406/src/testdir/dumps/Test_popupwin_04.dump 2019-05-26 14:10:59.909979018 +0200
+--- src/testdir/dumps/Test_popupwin_04.dump 2019-05-26 23:23:09.142625542 +0200
+***************
+*** 2,8 ****
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @10| +0#4040ff13#ffffff0@46
+! |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+--- 2,8 ----
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @10| +0#4040ff13#ffffff0@46
+! |~| @6|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| @5| +0#4040ff13#ffffff0@46
+ |~| @73
+ |~| @73
+ |~| @73
+*** ../vim-8.1.1406/runtime/doc/popup.txt 2019-05-26 22:17:31.740314999 +0200
+--- runtime/doc/popup.txt 2019-05-26 23:14:09.857529430 +0200
+***************
+*** 279,285 ****
+ - a string
+ - a list of strings
+ - a list of dictionaries, where each dictionary has these entries:
+- {not implemented yet}
+ text String with the text to display.
+ props A list of text properties. Optional.
+ Each entry is a dictionary, like the third argument of
+--- 279,284 ----
+***************
+*** 369,380 ****
+
+ POPUP TEXT PROPERTIES *popup-props*
+
+! {not implemented yet}
+! These are similar to the third argument of |prop_add()|, but not exactly the
+! same, since they only apply to one line.
+ col starting column, counted in bytes, use one for the
+ first column.
+ length length of text in bytes; can be zero
+ end_col column just after the text; not used when "length" is
+ present; when {col} and "end_col" are equal, this is a
+ zero-width text property
+--- 368,383 ----
+
+ POPUP TEXT PROPERTIES *popup-props*
+
+! These are similar to the third argument of |prop_add()| except:
+! - "lnum" is always the current line in the list
+! - "bufnr" is always the buffer of the popup
+! - "col" is in the Dict instead of a separate argument
+! - "transparent" is extra
+! So we get:
+ col starting column, counted in bytes, use one for the
+ first column.
+ length length of text in bytes; can be zero
++ end_lnum line number for the end of the text
+ end_col column just after the text; not used when "length" is
+ present; when {col} and "end_col" are equal, this is a
+ zero-width text property
+***************
+*** 385,390 ****
+--- 388,394 ----
+ transparent do not show these characters, show the text under it;
+ if there is an border character to the right or below
+ it will be made transparent as well
++ {not implemented yet}
+
+
+ POPUP FILTER *popup-filter*
+*** ../vim-8.1.1406/src/version.c 2019-05-26 22:17:31.740314999 +0200
+--- src/version.c 2019-05-26 22:35:57.872688332 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1407,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+37. You start looking for hot HTML addresses in public restrooms.
+
+ /// 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 ///