To: vim_dev@googlegroups.com Subject: Patch 8.1.0171 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.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. Files: src/terminal.c, src/testdir/test_terminal.vim *** ../vim-8.1.0170/src/terminal.c Sun Jul 8 16:50:33 2018 --- src/terminal.c Sun Jul 8 20:48:42 2018 *************** *** 3134,3146 **** 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); } /* The cursor may have been moved when resizing. */ --- 3134,3149 ---- 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. */ *** ../vim-8.1.0170/src/testdir/test_terminal.vim Tue Jun 19 20:08:10 2018 --- src/testdir/test_terminal.vim Sun Jul 8 20:46:08 2018 *************** *** 1525,1530 **** --- 1525,1556 ---- 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\", 'xt') + else + call feedkeys("ls\", 'xt') + endif + " Go to Terminal-Normal mode for a moment. + call feedkeys("\N", 'xt') + " Open a new window + call feedkeys("i\n", 'xt') + call assert_equal(3, winnr('$')) + redraw + + close + call assert_equal(2, winnr('$')) + call feedkeys("exit\", '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() *** ../vim-8.1.0170/src/version.c Sun Jul 8 19:07:16 2018 --- src/version.c Sun Jul 8 20:46:58 2018 *************** *** 791,792 **** --- 791,794 ---- { /* Add new patch number below this line */ + /**/ + 171, /**/ -- hundred-and-one symptoms of being an internet addict: 215. Your mouse-clicking forearm rivals Popeye's. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///