diff options
author | Bram Moolenaar <Bram@vim.org> | 2023-02-27 17:18:01 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-02-27 17:18:01 +0000 |
commit | 99ad3a8bb95c6f860545a050472b6181e33bac1a (patch) | |
tree | 038ff903aeb50dc88815a9d61d2ef52bdf7140bc | |
parent | dd60c365cd2630794be84d63c4fe287124a30b97 (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.vim | 15 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/window.c | 10 |
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; |