summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1341
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1341')
-rw-r--r--data/vim/patches/8.1.1341431
1 files changed, 0 insertions, 431 deletions
diff --git a/data/vim/patches/8.1.1341 b/data/vim/patches/8.1.1341
deleted file mode 100644
index 23323bcde..000000000
--- a/data/vim/patches/8.1.1341
+++ /dev/null
@@ -1,431 +0,0 @@
-To: vim_dev@googlegroups.com
-Subject: Patch 8.1.1341
-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.1341
-Problem: Text properties are lost when joining lines.
-Solution: Move the text properties to the joined line.
-Files: src/ops.c, src/textprop.c, src/proto/textprop.pro,
- src/testdir/test_textprop.vim,
- src/testdir/dumps/Test_textprop_01.dump
-
-
-*** ../vim-8.1.1340/src/ops.c 2019-04-27 22:06:33.348200718 +0200
---- src/ops.c 2019-05-17 16:42:27.190882289 +0200
-***************
-*** 1211,1217 ****
- int retval = OK;
- int remap;
-
-! if (regname == '@') /* repeat previous one */
- {
- if (execreg_lastc == NUL)
- {
---- 1211,1218 ----
- int retval = OK;
- int remap;
-
-! // repeat previous one
-! if (regname == '@')
- {
- if (execreg_lastc == NUL)
- {
-***************
-*** 1220,1226 ****
- }
- regname = execreg_lastc;
- }
-! /* check for valid regname */
- if (regname == '%' || regname == '#' || !valid_yank_reg(regname, FALSE))
- {
- emsg_invreg(regname);
---- 1221,1227 ----
- }
- regname = execreg_lastc;
- }
-! // check for valid regname
- if (regname == '%' || regname == '#' || !valid_yank_reg(regname, FALSE))
- {
- emsg_invreg(regname);
-***************
-*** 1232,1242 ****
- regname = may_get_selection(regname);
- #endif
-
-! if (regname == '_') /* black hole: don't stuff anything */
- return OK;
-
- #ifdef FEAT_CMDHIST
-! if (regname == ':') /* use last command line */
- {
- if (last_cmdline == NULL)
- {
---- 1233,1245 ----
- regname = may_get_selection(regname);
- #endif
-
-! // black hole: don't stuff anything
-! if (regname == '_')
- return OK;
-
- #ifdef FEAT_CMDHIST
-! // use last command line
-! if (regname == ':')
- {
- if (last_cmdline == NULL)
- {
-***************
-*** 4438,4444 ****
- && has_format_option(FO_REMOVE_COMS);
- int prev_was_comment;
- #endif
-!
-
- if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
- (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
---- 4441,4450 ----
- && has_format_option(FO_REMOVE_COMS);
- int prev_was_comment;
- #endif
-! #ifdef FEAT_TEXT_PROP
-! textprop_T **prop_lines = NULL;
-! int *prop_lengths = NULL;
-! #endif
-
- if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
- (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
-***************
-*** 4463,4470 ****
- #endif
-
- /*
-! * Don't move anything, just compute the final line length
- * and setup the array of space strings lengths
- */
- for (t = 0; t < count; ++t)
- {
---- 4469,4477 ----
- #endif
-
- /*
-! * Don't move anything yet, just compute the final line length
- * and setup the array of space strings lengths
-+ * This loops forward over the joined lines.
- */
- for (t = 0; t < count; ++t)
- {
-***************
-*** 4556,4563 ****
---- 4563,4586 ----
- cend = newp + sumsize;
- *cend = 0;
-
-+ #ifdef FEAT_TEXT_PROP
-+ // We need to move properties of the lines that are going to be deleted to
-+ // the new long one.
-+ if (curbuf->b_has_textprop && !text_prop_frozen)
-+ {
-+ // Allocate an array to copy the text properties of joined lines into.
-+ // And another array to store the number of properties in each line.
-+ prop_lines = (textprop_T **)alloc_clear(
-+ (int)(count - 1) * sizeof(textprop_T *));
-+ prop_lengths = (int *)alloc_clear((int)(count - 1) * sizeof(int));
-+ if (prop_lengths == NULL)
-+ VIM_CLEAR(prop_lines);
-+ }
-+ #endif
-+
- /*
- * Move affected lines to the new long one.
-+ * This loops backwards over the joined lines, including the original line.
- *
- * Move marks from each deleted line to the joined line, adjusting the
- * column. This is not Vi compatible, but Vi deletes the marks, thus that
-***************
-*** 4583,4590 ****
- (long)(cend - newp - spaces_removed), spaces_removed);
- if (t == 0)
- break;
- curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
-! #if defined(FEAT_COMMENTS) || defined(PROTO)
- if (remove_comments)
- curr += comments[t - 1];
- #endif
---- 4606,4620 ----
- (long)(cend - newp - spaces_removed), spaces_removed);
- if (t == 0)
- break;
-+ #ifdef FEAT_TEXT_PROP
-+ if (prop_lines != NULL)
-+ adjust_props_for_join(curwin->w_cursor.lnum + t,
-+ prop_lines + t - 1, prop_lengths + t - 1,
-+ (long)(cend - newp - spaces_removed), spaces_removed);
-+ #endif
-+
- curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
-! #if defined(FEAT_COMMENTS)
- if (remove_comments)
- curr += comments[t - 1];
- #endif
-***************
-*** 4592,4598 ****
- curr = skipwhite(curr);
- currsize = (int)STRLEN(curr);
- }
-! ml_replace(curwin->w_cursor.lnum, newp, FALSE);
-
- if (setmark)
- {
---- 4622,4635 ----
- curr = skipwhite(curr);
- currsize = (int)STRLEN(curr);
- }
-!
-! #ifdef FEAT_TEXT_PROP
-! if (prop_lines != NULL)
-! join_prop_lines(curwin->w_cursor.lnum, newp,
-! prop_lines, prop_lengths, count);
-! else
-! #endif
-! ml_replace(curwin->w_cursor.lnum, newp, FALSE);
-
- if (setmark)
- {
-***************
-*** 4605,4611 ****
- * the deleted line. */
- changed_lines(curwin->w_cursor.lnum, currsize,
- curwin->w_cursor.lnum + 1, 0L);
--
- /*
- * Delete following lines. To do this we move the cursor there
- * briefly, and then move it back. After del_lines() the cursor may
---- 4642,4647 ----
-*** ../vim-8.1.1340/src/textprop.c 2019-05-17 13:05:03.795770160 +0200
---- src/textprop.c 2019-05-17 19:31:14.135899352 +0200
-***************
-*** 13,20 ****
- * TODO:
- * - Adjust text property column and length when text is inserted/deleted.
- * -> a :substitute with a multi-line match
-- * -> join two lines, also with BS in Insert mode
- * -> search for changed_bytes() from misc1.c
- * - Perhaps we only need TP_FLAG_CONT_NEXT and can drop TP_FLAG_CONT_PREV?
- * - Add an arrray for global_proptypes, to quickly lookup a prop type by ID
- * - Add an arrray for b_proptypes, to quickly lookup a prop type by ID
---- 13,20 ----
- * TODO:
- * - Adjust text property column and length when text is inserted/deleted.
- * -> a :substitute with a multi-line match
- * -> search for changed_bytes() from misc1.c
-+ * -> search for mark_col_adjust()
- * - Perhaps we only need TP_FLAG_CONT_NEXT and can drop TP_FLAG_CONT_PREV?
- * - Add an arrray for global_proptypes, to quickly lookup a prop type by ID
- * - Add an arrray for b_proptypes, to quickly lookup a prop type by ID
-***************
-*** 1097,1100 ****
---- 1097,1205 ----
- ga_clear(&nextprop);
- }
-
-+ /*
-+ * Line "lnum" has been joined and will end up at column "col" in the new line.
-+ * "removed" bytes have been removed from the start of the line, properties
-+ * there are to be discarded.
-+ * Move the adjusted text properties to an allocated string, store it in
-+ * "prop_line" and adjust the columns.
-+ */
-+ void
-+ adjust_props_for_join(
-+ linenr_T lnum,
-+ textprop_T **prop_line,
-+ int *prop_length,
-+ long col,
-+ int removed)
-+ {
-+ int proplen;
-+ char_u *props;
-+ int ri;
-+ int wi = 0;
-+
-+ proplen = get_text_props(curbuf, lnum, &props, FALSE);
-+ if (proplen > 0)
-+ {
-+ *prop_line = (textprop_T *)alloc(proplen * (int)sizeof(textprop_T));
-+ if (*prop_line != NULL)
-+ {
-+ for (ri = 0; ri < proplen; ++ri)
-+ {
-+ textprop_T *cp = *prop_line + wi;
-+
-+ mch_memmove(cp, props + ri * sizeof(textprop_T),
-+ sizeof(textprop_T));
-+ if (cp->tp_col + cp->tp_len > removed)
-+ {
-+ if (cp->tp_col > removed)
-+ cp->tp_col += col;
-+ else
-+ {
-+ // property was partly deleted, make it shorter
-+ cp->tp_len -= removed - cp->tp_col;
-+ cp->tp_col = col;
-+ }
-+ ++wi;
-+ }
-+ }
-+ }
-+ *prop_length = wi;
-+ }
-+ }
-+
-+ /*
-+ * After joining lines: concatenate the text and the properties of all joined
-+ * lines into one line and replace the line.
-+ */
-+ void
-+ join_prop_lines(
-+ linenr_T lnum,
-+ char_u *newp,
-+ textprop_T **prop_lines,
-+ int *prop_lengths,
-+ int count)
-+ {
-+ size_t proplen = 0;
-+ size_t oldproplen;
-+ char_u *props;
-+ int i;
-+ int len;
-+ char_u *line;
-+ size_t l;
-+
-+ for (i = 0; i < count - 1; ++i)
-+ proplen += prop_lengths[i];
-+ if (proplen == 0)
-+ {
-+ ml_replace(lnum, newp, FALSE);
-+ return;
-+ }
-+
-+ // get existing properties of the joined line
-+ oldproplen = get_text_props(curbuf, lnum, &props, FALSE);
-+
-+ len = (int)STRLEN(newp) + 1;
-+ line = alloc(len + (oldproplen + proplen) * (int)sizeof(textprop_T));
-+ if (line == NULL)
-+ return;
-+ mch_memmove(line, newp, len);
-+ l = oldproplen * sizeof(textprop_T);
-+ mch_memmove(line + len, props, l);
-+ len += l;
-+
-+ for (i = 0; i < count - 1; ++i)
-+ if (prop_lines[i] != NULL)
-+ {
-+ l = prop_lengths[i] * sizeof(textprop_T);
-+ mch_memmove(line + len, prop_lines[i], l);
-+ len += l;
-+ vim_free(prop_lines[i]);
-+ }
-+
-+ ml_replace_len(lnum, line, len, TRUE, FALSE);
-+ vim_free(newp);
-+ vim_free(prop_lines);
-+ vim_free(prop_lengths);
-+ }
-+
- #endif // FEAT_TEXT_PROP
-*** ../vim-8.1.1340/src/proto/textprop.pro 2019-05-15 22:45:33.956067651 +0200
---- src/proto/textprop.pro 2019-05-17 16:55:50.965270535 +0200
-***************
-*** 15,18 ****
---- 15,20 ----
- void clear_buf_prop_types(buf_T *buf);
- void adjust_prop_columns(linenr_T lnum, colnr_T col, int bytes_added);
- void adjust_props_for_split(linenr_T lnum_props, linenr_T lnum_top, int kept, int deleted);
-+ void adjust_props_for_join(linenr_T lnum, textprop_T **prop_line, int *prop_length, long col, int removed);
-+ void join_prop_lines(linenr_T lnum, char_u *newp, textprop_T **prop_lines, int *prop_lengths, int count);
- /* vim: set ft=c : */
-*** ../vim-8.1.1340/src/testdir/test_textprop.vim 2019-05-17 13:05:03.795770160 +0200
---- src/testdir/test_textprop.vim 2019-05-17 19:34:08.751016230 +0200
-***************
-*** 624,629 ****
---- 624,633 ----
- \ .. "'Numbér 123 änd thœn 4¾7.',"
- \ .. "'--aa--bb--cc--dd--',"
- \ .. "'// comment with error in it',"
-+ \ .. "'first line',"
-+ \ .. "' second line ',"
-+ \ .. "'third line',"
-+ \ .. "' fourth line',"
- \ .. "])",
- \ "hi NumberProp ctermfg=blue",
- \ "hi LongProp ctermbg=yellow",
-***************
-*** 645,650 ****
---- 649,658 ----
- \ "call prop_add(3, 15, {'length': 2, 'type': 'both'})",
- \ "call prop_add(4, 12, {'length': 10, 'type': 'background'})",
- \ "call prop_add(4, 17, {'length': 5, 'type': 'error'})",
-+ \ "call prop_add(5, 7, {'length': 4, 'type': 'long'})",
-+ \ "call prop_add(6, 1, {'length': 8, 'type': 'long'})",
-+ \ "call prop_add(8, 1, {'length': 1, 'type': 'long'})",
-+ \ "call prop_add(8, 11, {'length': 4, 'type': 'long'})",
- \ "set number cursorline",
- \ "hi clear SpellBad",
- \ "set spell",
-***************
-*** 652,659 ****
- \ "hi Comment ctermfg=green",
- \ "normal 3G0llix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>",
- \ "normal 3G0lli\<BS>\<Esc>",
- \], 'XtestProp')
-! let buf = RunVimInTerminal('-S XtestProp', {'rows': 7})
- call VerifyScreenDump(buf, 'Test_textprop_01', {})
-
- " clean up
---- 660,670 ----
- \ "hi Comment ctermfg=green",
- \ "normal 3G0llix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>lllix\<Esc>",
- \ "normal 3G0lli\<BS>\<Esc>",
-+ \ "normal 6G0i\<BS>\<Esc>",
-+ \ "normal 3J",
-+ \ "normal 3G",
- \], 'XtestProp')
-! let buf = RunVimInTerminal('-S XtestProp', {'rows': 8})
- call VerifyScreenDump(buf, 'Test_textprop_01', {})
-
- " clean up
-*** ../vim-8.1.1340/src/testdir/dumps/Test_textprop_01.dump 2019-05-17 13:05:03.795770160 +0200
---- src/testdir/dumps/Test_textprop_01.dump 2019-05-17 19:34:56.874772440 +0200
-***************
-*** 2,7 ****
---- 2,8 ----
- | +0#af5f00255&@1|2| |N+0#0000000#ffff4012|u|m|b|é|r| |1+0#4040ff13&|2|3| +0#0000000&|ä|n|d| |t|h|œ|n| |4+0#4040ff13&|¾|7|.+0#0000000&| +0&#ffffff0@46
- | +0#af5f00255&@1|3| >-+8#0000000#ffff4012|x+8&#ffffff0|a+8#4040ff13&@1|x+8#0000000&|-@1|x+8#4040ff13&|b@1|x+8#0000000&|-@1|x|c+8#4040ff13&@1|x|-+8#0000000&@1|x+8#4040ff13&|d@1|x|-+8#0000000&@1| @45
- | +0#af5f00255&@1|4| |/+0#40ff4011&@1| |c|o|m@1|e|n|t| |w+0&#e0e0e08|i|t|h| |e+8&&|r@1|o|r| +0&#ffffff0|i|n| |i|t| +0#0000000&@43
-+ | +0#af5f00255&@1|5| |f+0#0000000&|i|r|s|t| |l+0&#ffff4012|i|n|e| @1|s|e|c|o|n|d| +0&#ffffff0|l|i|n|e| @1|t|h|i|r|d| |l|i|n|e| |f|o|u|r|t|h| |l+0&#ffff4012|i|n|e| +0&#ffffff0@23
- |~+0#4040ff13&| @73
- |~| @73
- | +0#0000000&@56|3|,|1| @10|A|l@1|
-*** ../vim-8.1.1340/src/version.c 2019-05-17 13:05:03.795770160 +0200
---- src/version.c 2019-05-17 19:35:36.942569315 +0200
-***************
-*** 769,770 ****
---- 769,772 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 1341,
- /**/
-
---
-Lower life forms have more fun!
-
- /// 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 ///