diff options
Diffstat (limited to 'data/vim/patches/8.1.0665')
-rw-r--r-- | data/vim/patches/8.1.0665 | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0665 b/data/vim/patches/8.1.0665 new file mode 100644 index 000000000..ec258e96f --- /dev/null +++ b/data/vim/patches/8.1.0665 @@ -0,0 +1,234 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0665 +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.0665 +Problem: Text property display wrong when 'spell' is set. (Dominique Pelle) +Solution: Remove unnecessary assignment to char_attr. Combine attributes if + needed. Add a screenshot test. +Files: src/screen.c, src/testdir/test_textprop.vim, + src/testdir/dumps/Test_textprop_01.dump + + +*** ../vim-8.1.0664/src/screen.c 2018-12-30 22:07:35.596868093 +0100 +--- src/screen.c 2018-12-31 13:38:32.001788595 +0100 +*************** +*** 3051,3056 **** +--- 3051,3088 ---- + } + #endif /* FEAT_FOLDING */ + ++ #ifdef FEAT_TEXT_PROP ++ static textprop_T *current_text_props = NULL; ++ static buf_T *current_buf = NULL; ++ ++ static int ++ #ifdef __BORLANDC__ ++ _RTLENTRYF ++ #endif ++ text_prop_compare(const void *s1, const void *s2) ++ { ++ int idx1, idx2; ++ proptype_T *pt1, *pt2; ++ colnr_T col1, col2; ++ ++ idx1 = *(int *)s1; ++ idx2 = *(int *)s2; ++ pt1 = text_prop_type_by_id(current_buf, current_text_props[idx1].tp_type); ++ pt2 = text_prop_type_by_id(current_buf, current_text_props[idx2].tp_type); ++ if (pt1 == pt2) ++ return 0; ++ if (pt1 == NULL) ++ return -1; ++ if (pt2 == NULL) ++ return 1; ++ if (pt1->pt_priority != pt2->pt_priority) ++ return pt1->pt_priority > pt2->pt_priority ? 1 : -1; ++ col1 = current_text_props[idx1].tp_col; ++ col2 = current_text_props[idx2].tp_col; ++ return col1 == col2 ? 0 : col1 > col2 ? 1 : -1; ++ } ++ #endif ++ + /* + * Display line "lnum" of window 'wp' on the screen. + * Start at row "startrow", stop when "endrow" is reached. +*************** +*** 4322,4355 **** + && vcol >= text_props[text_prop_next].tp_col - 1) + text_prop_idxs[text_props_active++] = text_prop_next++; + +! text_prop_type = NULL; + if (text_props_active > 0) + { +! int max_priority = INT_MIN; +! int max_col = 0; + +- // Get the property type with the highest priority +- // and/or starting last. + for (pi = 0; pi < text_props_active; ++pi) + { +! int tpi = text_prop_idxs[pi]; +! proptype_T *pt; + +! pt = text_prop_type_by_id( +! curwin->w_buffer, text_props[tpi].tp_type); +! if (pt != NULL +! && (pt->pt_priority > max_priority +! || (pt->pt_priority == max_priority +! && text_props[tpi].tp_col >= max_col))) + { + text_prop_type = pt; +! max_priority = pt->pt_priority; +! max_col = text_props[tpi].tp_col; + } + } +- if (text_prop_type != NULL) +- text_prop_attr = +- syn_id2attr(text_prop_type->pt_hl_id); + } + } + #endif +--- 4354,4385 ---- + && vcol >= text_props[text_prop_next].tp_col - 1) + text_prop_idxs[text_props_active++] = text_prop_next++; + +! text_prop_attr = 0; + if (text_props_active > 0) + { +! // Sort the properties on priority and/or starting last. +! // Then combine the attributes, highest priority last. +! current_text_props = text_props; +! current_buf = wp->w_buffer; +! qsort((void *)text_prop_idxs, (size_t)text_props_active, +! sizeof(int), text_prop_compare); + + for (pi = 0; pi < text_props_active; ++pi) + { +! int tpi = text_prop_idxs[pi]; +! proptype_T *pt = text_prop_type_by_id(wp->w_buffer, text_props[tpi].tp_type); + +! if (pt != NULL) + { ++ int pt_attr = syn_id2attr(pt->pt_hl_id); ++ + text_prop_type = pt; +! if (text_prop_attr == 0) +! text_prop_attr = pt_attr; +! else +! text_prop_attr = hl_combine_attr(text_prop_attr, pt_attr); + } + } + } + } + #endif +*************** +*** 4775,4784 **** + if (has_spell && v >= word_end && v > cur_checked_col) + { + spell_attr = 0; +- # ifdef FEAT_SYN_HL +- if (!attr_pri) +- char_attr = syntax_attr; +- # endif + if (c != 0 && ( + # ifdef FEAT_SYN_HL + !has_syntax || +--- 4805,4810 ---- +*** ../vim-8.1.0664/src/testdir/test_textprop.vim 2018-12-28 23:22:36.270750732 +0100 +--- src/testdir/test_textprop.vim 2018-12-31 12:41:37.979473855 +0100 +*************** +*** 5,10 **** +--- 5,12 ---- + finish + endif + ++ source screendump.vim ++ + func Test_proptype_global() + call prop_type_add('comment', {'highlight': 'Directory', 'priority': 123, 'start_incl': 1, 'end_incl': 1}) + let proptypes = prop_type_list() +*************** +*** 283,287 **** + call prop_type_delete('comment') + endfunc + +! +! " TODO: screenshot test with highlighting +--- 285,311 ---- + call prop_type_delete('comment') + endfunc + +! " screenshot test with textprop highlighting +! funct Test_textprop_screenshots() +! if !CanRunVimInTerminal() +! return +! endif +! call writefile([ +! \ "call setline(1, ['One two', 'Number 123 and then 4567.', 'Three'])", +! \ "hi NumberProp ctermfg=blue", +! \ "hi LongProp ctermbg=yellow", +! \ "call prop_type_add('number', {'highlight': 'NumberProp'})", +! \ "call prop_type_add('long', {'highlight': 'LongProp'})", +! \ "call prop_add(1, 4, {'end_lnum': 3, 'end_col': 3, 'type': 'long'})", +! \ "call prop_add(2, 8, {'length': 3, 'type': 'number'})", +! \ "call prop_add(2, 21, {'length': 4, 'type': 'number'})", +! \ "set number", +! \ "set spell", +! \], 'XtestProp') +! let buf = RunVimInTerminal('-S XtestProp', {}) +! call VerifyScreenDump(buf, 'Test_textprop_01', {}) +! +! " clean up +! call StopVimInTerminal(buf) +! call delete('Xtest_folds_with_rnu') +! endfunc +*** ../vim-8.1.0664/src/testdir/dumps/Test_textprop_01.dump 2018-12-31 13:54:54.313537883 +0100 +--- src/testdir/dumps/Test_textprop_01.dump 2018-12-31 12:43:50.366431472 +0100 +*************** +*** 0 **** +--- 1,20 ---- ++ | +0#af5f00255#ffffff0@1|1| >O+0#0000000&|n|e| +0&#ffff4012|t|w|o| +0&#ffffff0@63 ++ | +0#af5f00255&@1|2| |N+0#0000000#ffff4012|u|m|b|e|r| |1+0#4040ff13#ffffff0|2|3| +0#0000000#ffff4012|a|n|d| |t|h|e|n| |4+0#4040ff13#ffffff0|5|6|7|.+0#0000000#ffff4012| +0&#ffffff0@45 ++ | +0#af5f00255&@1|3| |T+0#0000000#ffff4012|h|r|e+0&#ffffff0@1| @65 ++ |~+0#4040ff13&| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ |~| @73 ++ | +0#0000000&@56|1|,|1| @10|A|l@1| +*** ../vim-8.1.0664/src/version.c 2018-12-30 22:55:43.671136682 +0100 +--- src/version.c 2018-12-31 12:16:31.671760142 +0100 +*************** +*** 801,802 **** +--- 801,804 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 665, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +91. It's Saturday afternoon in the middle of May and you + are on computer. + + /// 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 /// |