# HG changeset patch # User Bram Moolenaar # Date 1572816603 -3600 # Node ID e855058e0c23f2d75e1bff70834ed186d058447a # Parent 96e8a23cf3e84566a6dd6cb5c98455e4706a7080 patch 8.1.2250: CTRL-U and CTRL-D don't work in popup window Commit: https://github.com/vim/vim/commit/30efcf3d26bd14af71cd306c4c5f9e789a7130c9 Author: Bram Moolenaar Date: Sun Nov 3 22:29:38 2019 +0100 patch 8.1.2250: CTRL-U and CTRL-D don't work in popup window Problem: CTRL-U and CTRL-D don't work in popup window. Solution: Initialize 'scroll'. Add "lastline" in popup_getpos(). (closes #5170) diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt --- a/runtime/doc/popup.txt +++ b/runtime/doc/popup.txt @@ -1,4 +1,4 @@ -*popup.txt* For Vim version 8.1. Last change: 2019 Oct 20 +*popup.txt* For Vim version 8.1. Last change: 2019 Nov 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -362,6 +362,7 @@ popup_getpos({id}) *popup_getpos()* core_height height of the text box in screen cells firstline line of the buffer at top (1 unless scrolled) (not the value of the "firstline" property) + lastline line of the buffer at the bottom scrollbar non-zero if a scrollbar is displayed visible one if the popup is displayed, zero if hidden Note that these are the actual screen positions. They differ diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -1373,6 +1373,8 @@ popup_adjust_position(win_T *wp) wp->w_height = wp->w_maxheight; if (wp->w_height > Rows - wp->w_winrow) wp->w_height = Rows - wp->w_winrow; + if (wp->w_height != org_height) + win_comp_scroll(wp); if (center_vert) { @@ -2500,6 +2502,7 @@ f_popup_getpos(typval_T *argvars, typval dict_add_number(dict, "scrollbar", wp->w_has_scrollbar); dict_add_number(dict, "firstline", wp->w_topline); + dict_add_number(dict, "lastline", wp->w_botline - 1); dict_add_number(dict, "visible", win_valid(wp) && (wp->w_popup_flags & POPF_HIDDEN) == 0); diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -142,6 +142,7 @@ func Test_popup_with_border_and_padding( \ height: 3, \ core_height: 1, \ firstline: 1, + \ lastline: 1, \ scrollbar: 0, \ visible: 1} let winid = popup_create('hello border', #{line: 2, col: 3, border: []})", @@ -186,6 +187,7 @@ func Test_popup_with_border_and_padding( \ scrollbar: 0, \ core_height: 1, \ firstline: 1, + \ lastline: 1, \ visible: 1}, popup_getpos(winid)) call popup_clear() @@ -385,6 +387,24 @@ func Test_popup_firstline() call assert_equal(0, popup_getoptions(winid).firstline) call assert_equal(10, popup_getpos(winid).firstline) + " CTRL-D scrolls down half a page + let winid = popup_create(['xxx']->repeat(50), #{ + \ maxheight: 8, + \ }) + redraw + call assert_equal(1, popup_getpos(winid).firstline) + call win_execute(winid, "normal! \") + call assert_equal(5, popup_getpos(winid).firstline) + call win_execute(winid, "normal! \") + call assert_equal(9, popup_getpos(winid).firstline) + call win_execute(winid, "normal! \") + call assert_equal(5, popup_getpos(winid).firstline) + + call win_execute(winid, "normal! \") + call assert_equal(11, popup_getpos(winid).firstline) + call win_execute(winid, "normal! \") + call assert_equal(5, popup_getpos(winid).firstline) + call popup_close(winid) endfunc @@ -1795,6 +1815,7 @@ func Test_popup_scrollbar() \ minheight: 4, \ maxheight: 4, \ firstline: 1, + \ lastline: 4, \ wrap: v:true, \ scrollbar: v:true, \ mapping: v:false, diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2250, +/**/ 2249, /**/ 2248,