mirror of
https://github.com/vim/vim.git
synced 2025-10-05 05:34:07 -04:00
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 #7528)
This commit is contained in:
15
src/move.c
15
src/move.c
@@ -541,6 +541,8 @@ set_topline(win_T *wp, linenr_T lnum)
|
|||||||
#endif
|
#endif
|
||||||
// Approximate the value of w_botline
|
// Approximate the value of w_botline
|
||||||
wp->w_botline += lnum - wp->w_topline;
|
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 = lnum;
|
||||||
wp->w_topline_was_set = TRUE;
|
wp->w_topline_was_set = TRUE;
|
||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
@@ -595,8 +597,17 @@ changed_line_abv_curs_win(win_T *wp)
|
|||||||
void
|
void
|
||||||
validate_botline(void)
|
validate_botline(void)
|
||||||
{
|
{
|
||||||
if (!(curwin->w_valid & VALID_BOTLINE))
|
validate_botline_win(curwin);
|
||||||
comp_botline(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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -13,6 +13,7 @@ void changed_cline_bef_curs_win(win_T *wp);
|
|||||||
void changed_line_abv_curs(void);
|
void changed_line_abv_curs(void);
|
||||||
void changed_line_abv_curs_win(win_T *wp);
|
void changed_line_abv_curs_win(win_T *wp);
|
||||||
void validate_botline(void);
|
void validate_botline(void);
|
||||||
|
void validate_botline_win(win_T *wp);
|
||||||
void invalidate_botline(void);
|
void invalidate_botline(void);
|
||||||
void invalidate_botline_win(win_T *wp);
|
void invalidate_botline_win(win_T *wp);
|
||||||
void approximate_botline_win(win_T *wp);
|
void approximate_botline_win(win_T *wp);
|
||||||
|
@@ -1358,4 +1358,24 @@ func Test_prop_block_insert()
|
|||||||
call prop_type_delete('test')
|
call prop_type_delete('test')
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -419,7 +419,7 @@ find_visible_prop(win_T *wp, int type_id, int id, textprop_T *prop,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
// w_botline may not have been updated yet.
|
// w_botline may not have been updated yet.
|
||||||
validate_botline();
|
validate_botline_win(wp);
|
||||||
for (lnum = wp->w_topline; lnum < wp->w_botline; ++lnum)
|
for (lnum = wp->w_topline; lnum < wp->w_botline; ++lnum)
|
||||||
{
|
{
|
||||||
count = get_text_props(wp->w_buffer, lnum, &props, FALSE);
|
count = get_text_props(wp->w_buffer, lnum, &props, FALSE);
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2198,
|
||||||
/**/
|
/**/
|
||||||
2197,
|
2197,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user