changeset 18512:e855058e0c23 v8.1.2250

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 <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Sun, 03 Nov 2019 22:30:03 +0100
parents 96e8a23cf3e8
children 5a62159b9a48
files runtime/doc/popup.txt src/popupwin.c src/testdir/test_popupwin.vim src/version.c
diffstat 4 files changed, 28 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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);
 
--- 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! \<C-D>")
+  call assert_equal(5, popup_getpos(winid).firstline)
+  call win_execute(winid, "normal! \<C-D>")
+  call assert_equal(9, popup_getpos(winid).firstline)
+  call win_execute(winid, "normal! \<C-U>")
+  call assert_equal(5, popup_getpos(winid).firstline)
+
+  call win_execute(winid, "normal! \<C-F>")
+  call assert_equal(11, popup_getpos(winid).firstline)
+  call win_execute(winid, "normal! \<C-B>")
+  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,
--- 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,