To: vim_dev@googlegroups.com Subject: Patch 8.1.2164 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.2164 Problem: Stuck when using "j" in a popupwin with popup_filter_menu if a line wraps. Solution: Check the cursor line is visible. (closes #4577) Files: src/popupwin.c, src/testdir/test_popupwin.vim, src/testdir/dumps/Test_popupwin_wrap_1.dump, src/testdir/dumps/Test_popupwin_wrap_2.dump *** ../vim-8.1.2163/src/popupwin.c 2019-10-05 11:56:49.670415784 +0200 --- src/popupwin.c 2019-10-16 22:15:09.867841759 +0200 *************** *** 535,541 **** } /* ! * Scroll to show the line with the cursor. This assumes lines don't wrap. */ static void popup_show_curline(win_T *wp) --- 535,541 ---- } /* ! * Scroll to show the line with the cursor. */ static void popup_show_curline(win_T *wp) *************** *** 550,555 **** --- 550,560 ---- wp->w_topline = 1; else if (wp->w_topline > wp->w_buffer->b_ml.ml_line_count) wp->w_topline = wp->w_buffer->b_ml.ml_line_count; + while (wp->w_topline < wp->w_cursor.lnum + && wp->w_topline < wp->w_buffer->b_ml.ml_line_count + && plines_m_win(wp, wp->w_topline, wp->w_cursor.lnum) + > wp->w_height) + ++wp->w_topline; } // Don't use "firstline" now. *************** *** 1041,1046 **** --- 1046,1052 ---- linenr_T lnum; int wrapped = 0; int maxwidth; + int used_maxwidth = FALSE; int maxspace; int center_vert = FALSE; int center_hor = FALSE; *************** *** 1208,1213 **** --- 1214,1220 ---- ++wrapped; len -= maxwidth; wp->w_width = maxwidth; + used_maxwidth = TRUE; } } else if (len > maxwidth *************** *** 1259,1264 **** --- 1266,1273 ---- { ++right_extra; ++extra_width; + if (used_maxwidth) + maxwidth -= 2; // try to show the scrollbar } minwidth = wp->w_minwidth; *** ../vim-8.1.2163/src/testdir/test_popupwin.vim 2019-10-03 22:35:46.688591474 +0200 --- src/testdir/test_popupwin.vim 2019-10-16 22:12:36.288039632 +0200 *************** *** 509,514 **** --- 509,546 ---- call delete('XtestPopupClose') endfunction + func Test_popup_menu_wrap() + CheckScreendump + + let lines =<< trim END + call setline(1, range(1, 20)) + call popup_create([ + \ 'one', + \ 'asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfas', + \ 'three', + \ 'four', + \ ], #{ + \ pos: "botleft", + \ border: [], + \ padding: [0,1,0,1], + \ maxheight: 3, + \ cursorline: 1, + \ filter: 'popup_filter_menu', + \ }) + END + call writefile(lines, 'XtestPopupWrap') + let buf = RunVimInTerminal('-S XtestPopupWrap', #{rows: 10}) + call VerifyScreenDump(buf, 'Test_popupwin_wrap_1', {}) + + call term_sendkeys(buf, "jj") + call VerifyScreenDump(buf, 'Test_popupwin_wrap_2', {}) + + " clean up + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) + call delete('XtestPopupWrap') + endfunction + func Test_popup_with_mask() CheckScreendump *** ../vim-8.1.2163/src/testdir/dumps/Test_popupwin_wrap_1.dump 2019-10-16 22:16:29.159720392 +0200 --- src/testdir/dumps/Test_popupwin_wrap_1.dump 2019-10-16 22:10:03.984173258 +0200 *************** *** 0 **** --- 1,10 ---- + >1+0&#ffffff0| @73 + |2| @73 + |╔+0#0000001#ffd7ff255|═@73 + |║| |o+0&#e0e0e08|n|e| @67| +0&#ffd7ff255| +0#0000000#0000001 + |║+0#0000001#ffd7ff255| |a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d| | +0#0000000#0000001 + |║+0#0000001#ffd7ff255| |f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s| @52| +0#0000000#a8a8a8255 + |╚+0#0000001#ffd7ff255|═@73 + |8+0#0000000#ffffff0| @73 + |9| @73 + @57|1|,|1| @10|T|o|p| *** ../vim-8.1.2163/src/testdir/dumps/Test_popupwin_wrap_2.dump 2019-10-16 22:16:29.163720387 +0200 --- src/testdir/dumps/Test_popupwin_wrap_2.dump 2019-10-16 22:10:05.032172596 +0200 *************** *** 0 **** --- 1,10 ---- + >1+0&#ffffff0| @73 + |2| @73 + |╔+0#0000001#ffd7ff255|═@73 + |║| |a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d| | +0#0000000#a8a8a8255 + |║+0#0000001#ffd7ff255| |f|a|s|d|f|a|s|d|f|a|s|d|f|a|s|d|f|a|s| @52| +0#0000000#0000001 + |║+0#0000001#ffd7ff255| |t+0&#e0e0e08|h|r|e@1| @65| +0&#ffd7ff255| +0#0000000#0000001 + |╚+0#0000001#ffd7ff255|═@73 + |8+0#0000000#ffffff0| @73 + |9| @73 + @57|1|,|1| @10|T|o|p| *** ../vim-8.1.2163/src/version.c 2019-10-16 21:33:37.523551169 +0200 --- src/version.c 2019-10-16 21:50:45.131385824 +0200 *************** *** 755,756 **** --- 755,758 ---- { /* Add new patch number below this line */ + /**/ + 2164, /**/ -- NEIL INNES PLAYED: THE FIRST SELF-DESTRUCTIVE MONK, ROBIN'S LEAST FAVORITE MINSTREL, THE PAGE CRUSHED BY A RABBIT, THE OWNER OF A DUCK "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// 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 ///