forked from aniani/vim
patch 8.1.1421: drawing "~" line in popup window
Problem: Drawing "~" line in popup window. Solution: Just draw text in the last line of the popup window.
This commit is contained in:
parent
88c4e1f069
commit
1714696600
@ -151,7 +151,7 @@ add_popup_dicts(buf_T *buf, list_T *l)
|
|||||||
/*
|
/*
|
||||||
* Adjust the position and size of the popup to fit on the screen.
|
* Adjust the position and size of the popup to fit on the screen.
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
popup_adjust_position(win_T *wp)
|
popup_adjust_position(win_T *wp)
|
||||||
{
|
{
|
||||||
linenr_T lnum;
|
linenr_T lnum;
|
||||||
@ -209,6 +209,8 @@ popup_adjust_position(win_T *wp)
|
|||||||
wp->w_height = wp->w_maxheight;
|
wp->w_height = wp->w_maxheight;
|
||||||
if (wp->w_height > Rows - wp->w_winrow)
|
if (wp->w_height > Rows - wp->w_winrow)
|
||||||
wp->w_height = Rows - wp->w_winrow;
|
wp->w_height = Rows - wp->w_winrow;
|
||||||
|
|
||||||
|
wp->w_popup_last_changedtick = CHANGEDTICK(wp->w_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
/* popupwin.c */
|
/* popupwin.c */
|
||||||
|
void popup_adjust_position(win_T *wp);
|
||||||
void f_popup_create(typval_T *argvars, typval_T *rettv);
|
void f_popup_create(typval_T *argvars, typval_T *rettv);
|
||||||
int popup_any_visible(void);
|
int popup_any_visible(void);
|
||||||
void f_popup_close(typval_T *argvars, typval_T *rettv);
|
void f_popup_close(typval_T *argvars, typval_T *rettv);
|
||||||
void f_popup_hide(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 f_popup_show(typval_T *argvars, typval_T *rettv);
|
||||||
void popup_close(int id);
|
void popup_close(int id);
|
||||||
void popup_close_tabpage(tabpage_T *tp, int id);
|
void popup_close_tabpage(tabpage_T *tp, int id);
|
||||||
void close_all_popups(void);
|
void close_all_popups(void);
|
||||||
void ex_popupclear(exarg_T *eap);
|
void ex_popupclear(exarg_T *eap);
|
||||||
void f_popup_move(typval_T *argvars, typval_T *rettv);
|
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: set ft=c : */
|
||||||
|
22
src/screen.c
22
src/screen.c
@ -1030,6 +1030,12 @@ update_popups(void)
|
|||||||
|
|
||||||
if (lowest_wp == NULL)
|
if (lowest_wp == NULL)
|
||||||
break;
|
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);
|
win_update(lowest_wp);
|
||||||
lowest_wp->w_popup_flags |= POPF_REDRAWN;
|
lowest_wp->w_popup_flags |= POPF_REDRAWN;
|
||||||
}
|
}
|
||||||
@ -2119,6 +2125,9 @@ win_update(win_T *wp)
|
|||||||
&& wp->w_lines[idx].wl_lnum == lnum
|
&& wp->w_lines[idx].wl_lnum == lnum
|
||||||
&& lnum > wp->w_topline
|
&& lnum > wp->w_topline
|
||||||
&& !(dy_flags & (DY_LASTLINE | DY_TRUNCATE))
|
&& !(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
|
&& srow + wp->w_lines[idx].wl_size > wp->w_height
|
||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
&& diff_check_fill(wp, lnum) == 0
|
&& diff_check_fill(wp, lnum) == 0
|
||||||
@ -2273,6 +2282,13 @@ win_update(win_T *wp)
|
|||||||
wp->w_botline = lnum;
|
wp->w_botline = lnum;
|
||||||
wp->w_filler_rows = wp->w_height - srow;
|
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
|
#endif
|
||||||
else if (dy_flags & DY_TRUNCATE) /* 'display' has "truncate" */
|
else if (dy_flags & DY_TRUNCATE) /* 'display' has "truncate" */
|
||||||
{
|
{
|
||||||
@ -2334,7 +2350,11 @@ win_update(win_T *wp)
|
|||||||
|
|
||||||
// Make sure the rest of the screen is blank
|
// Make sure the rest of the screen is blank
|
||||||
// put '~'s on rows that aren't part of the file.
|
// put '~'s on rows that aren't part of the file.
|
||||||
win_draw_end(wp, '~', ' ', FALSE, row, wp->w_height, HLF_EOB);
|
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
|
#ifdef SYN_TIME_LIMIT
|
||||||
|
@ -2881,6 +2881,8 @@ struct window_S
|
|||||||
int w_maxwidth; // "maxwidth" for popup window
|
int w_maxwidth; // "maxwidth" for popup window
|
||||||
int w_wantline; // "line" for popup window
|
int w_wantline; // "line" for popup window
|
||||||
int w_wantcol; // "col" 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)
|
# if defined(FEAT_TIMERS)
|
||||||
timer_T *w_popup_timer; // timer for closing popup window
|
timer_T *w_popup_timer; // timer for closing popup window
|
||||||
# endif
|
# endif
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|~| @73
|
|~| @73
|
||||||
|~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @5| +0#4040ff13#ffffff0@51
|
|~| @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|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
|
|~| @6| +0&#ffd7ff255@14| +0&#ffffff0@51
|
||||||
|~| @73
|
|~| @73
|
||||||
|~| @73
|
|~| @73
|
||||||
|~| @73
|
|~| @73
|
||||||
|
10
src/testdir/dumps/Test_popupwin_06.dump
Normal file
10
src/testdir/dumps/Test_popupwin_06.dump
Normal file
@ -0,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|
|
@ -41,11 +41,16 @@ func Test_simple_popup()
|
|||||||
call term_sendkeys(buf, ":quit!\<CR>")
|
call term_sendkeys(buf, ":quit!\<CR>")
|
||||||
call VerifyScreenDump(buf, 'Test_popupwin_04', {})
|
call VerifyScreenDump(buf, 'Test_popupwin_04', {})
|
||||||
|
|
||||||
" resize popup
|
" 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, ":call popup_move(popupwin, {'minwidth': 15, 'maxwidth': 25, 'minheight': 3, 'maxheight': 5})\<CR>")
|
||||||
call term_sendkeys(buf, ":redraw\<CR>")
|
call term_sendkeys(buf, ":redraw\<CR>")
|
||||||
call VerifyScreenDump(buf, 'Test_popupwin_05', {})
|
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
|
" clean up
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
call delete('XtestPopup')
|
call delete('XtestPopup')
|
||||||
|
@ -767,6 +767,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1421,
|
||||||
/**/
|
/**/
|
||||||
1420,
|
1420,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user