To: vim_dev@googlegroups.com Subject: Patch 8.2.4960 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.4960 Problem: Text properties that cross line boundary are not correctly updated for a deleted line. Solution: Correct computing location of text property entry. (Paul Ollis, closes #10431, closes #10430) Files: src/memline.c, src/testdir/test_textprop.vim *** ../vim-8.2.4959/src/memline.c 2022-04-15 13:53:30.052708679 +0100 --- src/memline.c 2022-05-15 22:24:08.216227438 +0100 *************** *** 3501,3508 **** #ifdef FEAT_PROP_POPUP /* * Adjust text properties in line "lnum" for a deleted line. ! * When "above" is true this is the line above the deleted line. ! * "del_props" are the properties of the deleted line. */ static void adjust_text_props_for_delete( --- 3501,3509 ---- #ifdef FEAT_PROP_POPUP /* * Adjust text properties in line "lnum" for a deleted line. ! * When "above" is true this is the line above the deleted line, otherwise this ! * is the line below the deleted line. ! * "del_props[del_props_len]" are the properties of the deleted line. */ static void adjust_text_props_for_delete( *************** *** 3569,3575 **** : TP_FLAG_CONT_PREV; textprop_T prop_this; ! mch_memmove(&prop_this, text + textlen + done_del, sizeof(textprop_T)); if ((prop_this.tp_flags & flag) && prop_del.tp_id == prop_this.tp_id --- 3570,3576 ---- : TP_FLAG_CONT_PREV; textprop_T prop_this; ! mch_memmove(&prop_this, text + textlen + done_this, sizeof(textprop_T)); if ((prop_this.tp_flags & flag) && prop_del.tp_id == prop_this.tp_id *************** *** 3577,3583 **** { found = TRUE; prop_this.tp_flags &= ~flag; ! mch_memmove(text + textlen + done_del, &prop_this, sizeof(textprop_T)); break; } --- 3578,3584 ---- { found = TRUE; prop_this.tp_flags &= ~flag; ! mch_memmove(text + textlen + done_this, &prop_this, sizeof(textprop_T)); break; } *** ../vim-8.2.4959/src/testdir/test_textprop.vim 2022-05-15 13:07:58.366684986 +0100 --- src/testdir/test_textprop.vim 2022-05-15 22:23:43.248253327 +0100 *************** *** 1645,1650 **** --- 1645,1701 ---- bwipe! enddef + " This test is to detect a regression related to #10430. It is not an attempt + " fully cover deleting lines in the presence of multi-line properties. + def Test_delete_line_within_multiline_prop() + new + setline(1, '# Top.') + append(1, ['some_text = """', 'A string.', '"""', '# Bottom.']) + prop_type_add('Identifier', {'highlight': 'ModeMsg', 'priority': 0, 'combine': 0, 'start_incl': 0, 'end_incl': 0}) + prop_type_add('String', {'highlight': 'MoreMsg', 'priority': 0, 'combine': 0, 'start_incl': 0, 'end_incl': 0}) + prop_add(2, 1, {'type': 'Identifier', 'end_lnum': 2, 'end_col': 9}) + prop_add(2, 13, {'type': 'String', 'end_lnum': 4, 'end_col': 4}) + + # The property for line 3 should extend into the previous and next lines. + var props = prop_list(3) + var prop = props[0] + assert_equal(1, len(props)) + assert_equal(0, prop['start']) + assert_equal(0, prop['end']) + + # This deletion should run without raising an exception. + try + :2 del + catch + assert_report('Line delete should have workd, but it raised an error.') + endtry + + # The property for line 2 (was 3) should no longer extend into the previous + # line. + props = prop_list(2) + prop = props[0] + assert_equal(1, len(props)) + assert_equal(1, prop['start'], 'Property was not changed to start within the line.') + + # This deletion should run without raising an exception. + try + :3 del + catch + assert_report('Line delete should have workd, but it raised an error.') + endtry + + # The property for line 2 (originally 3) should no longer extend into the next + # line. + props = prop_list(2) + prop = props[0] + assert_equal(1, len(props)) + assert_equal(1, prop['end'], 'Property was not changed to end within the line.') + + prop_type_delete('Identifier') + prop_type_delete('String') + bwip! + enddef + func Test_prop_in_linebreak() CheckRunVimInTerminal *** ../vim-8.2.4959/src/version.c 2022-05-15 14:50:08.738042956 +0100 --- src/version.c 2022-05-15 22:22:14.592345742 +0100 *************** *** 748,749 **** --- 748,751 ---- { /* Add new patch number below this line */ + /**/ + 4960, /**/ -- hundred-and-one symptoms of being an internet addict: 206. You religiously respond immediately to e-mail, while ignoring your growing pile of snail mail. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///