patch 9.1.1147: preview-window does not scroll correctly Commit: https://github.com/vim/vim/commit/12b1eb58abca1eabc4833ad855c8a31d8b40981e Author: Girish Palya <giris...@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 <giris...@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, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tmfK3-00Atnj-Ho%40256bit.org.