Mercurial > vim
changeset 23306:90ea5037a7e3 v8.2.2198
patch 8.2.2198: ml_get error when resizing window and using text property
Commit: https://github.com/vim/vim/commit/23999d799cfe844b604f193183f8f84052c8e746
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Dec 23 14:36:00 2020 +0100
patch 8.2.2198: ml_get error when resizing window and using text property
Problem: ml_get error when resizing window and using text property.
Solution: Validate botline of the right window. (closes https://github.com/vim/vim/issues/7528)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 23 Dec 2020 14:45:04 +0100 |
parents | fab58304f77d |
children | 74c40d38612f |
files | src/move.c src/proto/move.pro src/testdir/test_textprop.vim src/textprop.c src/version.c |
diffstat | 5 files changed, 37 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/move.c +++ b/src/move.c @@ -541,6 +541,8 @@ set_topline(win_T *wp, linenr_T lnum) #endif // Approximate the value of w_botline wp->w_botline += lnum - wp->w_topline; + if (wp->w_botline > wp->w_buffer->b_ml.ml_line_count + 1) + wp->w_botline = wp->w_buffer->b_ml.ml_line_count + 1; wp->w_topline = lnum; wp->w_topline_was_set = TRUE; #ifdef FEAT_DIFF @@ -595,8 +597,17 @@ changed_line_abv_curs_win(win_T *wp) void validate_botline(void) { - if (!(curwin->w_valid & VALID_BOTLINE)) - comp_botline(curwin); + validate_botline_win(curwin); +} + +/* + * Make sure the value of wp->w_botline is valid. + */ + void +validate_botline_win(win_T *wp) +{ + if (!(wp->w_valid & VALID_BOTLINE)) + comp_botline(wp); } /*
--- a/src/proto/move.pro +++ b/src/proto/move.pro @@ -13,6 +13,7 @@ void changed_cline_bef_curs_win(win_T *w void changed_line_abv_curs(void); void changed_line_abv_curs_win(win_T *wp); void validate_botline(void); +void validate_botline_win(win_T *wp); void invalidate_botline(void); void invalidate_botline_win(win_T *wp); void approximate_botline_win(win_T *wp);
--- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -1358,4 +1358,24 @@ func Test_prop_block_insert() call prop_type_delete('test') endfunc +" this was causing an ml_get error because w_botline was wrong +func Test_prop_one_line_window() + enew + call range(2)->setline(1) + call prop_type_add('testprop', {}) + call prop_add(1, 1, {'type': 'testprop'}) + call popup_create('popup', {'textprop': 'testprop'}) + $ + new + wincmd _ + call feedkeys("\r", 'xt') + redraw + + call popup_clear() + call prop_type_delete('testprop') + close + bwipe! +endfunc + + " vim: shiftwidth=2 sts=2 expandtab
--- a/src/textprop.c +++ b/src/textprop.c @@ -419,7 +419,7 @@ find_visible_prop(win_T *wp, int type_id int i; // w_botline may not have been updated yet. - validate_botline(); + validate_botline_win(wp); for (lnum = wp->w_topline; lnum < wp->w_botline; ++lnum) { count = get_text_props(wp->w_buffer, lnum, &props, FALSE);