summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-07-08 20:49:07 +0200
committerBram Moolenaar <Bram@vim.org>2018-07-08 20:49:07 +0200
commit875cf8789426cc258d85358ea2c86744a5a87b16 (patch)
tree4688ac646299f89e0fd90f0542afd78d377e8912 /src
parent2338c32b53d20dc18540b1a20845bcd8a6371bff (diff)
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.c7
-rw-r--r--src/testdir/test_terminal.vim26
-rw-r--r--src/version.c2
3 files changed, 33 insertions, 2 deletions
diff --git a/src/terminal.c b/src/terminal.c
index 2e99a8598a..22b90c8332 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 52c35aaaad..7ab0cf8ba9 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 dec266d8a4..2821a1b966 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,