1
0
forked from aniani/vim

patch 8.1.2164: stuck when using "j" in a popupwin with popup_filter_menu

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)
This commit is contained in:
Bram Moolenaar
2019-10-16 22:17:07 +02:00
parent b2fe1d676f
commit 7b3d939667
5 changed files with 64 additions and 1 deletions

View File

@@ -535,7 +535,7 @@ check_highlight(dict_T *dict, char *name, char_u **pval)
}
/*
* Scroll to show the line with the cursor. This assumes lines don't wrap.
* Scroll to show the line with the cursor.
*/
static void
popup_show_curline(win_T *wp)
@@ -550,6 +550,11 @@ popup_show_curline(win_T *wp)
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,6 +1046,7 @@ popup_adjust_position(win_T *wp)
linenr_T lnum;
int wrapped = 0;
int maxwidth;
int used_maxwidth = FALSE;
int maxspace;
int center_vert = FALSE;
int center_hor = FALSE;
@@ -1208,6 +1214,7 @@ popup_adjust_position(win_T *wp)
++wrapped;
len -= maxwidth;
wp->w_width = maxwidth;
used_maxwidth = TRUE;
}
}
else if (len > maxwidth
@@ -1259,6 +1266,8 @@ popup_adjust_position(win_T *wp)
{
++right_extra;
++extra_width;
if (used_maxwidth)
maxwidth -= 2; // try to show the scrollbar
}
minwidth = wp->w_minwidth;