Commit: patch 9.1.1147: preview-window does not scroll correctly

3 views
Skip to first unread message

Christian Brabandt

unread,
Feb 24, 2025, 3:45:13 PM2/24/25
to vim...@googlegroups.com
patch 9.1.1147: preview-window does not scroll correctly

Commit: https://github.com/vim/vim/commit/12b1eb58abca1eabc4833ad855c8a31d8b40981e
Author: Girish Palya <giri...@gmail.com>
Date: Mon Feb 24 21:39:42 2025 +0100

patch 9.1.1147: preview-window does not scroll correctly

Problem: preview-window does not scroll correctly
Solution: init firstline = 0 for a preview window
(Girish Palya)

The 'info' window, which appears during insert-mode completion to display
additional information, was not scrolling properly when using commands like:
win_execute(popup_findinfo(), "normal! \<PageDown>")
This issue made it impossible to navigate through info window contents using
keyboard-based scrolling.
The fix correctly updates the w_firstline value of the popup window, ensuring
proper scrolling behavior. Mouse scrolling was already working as expected and
remains unaffected.

closes: #16703

Signed-off-by: Girish Palya <giri...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/popupmenu.c b/src/popupmenu.c
index d9ab997bf..44235efbd 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -1097,7 +1097,7 @@ pum_set_selected(int n, int repeat UNUSED)
if (pum_selected != prev_selected)
{
# ifdef FEAT_PROP_POPUP
- curwin->w_firstline = 1;
+ curwin->w_firstline = 0;
# endif
curwin->w_topline = 1;
}
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index c34f6426e..b302a3ee7 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -497,6 +497,52 @@ func Test_completefunc_info()
set completefunc&
endfunc

+func ScrollInfoWindowUserDefinedFn(findstart, query)
+ " User defined function (i_CTRL-X_CTRL-U)
+ if a:findstart
+ return col('.')
+ endif
+ let infostr = range(20)->mapnew({_, v -> string(v)})->join("
")
+ return [{'word': 'foo', 'info': infostr}, {'word': 'bar'}]
+endfunc
+
+func ScrollInfoWindowPageDown()
+ call win_execute(popup_findinfo(), "normal! \<PageDown>")
+ return ''
+endfunc
+
+func ScrollInfoWindowPageUp()
+ call win_execute(popup_findinfo(), "normal! \<PageUp>")
+ return ''
+endfunc
+
+func ScrollInfoWindowTest(mvmt, count, fline)
+ new
+ set completeopt=menuone,popup,noinsert,noselect
+ set completepopup=height:5
+ set completefunc=ScrollInfoWindowUserDefinedFn
+ let keyseq = "i\<C-X>\<C-U>\<C-N>"
+ for _ in range(a:count)
+ let keyseq .= (a:mvmt == "pageup" ? "\<C-R>\<C-R>=ScrollInfoWindowPageUp()\<CR>" :
+ \ "\<C-R>\<C-R>=ScrollInfoWindowPageDown()\<CR>")
+ endfor
+ let keyseq .= "\<C-R>\<C-R>=string(popup_getpos(popup_findinfo()))\<CR>\<ESC>"
+ call feedkeys(keyseq, "tx")
+ call assert_match('''firstline'': ' . a:fline, getline(1))
+ bwipe!
+ set completeopt&
+ set completepopup&
+ set completefunc&
+endfunc
+
+func Test_scroll_info_window()
+ call ScrollInfoWindowTest("", 0, 1)
+ call ScrollInfoWindowTest("pagedown", 1, 4)
+ call ScrollInfoWindowTest("pagedown", 2, 7)
+ call ScrollInfoWindowTest("pagedown", 3, 11)
+ call ScrollInfoWindowTest("pageup", 3, 1)
+endfunc
+
func CompleteInfoUserDefinedFn(findstart, query)
" User defined function (i_CTRL-X_CTRL-U)
if a:findstart
diff --git a/src/version.c b/src/version.c
index 1d362718b..d028159f6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1147,
/**/
1146,
/**/
Reply all
Reply to author
Forward
0 new messages