To: vim_dev@googlegroups.com Subject: Patch 8.1.1421 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.1421 Problem: Drawing "~" line in popup window. Solution: Just draw text in the last line of the popup window. Files: src/screen.c, src/structs.h, src/popupwin.c, src/proto/popupwin.pro, src/testdir/test_popupwin.vim, src/testdir/dumps/Test_popupwin_05.dump, src/testdir/dumps/Test_popupwin_06.dump *** ../vim-8.1.1420/src/screen.c 2019-05-29 22:28:25.763184805 +0200 --- src/screen.c 2019-05-30 00:07:36.461352821 +0200 *************** *** 1030,1035 **** --- 1030,1041 ---- if (lowest_wp == NULL) break; + + // Recompute the position if the text changed. + if (lowest_wp->w_popup_last_changedtick + != CHANGEDTICK(lowest_wp->w_buffer)) + popup_adjust_position(lowest_wp); + win_update(lowest_wp); lowest_wp->w_popup_flags |= POPF_REDRAWN; } *************** *** 2119,2124 **** --- 2125,2133 ---- && wp->w_lines[idx].wl_lnum == lnum && lnum > wp->w_topline && !(dy_flags & (DY_LASTLINE | DY_TRUNCATE)) + #ifdef FEAT_TEXT_PROP + && !bt_popup(wp->w_buffer) + #endif && srow + wp->w_lines[idx].wl_size > wp->w_height #ifdef FEAT_DIFF && diff_check_fill(wp, lnum) == 0 *************** *** 2274,2279 **** --- 2283,2295 ---- wp->w_filler_rows = wp->w_height - srow; } #endif + #ifdef FEAT_TEXT_PROP + else if (bt_popup(wp->w_buffer)) + { + // popup line that doesn't fit is left as-is + wp->w_botline = lnum; + } + #endif else if (dy_flags & DY_TRUNCATE) /* 'display' has "truncate" */ { int scr_row = W_WINROW(wp) + wp->w_height - 1; *************** *** 2334,2340 **** // Make sure the rest of the screen is blank // put '~'s on rows that aren't part of the file. ! win_draw_end(wp, '~', ' ', FALSE, row, wp->w_height, HLF_EOB); } #ifdef SYN_TIME_LIMIT --- 2350,2360 ---- // Make sure the rest of the screen is blank // put '~'s on rows that aren't part of the file. ! win_draw_end(wp, ! #ifdef FEAT_TEXT_PROP ! bt_popup(wp->w_buffer) ? ' ' : ! #endif ! '~', ' ', FALSE, row, wp->w_height, HLF_EOB); } #ifdef SYN_TIME_LIMIT *** ../vim-8.1.1420/src/structs.h 2019-05-27 23:36:17.456452208 +0200 --- src/structs.h 2019-05-29 23:55:07.389119328 +0200 *************** *** 2881,2886 **** --- 2881,2888 ---- int w_maxwidth; // "maxwidth" for popup window int w_wantline; // "line" for popup window int w_wantcol; // "col" for popup window + varnumber_T w_popup_last_changedtick; // b:changedtick when position was + // computed # if defined(FEAT_TIMERS) timer_T *w_popup_timer; // timer for closing popup window # endif *** ../vim-8.1.1420/src/popupwin.c 2019-05-29 23:14:25.401172162 +0200 --- src/popupwin.c 2019-05-30 00:07:32.617372125 +0200 *************** *** 151,157 **** /* * Adjust the position and size of the popup to fit on the screen. */ ! static void popup_adjust_position(win_T *wp) { linenr_T lnum; --- 151,157 ---- /* * Adjust the position and size of the popup to fit on the screen. */ ! void popup_adjust_position(win_T *wp) { linenr_T lnum; *************** *** 209,214 **** --- 209,216 ---- wp->w_height = wp->w_maxheight; if (wp->w_height > Rows - wp->w_winrow) wp->w_height = Rows - wp->w_winrow; + + wp->w_popup_last_changedtick = CHANGEDTICK(wp->w_buffer); } /* *** ../vim-8.1.1420/src/proto/popupwin.pro 2019-05-29 20:26:32.525530253 +0200 --- src/proto/popupwin.pro 2019-05-29 23:58:15.652171411 +0200 *************** *** 1,13 **** /* popupwin.c */ void f_popup_create(typval_T *argvars, typval_T *rettv); int popup_any_visible(void); void f_popup_close(typval_T *argvars, typval_T *rettv); void f_popup_hide(typval_T *argvars, typval_T *rettv); - void f_popup_getposition(typval_T *argvars, typval_T *rettv); void f_popup_show(typval_T *argvars, typval_T *rettv); void popup_close(int id); void popup_close_tabpage(tabpage_T *tp, int id); void close_all_popups(void); void ex_popupclear(exarg_T *eap); void f_popup_move(typval_T *argvars, typval_T *rettv); /* vim: set ft=c : */ --- 1,14 ---- /* popupwin.c */ + void popup_adjust_position(win_T *wp); void f_popup_create(typval_T *argvars, typval_T *rettv); int popup_any_visible(void); void f_popup_close(typval_T *argvars, typval_T *rettv); void f_popup_hide(typval_T *argvars, typval_T *rettv); void f_popup_show(typval_T *argvars, typval_T *rettv); void popup_close(int id); void popup_close_tabpage(tabpage_T *tp, int id); void close_all_popups(void); void ex_popupclear(exarg_T *eap); void f_popup_move(typval_T *argvars, typval_T *rettv); + void f_popup_getposition(typval_T *argvars, typval_T *rettv); /* vim: set ft=c : */ *** ../vim-8.1.1420/src/testdir/test_popupwin.vim 2019-05-29 23:14:25.401172162 +0200 --- src/testdir/test_popupwin.vim 2019-05-30 00:09:27.736794071 +0200 *************** *** 41,51 **** call term_sendkeys(buf, ":quit!\") call VerifyScreenDump(buf, 'Test_popupwin_04', {}) ! " resize popup call term_sendkeys(buf, ":call popup_move(popupwin, {'minwidth': 15, 'maxwidth': 25, 'minheight': 3, 'maxheight': 5})\") call term_sendkeys(buf, ":redraw\") call VerifyScreenDump(buf, 'Test_popupwin_05', {}) " clean up call StopVimInTerminal(buf) call delete('XtestPopup') --- 41,56 ---- call term_sendkeys(buf, ":quit!\") call VerifyScreenDump(buf, 'Test_popupwin_04', {}) ! " resize popup, show empty line at bottom call term_sendkeys(buf, ":call popup_move(popupwin, {'minwidth': 15, 'maxwidth': 25, 'minheight': 3, 'maxheight': 5})\") call term_sendkeys(buf, ":redraw\") call VerifyScreenDump(buf, 'Test_popupwin_05', {}) + " show not fitting line at bottom + call term_sendkeys(buf, ":call setbufline(winbufnr(popupwin), 3, 'this line will not fit here')\") + call term_sendkeys(buf, ":redraw\") + call VerifyScreenDump(buf, 'Test_popupwin_06', {}) + " clean up call StopVimInTerminal(buf) call delete('XtestPopup') *** ../vim-8.1.1420/src/testdir/dumps/Test_popupwin_05.dump 2019-05-27 21:53:53.990229301 +0200 --- src/testdir/dumps/Test_popupwin_05.dump 2019-05-29 23:36:51.574682812 +0200 *************** *** 3,9 **** |~| @73 |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @5| +0#4040ff13#ffffff0@51 |~| @6|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| | +0#4040ff13#ffffff0@51 ! |~| @6|~+0&#ffd7ff255| @13| +0&#ffffff0@51 |~| @73 |~| @73 |~| @73 --- 3,9 ---- |~| @73 |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @5| +0#4040ff13#ffffff0@51 |~| @6|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| | +0#4040ff13#ffffff0@51 ! |~| @6| +0&#ffd7ff255@14| +0&#ffffff0@51 |~| @73 |~| @73 |~| @73 *** ../vim-8.1.1420/src/testdir/dumps/Test_popupwin_06.dump 2019-05-30 00:10:59.660332551 +0200 --- src/testdir/dumps/Test_popupwin_06.dump 2019-05-30 00:09:35.280756197 +0200 *************** *** 0 **** --- 1,10 ---- + > +0&#ffffff0@74 + |~+0#4040ff13&| @73 + |~| @73 + |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @15| +0#4040ff13#ffffff0@41 + |~| @6|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| @10| +0#4040ff13#ffffff0@41 + |~| @6|t+0#0000001#ffd7ff255|h|i|s| |l|i|n|e| |w|i|l@1| |n|o|t| |f|i|t| |h|e| +0#4040ff13#ffffff0@41 + |~| @73 + |~| @73 + |~| @73 + |:+0#0000000&|r|e|d|r|a|w| @49|0|,|0|-|1| @8|A|l@1| *** ../vim-8.1.1420/src/version.c 2019-05-29 23:14:25.401172162 +0200 --- src/version.c 2019-05-29 23:35:38.523045031 +0200 *************** *** 769,770 **** --- 769,772 ---- { /* Add new patch number below this line */ + /**/ + 1421, /**/ -- hundred-and-one symptoms of being an internet addict: 49. You never have to deal with busy signals when calling your ISP...because you never log off. /// 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 ///