summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-02-27 17:18:01 +0000
committerBram Moolenaar <Bram@vim.org>2023-02-27 17:18:01 +0000
commit99ad3a8bb95c6f860545a050472b6181e33bac1a (patch)
tree038ff903aeb50dc88815a9d61d2ef52bdf7140bc
parentdd60c365cd2630794be84d63c4fe287124a30b97 (diff)
patch 9.0.1362: ml_get error when going to another tabv9.0.1362
Problem: ml_get error when going to another tab. (Daniel J. Perry) Solution: Do not call update_topline() if "curwin" is invalid. (closes #11907)
-rw-r--r--src/testdir/test_tabpage.vim15
-rw-r--r--src/version.c2
-rw-r--r--src/window.c10
3 files changed, 22 insertions, 5 deletions
diff --git a/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim
index e57a5dd0c3..83d6123cd7 100644
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -872,4 +872,19 @@ func Test_tabpage_alloc_failure()
call assert_equal(1, tabpagenr('$'))
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
diff --git a/src/version.c b/src/version.c
index 032c294e60..b694119a50 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1362,
+/**/
1361,
/**/
1360,
diff --git a/src/window.c b/src/window.c
index bfdf82587b..a804b4f1b9 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5273,15 +5273,15 @@ win_enter_ext(win_T *wp, int flags)
int curwin_invalid = (flags & WEE_CURWIN_INVALID);
int did_decrement = FALSE;
- if (wp == curwin && !curwin_invalid) // nothing to do
+ if (wp == curwin && curwin_invalid == 0) // nothing to do
return FALSE;
#ifdef FEAT_JOB_CHANNEL
- if (!curwin_invalid)
+ if (curwin_invalid == 0)
leaving_window(curwin);
#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.
@@ -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
// cursor was moved.
- if (*p_spk == 'c')
+ if (*p_spk == 'c' && curwin_invalid == 0)
update_topline();
// may have to copy the buffer options when 'cpo' contains 'S'
if (wp->w_buffer != curbuf)
buf_copy_options(wp->w_buffer, BCO_ENTER | BCO_NOHELP);
- if (!curwin_invalid)
+ if (curwin_invalid == 0)
{
prevwin = curwin; // remember for CTRL-W p
curwin->w_redr_status = TRUE;