To: vim_dev@googlegroups.com Subject: Patch 8.2.1307 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1307 Problem: popup window width does not include number, fold of sign column width. Solution: Take number, fold and sign column with into account. Files: src/popupwin.c, src/testdir/test_popupwin.vim, src/testdir/dumps/Test_popupwin_sign_2.dump *** ../vim-8.2.1306/src/popupwin.c 2020-07-26 22:20:51.080514535 +0200 --- src/popupwin.c 2020-07-27 22:26:46.942415223 +0200 *************** *** 1111,1116 **** --- 1111,1117 ---- int wrapped = 0; int maxwidth; int used_maxwidth = FALSE; + int margin_width = 0; int maxspace; int center_vert = FALSE; int center_hor = FALSE; *************** *** 1249,1254 **** --- 1250,1268 ---- allow_adjust_left = FALSE; maxwidth = wp->w_maxwidth; } + + if (wp->w_p_nu || wp->w_p_rnu) + margin_width = number_width(wp) + 1; + #ifdef FEAT_FOLDING + margin_width += wp->w_p_fdc; + #endif + #ifdef FEAT_SIGNS + if (signcolumn_on(wp)) + margin_width += 2; + #endif + if (margin_width >= maxwidth) + margin_width = maxwidth - 1; + minwidth = wp->w_minwidth; minheight = wp->w_minheight; #ifdef FEAT_TERMINAL *************** *** 1289,1294 **** --- 1303,1309 ---- // Count Tabs for what they are worth and compute the length based on // the maximum width (matters when 'showbreak' is set). + // "margin_width" is added to "len" where it matters. if (wp->w_width < maxwidth) wp->w_width = maxwidth; len = win_linetabsize(wp, ml_get_buf(wp->w_buffer, lnum, FALSE), *************** *** 1297,1317 **** if (wp->w_p_wrap) { ! while (len > maxwidth) { ++wrapped; ! len -= maxwidth; wp->w_width = maxwidth; used_maxwidth = TRUE; } } ! else if (len > maxwidth && allow_adjust_left && (wp->w_popup_pos == POPPOS_TOPLEFT || wp->w_popup_pos == POPPOS_BOTLEFT)) { // adjust leftwise to fit text on screen ! int shift_by = len - maxwidth; if (shift_by > wp->w_wincol) { --- 1312,1332 ---- if (wp->w_p_wrap) { ! while (len + margin_width > maxwidth) { ++wrapped; ! len -= maxwidth - margin_width; wp->w_width = maxwidth; used_maxwidth = TRUE; } } ! else if (len + margin_width > maxwidth && allow_adjust_left && (wp->w_popup_pos == POPPOS_TOPLEFT || wp->w_popup_pos == POPPOS_BOTLEFT)) { // adjust leftwise to fit text on screen ! int shift_by = len + margin_width - maxwidth; if (shift_by > wp->w_wincol) { *************** *** 1325,1333 **** maxwidth += shift_by; wp->w_width = maxwidth; } ! if (wp->w_width < len) { ! wp->w_width = len; if (wp->w_maxwidth > 0 && wp->w_width > wp->w_maxwidth) wp->w_width = wp->w_maxwidth; } --- 1340,1348 ---- maxwidth += shift_by; wp->w_width = maxwidth; } ! if (wp->w_width < len + margin_width) { ! wp->w_width = len + margin_width; if (wp->w_maxwidth > 0 && wp->w_width > wp->w_maxwidth) wp->w_width = wp->w_maxwidth; } *** ../vim-8.2.1306/src/testdir/test_popupwin.vim 2020-07-26 22:20:51.080514535 +0200 --- src/testdir/test_popupwin.vim 2020-07-27 22:35:53.267793948 +0200 *************** *** 3375,3386 **** --- 3375,3396 ---- call sign_place(3, 'PopUpSelected', 'Other', winbufnr, {'lnum': 1}) " add sign to popup buffer, does not show call sign_place(4, 'Selected', 'Current', winbufnr, {'lnum': 2}) + + func SetOptions() + call setwinvar(g:winid, '&number', 1) + call setwinvar(g:winid, '&foldcolumn', 2) + call popup_settext(g:winid, 'a longer line to check the width') + endfunc END call writefile(lines, 'XtestPopupSign') let buf = RunVimInTerminal('-S XtestPopupSign', #{rows: 10}) call VerifyScreenDump(buf, 'Test_popupwin_sign_1', {}) + " set more options to check the width is adjusted + call term_sendkeys(buf, ":call SetOptions()\") + call VerifyScreenDump(buf, 'Test_popupwin_sign_2', {}) + call StopVimInTerminal(buf) call delete('XtestPopupSign') endfunc *** ../vim-8.2.1306/src/testdir/dumps/Test_popupwin_sign_2.dump 2020-07-27 22:39:21.894838892 +0200 --- src/testdir/dumps/Test_popupwin_sign_2.dump 2020-07-27 22:36:13.935698579 +0200 *************** *** 0 **** --- 1,10 ---- + |>+0#e000002#ffffff0@1>0+0#ffffff16#ff404010| @71 + | +0#0000e05#a8a8a8255@1|1+0#0000000#ffffff0| @71 + | +0#0000e05#a8a8a8255@1|2+0#0000000#ffffff0| @71 + | +0#0000e05#a8a8a8255@1|3+0#0000000#ffffff0| @71 + | +0#0000e05#a8a8a8255@1|4+0#0000000#ffffff0| @13| +0#0000e05#a8a8a8255@1|#+0#ffffff16#ff404010|!| +0#af5f00255#ffd7ff255@1|1| |a+0#0000001#ffff4012| |l|o|n|g|e|r| |l|i|n|e| |t|o| |c|h|e|c|k| |t|h|e| |w|i|d|t|h| +0#0000000#ffffff0@17 + | +0#0000e05#a8a8a8255@1|5+0#0000000#ffffff0| @71 + | +0#0000e05#a8a8a8255@1|6+0#0000000#ffffff0| @71 + | +0#0000e05#a8a8a8255@1|7+0#0000000#ffffff0| @71 + | +0#0000e05#a8a8a8255@1|8+0#0000000#ffffff0| @71 + |:|c|a|l@1| |S|e|t|O|p|t|i|o|n|s|(|)| @38|1|,|1| @10|T|o|p| *** ../vim-8.2.1306/src/version.c 2020-07-27 21:43:24.137946109 +0200 --- src/version.c 2020-07-27 22:18:29.520799074 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1307, /**/ -- Warning label on a superhero Halloween costume: "Caution: Cape does not enable user to fly." /// 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 ///