mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 8.1.1945: popup window "firstline" cannot be reset
Problem: Popup window "firstline" cannot be reset. Solution: Allow for setting "firstline" to zero. Fix that the text jumps to the top when using win_execute(). (closes #4876)
This commit is contained in:
@@ -610,8 +610,8 @@ apply_general_options(win_T *wp, dict_T *dict)
|
|||||||
di = dict_find(dict, (char_u *)"firstline", -1);
|
di = dict_find(dict, (char_u *)"firstline", -1);
|
||||||
if (di != NULL)
|
if (di != NULL)
|
||||||
wp->w_firstline = dict_get_number(dict, (char_u *)"firstline");
|
wp->w_firstline = dict_get_number(dict, (char_u *)"firstline");
|
||||||
if (wp->w_firstline < 1)
|
if (wp->w_firstline < 0)
|
||||||
wp->w_firstline = 1;
|
wp->w_firstline = 0;
|
||||||
|
|
||||||
di = dict_find(dict, (char_u *)"scrollbar", -1);
|
di = dict_find(dict, (char_u *)"scrollbar", -1);
|
||||||
if (di != NULL)
|
if (di != NULL)
|
||||||
@@ -3192,8 +3192,17 @@ update_popups(void (*win_update)(win_T *wp))
|
|||||||
|
|
||||||
// Draw the popup text, unless it's off screen.
|
// Draw the popup text, unless it's off screen.
|
||||||
if (wp->w_winrow < screen_Rows && wp->w_wincol < screen_Columns)
|
if (wp->w_winrow < screen_Rows && wp->w_wincol < screen_Columns)
|
||||||
|
{
|
||||||
win_update(wp);
|
win_update(wp);
|
||||||
|
|
||||||
|
// move the cursor into the visible lines, otherwise executing
|
||||||
|
// commands with win_execute() may cause the text to jump.
|
||||||
|
if (wp->w_cursor.lnum < wp->w_topline)
|
||||||
|
wp->w_cursor.lnum = wp->w_topline;
|
||||||
|
else if (wp->w_cursor.lnum >= wp->w_botline)
|
||||||
|
wp->w_cursor.lnum = wp->w_botline - 1;
|
||||||
|
}
|
||||||
|
|
||||||
wp->w_winrow -= top_off;
|
wp->w_winrow -= top_off;
|
||||||
wp->w_wincol -= left_extra;
|
wp->w_wincol -= left_extra;
|
||||||
|
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
>1+0&#ffffff0| @73
|
>1+0&#ffffff0| @73
|
||||||
|2| @73
|
|2| @73
|
||||||
|3| @73
|
|3| @73
|
||||||
|4| @31|o+0#0000001#ffd7ff255|n|e| @4| +0#0000000#4040ff13| +0&#ffffff0@32
|
|4| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#ff404010| +0&#ffffff0@32
|
||||||
|5| @31|t+0#0000001#ffd7ff255|w|o| @4| +0#0000000#4040ff13| +0&#ffffff0@32
|
|5| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#4040ff13| +0&#ffffff0@32
|
||||||
|6| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#ff404010| +0&#ffffff0@32
|
|6| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#4040ff13| +0&#ffffff0@32
|
||||||
|7| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#ff404010| +0&#ffffff0@32
|
|7| @31|s+0#0000001#ffd7ff255|e|v|e|n| @2| +0#0000000#ff404010| +0&#ffffff0@32
|
||||||
|8| @73
|
|8| @73
|
||||||
|9| @73
|
|9| @73
|
||||||
|:|c|a|l@1| |S|c|r|o|l@1|U|p|(|)| @40|1|,|1| @10|T|o|p|
|
|:|c|a|l@1| |S|c|r|o|l@1|U|p|(|)| @40|1|,|1| @10|T|o|p|
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
>1+0&#ffffff0| @73
|
>1+0&#ffffff0| @73
|
||||||
|2| @73
|
|2| @73
|
||||||
|3| @73
|
|3| @73
|
||||||
|4| @31|t+0#0000001#ffd7ff255|h|r|e@1| @2| +0#0000000#ff404010| +0&#ffffff0@32
|
|4| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#ff404010| +0&#ffffff0@32
|
||||||
|5| @31|f+0#0000001#ffd7ff255|o|u|r| @3| +0#0000000#4040ff13| +0&#ffffff0@32
|
|5| @31|s+0#0000001#ffd7ff255|e|v|e|n| @2| +0#0000000#ff404010| +0&#ffffff0@32
|
||||||
|6| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#4040ff13| +0&#ffffff0@32
|
|6| @31|e+0#0000001#ffd7ff255|i|g|h|t| @2| +0#0000000#4040ff13| +0&#ffffff0@32
|
||||||
|7| @31|s+0#0000001#ffd7ff255|i|x| @4| +0#0000000#ff404010| +0&#ffffff0@32
|
|7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#4040ff13| +0&#ffffff0@32
|
||||||
|8| @73
|
|8| @73
|
||||||
|9| @73
|
|9| @73
|
||||||
|:|c|a|l@1| |S|c|r|o|l@1|D|o|w|n|(|)| @38|1|,|1| @10|T|o|p|
|
|:|c|a|l@1| |S|c|r|o|l@1|D|o|w|n|(|)| @38|1|,|1| @10|T|o|p|
|
||||||
|
@@ -333,6 +333,36 @@ func Test_popup_firstline()
|
|||||||
call assert_equal(3, popup_getoptions(winid).firstline)
|
call assert_equal(3, popup_getoptions(winid).firstline)
|
||||||
call popup_setoptions(winid, #{firstline: 1})
|
call popup_setoptions(winid, #{firstline: 1})
|
||||||
call assert_equal(1, popup_getoptions(winid).firstline)
|
call assert_equal(1, popup_getoptions(winid).firstline)
|
||||||
|
call popup_close(winid)
|
||||||
|
|
||||||
|
let winid = popup_create(['xxx']->repeat(50), #{
|
||||||
|
\ maxheight: 3,
|
||||||
|
\ firstline: 11,
|
||||||
|
\ })
|
||||||
|
redraw
|
||||||
|
call assert_equal(11, popup_getoptions(winid).firstline)
|
||||||
|
call assert_equal(11, popup_getpos(winid).firstline)
|
||||||
|
|
||||||
|
" Normal command changes what is displayed but not "firstline"
|
||||||
|
call win_execute(winid, "normal! \<c-y>")
|
||||||
|
call assert_equal(11, popup_getoptions(winid).firstline)
|
||||||
|
call assert_equal(10, popup_getpos(winid).firstline)
|
||||||
|
|
||||||
|
" Making some property change applies "firstline" again
|
||||||
|
call popup_setoptions(winid, #{line: 4})
|
||||||
|
call assert_equal(11, popup_getoptions(winid).firstline)
|
||||||
|
call assert_equal(11, popup_getpos(winid).firstline)
|
||||||
|
|
||||||
|
" Remove "firstline" property and scroll
|
||||||
|
call popup_setoptions(winid, #{firstline: 0})
|
||||||
|
call win_execute(winid, "normal! \<c-y>")
|
||||||
|
call assert_equal(0, popup_getoptions(winid).firstline)
|
||||||
|
call assert_equal(10, popup_getpos(winid).firstline)
|
||||||
|
|
||||||
|
" Making some property change has no side effect
|
||||||
|
call popup_setoptions(winid, #{line: 3})
|
||||||
|
call assert_equal(0, popup_getoptions(winid).firstline)
|
||||||
|
call assert_equal(10, popup_getpos(winid).firstline)
|
||||||
|
|
||||||
call popup_close(winid)
|
call popup_close(winid)
|
||||||
endfunc
|
endfunc
|
||||||
@@ -1678,7 +1708,7 @@ func Test_popup_scrollbar()
|
|||||||
call term_sendkeys(buf, ":\<CR>")
|
call term_sendkeys(buf, ":\<CR>")
|
||||||
call VerifyScreenDump(buf, 'Test_popupwin_scroll_4', {})
|
call VerifyScreenDump(buf, 'Test_popupwin_scroll_4', {})
|
||||||
|
|
||||||
call term_sendkeys(buf, ":call popup_setoptions(winid, #{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb'})\<CR>")
|
call term_sendkeys(buf, ":call popup_setoptions(winid, #{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb', firstline: 5})\<CR>")
|
||||||
call term_sendkeys(buf, ":call ScrollUp()\<CR>")
|
call term_sendkeys(buf, ":call ScrollUp()\<CR>")
|
||||||
call VerifyScreenDump(buf, 'Test_popupwin_scroll_5', {})
|
call VerifyScreenDump(buf, 'Test_popupwin_scroll_5', {})
|
||||||
|
|
||||||
|
@@ -761,6 +761,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 */
|
||||||
|
/**/
|
||||||
|
1945,
|
||||||
/**/
|
/**/
|
||||||
1944,
|
1944,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user