To: vim_dev@googlegroups.com Subject: Patch 9.0.0294 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0294 Problem: Crash when 'cmdheight' is 0 and popup_clear() used. Solution: Reset "message_win" when the message popup is cleared. Close the popup when 'cmdheight' is non-zero. Add a screendump test. Files: src/popupwin.c, src/proto/popupwin.pro, src/window.c, src/testdir/test_messages.vim, src/testdir/dumps/Test_cmdheight_zero_1.dump, src/testdir/dumps/Test_cmdheight_zero_2.dump, src/testdir/dumps/Test_cmdheight_zero_3.dump *** ../vim-9.0.0293/src/popupwin.c 2022-08-27 21:29:28.257402847 +0100 --- src/popupwin.c 2022-08-28 12:44:14.284013995 +0100 *************** *** 28,33 **** --- 28,38 ---- {"center", POPPOS_CENTER} }; + #ifdef HAS_MESSAGE_WINDOW + // Window used for messages when 'winheight' is zero. + static win_T *message_win = NULL; + #endif + static void popup_adjust_position(win_T *wp); /* *************** *** 2770,2775 **** --- 2775,2785 ---- clear_cmdline = TRUE; win_free_popup(wp); + #ifdef HAS_MESSAGE_WINDOW + if (wp == message_win) + message_win = NULL; + #endif + redraw_all_later(UPD_NOT_VALID); popup_mask_refresh = TRUE; } *************** *** 4440,4448 **** #if defined(HAS_MESSAGE_WINDOW) || defined(PROTO) - // Window used for messages when 'winheight' is zero. - static win_T *message_win = NULL; - /* * Get the message window. * Returns NULL if something failed. --- 4450,4455 ---- *************** *** 4516,4521 **** --- 4523,4538 ---- popup_hide(message_win); } + /* + * If the message window exists: close it. + */ + void + popup_close_message_win(void) + { + if (message_win != NULL) + popup_close(message_win->w_id, TRUE); + } + #endif /* *** ../vim-9.0.0293/src/proto/popupwin.pro 2022-08-27 21:29:28.257402847 +0100 --- src/proto/popupwin.pro 2022-08-28 12:44:12.604013174 +0100 *************** *** 66,71 **** --- 66,72 ---- void popup_show_message_win(void); int popup_message_win_visible(void); void popup_hide_message_win(void); + void popup_close_message_win(void); int popup_win_closed(win_T *win); void popup_set_title(win_T *wp); void popup_update_preview_title(void); *** ../vim-9.0.0293/src/window.c 2022-08-25 16:02:09.681816465 +0100 --- src/window.c 2022-08-28 12:44:03.928008838 +0100 *************** *** 6603,6608 **** --- 6603,6613 ---- // Recompute window positions. if (frp != lastwin->w_frame) (void)win_comp_pos(); + + #ifdef HAS_MESSAGE_WINDOW + if (p_ch > 0) + popup_close_message_win(); + #endif } /* *** ../vim-9.0.0293/src/testdir/test_messages.vim 2022-08-28 12:06:17.816288642 +0100 --- src/testdir/test_messages.vim 2022-08-28 12:59:30.267879091 +0100 *************** *** 471,474 **** --- 471,502 ---- redraw endfunc + func Test_cmdheight_zero_dump() + CheckScreendump + + let lines =<< trim END + set cmdheight=0 + set showmode + call setline(1, 'some text') + END + call writefile(lines, 'XtestCmdheight') + let buf = RunVimInTerminal('-S XtestCmdheight', #{rows: 6}) + " The "-- INSERT --" indicator should not be visible. + call term_sendkeys(buf, "i") + call VerifyScreenDump(buf, 'Test_cmdheight_zero_1', {}) + + " The "-- VISUAL --" indicator should not be visible. + call term_sendkeys(buf, "\vw") + call VerifyScreenDump(buf, 'Test_cmdheight_zero_2', {}) + + " Echo'd text is in a popup window + call term_sendkeys(buf, "\:echo 'message window'\") + call VerifyScreenDump(buf, 'Test_cmdheight_zero_3', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('XtestCmdheight') + endfunc + + " vim: shiftwidth=2 sts=2 expandtab *** ../vim-9.0.0293/src/testdir/dumps/Test_cmdheight_zero_1.dump 2022-08-28 13:01:32.383815277 +0100 --- src/testdir/dumps/Test_cmdheight_zero_1.dump 2022-08-28 12:54:52.492000137 +0100 *************** *** 0 **** --- 1,6 ---- + >s+0&#ffffff0|o|m|e| |t|e|x|t| @65 + |~+0#4040ff13&| @73 + |~| @73 + |~| @73 + |~| @73 + |~| @73 *** ../vim-9.0.0293/src/testdir/dumps/Test_cmdheight_zero_2.dump 2022-08-28 13:01:32.387815275 +0100 --- src/testdir/dumps/Test_cmdheight_zero_2.dump 2022-08-28 12:56:23.719964845 +0100 *************** *** 0 **** --- 1,6 ---- + |s+0&#e0e0e08|o|m|e| >t+0&#ffffff0|e|x|t| @65 + |~+0#4040ff13&| @73 + |~| @73 + |~| @73 + |~| @73 + |~| @73 *** ../vim-9.0.0293/src/testdir/dumps/Test_cmdheight_zero_3.dump 2022-08-28 13:01:32.391815274 +0100 --- src/testdir/dumps/Test_cmdheight_zero_3.dump 2022-08-28 12:57:31.435935621 +0100 *************** *** 0 **** --- 1,6 ---- + |s+0&#ffffff0|o|m|e| >t|e|x|t| @65 + |~+0#4040ff13&| @73 + |~| @73 + |~| @73 + |═+0#e000002&@74 + |m|e|s@1|a|g|e| |w|i|n|d|o|w| @60 *** ../vim-9.0.0293/src/version.c 2022-08-28 12:06:17.816288642 +0100 --- src/version.c 2022-08-28 12:38:25.712289373 +0100 *************** *** 709,710 **** --- 709,712 ---- { /* Add new patch number below this line */ + /**/ + 294, /**/ -- Why is "abbreviation" such a long word? /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///