]> granicus.if.org Git - vim/commitdiff
patch 9.0.1362: ml_get error when going to another tab v9.0.1362
authorBram Moolenaar <Bram@vim.org>
Mon, 27 Feb 2023 17:18:01 +0000 (17:18 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 27 Feb 2023 17:18:01 +0000 (17:18 +0000)
Problem:    ml_get error when going to another tab. (Daniel J. Perry)
Solution:   Do not call update_topline() if "curwin" is invalid.
            (closes #11907)

src/testdir/test_tabpage.vim
src/version.c
src/window.c

index e57a5dd0c341ee533b30069708c142542d33f583..83d6123cd7ef73391216613dbb00392229e4d4ab 100644 (file)
@@ -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
index 032c294e601c0bab5c16e82e627252ee413c10b6..b694119a50de3218fa42379f9a716e00a2338d06 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1362,
 /**/
     1361,
 /**/
index bfdf82587bf2d4cf22ea0e048e69130a7092f7e2..a804b4f1b9147728dbfd62d9a0c38c7644577f0b 100644 (file)
@@ -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;