1
0
forked from aniani/vim

patch 9.0.1362: ml_get error when going to another tab

Problem:    ml_get error when going to another tab. (Daniel J. Perry)
Solution:   Do not call update_topline() if "curwin" is invalid.
            (closes #11907)
This commit is contained in:
Bram Moolenaar
2023-02-27 17:18:01 +00:00
parent dd60c365cd
commit 99ad3a8bb9
3 changed files with 22 additions and 5 deletions

View File

@@ -872,4 +872,19 @@ func Test_tabpage_alloc_failure()
call assert_equal(1, tabpagenr('$')) call assert_equal(1, tabpagenr('$'))
endfunc endfunc
" this was giving ml_get errors
func Test_tabpage_last_line()
enew
call setline(1, repeat(['a'], &lines + 5))
$
tabnew
call setline(1, repeat(['b'], &lines + 20))
$
tabNext
call assert_equal('a', getline('.'))
bwipe!
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -695,6 +695,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 */
/**/
1362,
/**/ /**/
1361, 1361,
/**/ /**/

View File

@@ -5273,15 +5273,15 @@ win_enter_ext(win_T *wp, int flags)
int curwin_invalid = (flags & WEE_CURWIN_INVALID); int curwin_invalid = (flags & WEE_CURWIN_INVALID);
int did_decrement = FALSE; int did_decrement = FALSE;
if (wp == curwin && !curwin_invalid) // nothing to do if (wp == curwin && curwin_invalid == 0) // nothing to do
return FALSE; return FALSE;
#ifdef FEAT_JOB_CHANNEL #ifdef FEAT_JOB_CHANNEL
if (!curwin_invalid) if (curwin_invalid == 0)
leaving_window(curwin); leaving_window(curwin);
#endif #endif
if (!curwin_invalid && (flags & WEE_TRIGGER_LEAVE_AUTOCMDS)) if (curwin_invalid == 0 && (flags & WEE_TRIGGER_LEAVE_AUTOCMDS))
{ {
/* /*
* Be careful: If autocommands delete the window, return now. * Be careful: If autocommands delete the window, return now.
@@ -5309,13 +5309,13 @@ win_enter_ext(win_T *wp, int flags)
// Might need to scroll the old window before switching, e.g., when the // Might need to scroll the old window before switching, e.g., when the
// cursor was moved. // cursor was moved.
if (*p_spk == 'c') if (*p_spk == 'c' && curwin_invalid == 0)
update_topline(); update_topline();
// may have to copy the buffer options when 'cpo' contains 'S' // may have to copy the buffer options when 'cpo' contains 'S'
if (wp->w_buffer != curbuf) if (wp->w_buffer != curbuf)
buf_copy_options(wp->w_buffer, BCO_ENTER | BCO_NOHELP); buf_copy_options(wp->w_buffer, BCO_ENTER | BCO_NOHELP);
if (!curwin_invalid) if (curwin_invalid == 0)
{ {
prevwin = curwin; // remember for CTRL-W p prevwin = curwin; // remember for CTRL-W p
curwin->w_redr_status = TRUE; curwin->w_redr_status = TRUE;