Mercurial > vim
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,