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!\<CR>")
    call VerifyScreenDump(buf, 'Test_popupwin_04', {})
  
!   " resize popup
    call term_sendkeys(buf, ":call popup_move(popupwin, {'minwidth': 15, 
'maxwidth': 25, 'minheight': 3, 'maxheight': 5})\<CR>")
    call term_sendkeys(buf, ":redraw\<CR>")
    call VerifyScreenDump(buf, 'Test_popupwin_05', {})
  
    " clean up
    call StopVimInTerminal(buf)
    call delete('XtestPopup')
--- 41,56 ----
    call term_sendkeys(buf, ":quit!\<CR>")
    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})\<CR>")
    call term_sendkeys(buf, ":redraw\<CR>")
    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')\<CR>")
+   call term_sendkeys(buf, ":redraw\<CR>")
+   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 -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201905292212.x4TMCYEH005971%40masaka.moolenaar.net.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui