diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-07-08 20:49:07 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-07-08 20:49:07 +0200 |
commit | 875cf8789426cc258d85358ea2c86744a5a87b16 (patch) | |
tree | 4688ac646299f89e0fd90f0542afd78d377e8912 /src | |
parent | 2338c32b53d20dc18540b1a20845bcd8a6371bff (diff) | |
download | vim-git-875cf8789426cc258d85358ea2c86744a5a87b16.tar.gz |
patch 8.1.0171: typing CTRL-W n in a terminal window causes ml_get errorv8.1.0171
Problem: Typing CTRL-W n in a terminal window causes ml_get error.
Solution: When resizing the terminal outside of terminal_loop() make sure
the snapshot is complete.
Diffstat (limited to 'src')
-rw-r--r-- | src/terminal.c | 7 | ||||
-rw-r--r-- | src/testdir/test_terminal.vim | 26 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 33 insertions, 2 deletions
diff --git a/src/terminal.c b/src/terminal.c index 2e99a8598..22b90c833 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -3134,13 +3134,16 @@ term_update_window(win_T *wp) if (term->tl_rows != newrows || term->tl_cols != newcols) { - - term->tl_vterm_size_changed = TRUE; vterm_set_size(vterm, newrows, newcols); ch_log(term->tl_job->jv_channel, "Resizing terminal to %d lines", newrows); term_report_winsize(term, newrows, newcols); + + // Updating the terminal size will cause the snapshot to be cleared. + // When not in terminal_loop() we need to restore it. + if (term != in_terminal_loop) + may_move_terminal_to_buffer(term, FALSE); } /* The cursor may have been moved when resizing. */ diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim index 52c35aaaa..7ab0cf8ba 100644 --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -1525,6 +1525,32 @@ func Test_terminwinscroll() exe buf . 'bwipe!' endfunc +" Resizing the terminal window caused an ml_get error. +" TODO: This does not reproduce the original problem. +func Test_terminal_resize() + set statusline=x + terminal + call assert_equal(2, winnr('$')) + + " Fill the terminal with text. + if has('win32') + call feedkeys("dir\<CR>", 'xt') + else + call feedkeys("ls\<CR>", 'xt') + endif + " Go to Terminal-Normal mode for a moment. + call feedkeys("\<C-W>N", 'xt') + " Open a new window + call feedkeys("i\<C-W>n", 'xt') + call assert_equal(3, winnr('$')) + redraw + + close + call assert_equal(2, winnr('$')) + call feedkeys("exit\<CR>", 'xt') + set statusline& +endfunc + " must be nearly the last, we can't go back from GUI to terminal func Test_zz1_terminal_in_gui() if !CanRunGui() diff --git a/src/version.c b/src/version.c index dec266d8a..2821a1b96 100644 --- a/src/version.c +++ b/src/version.c @@ -790,6 +790,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 171, +/**/ 170, /**/ 169, |