# HG changeset patch # User Bram Moolenaar # Date 1576345504 -3600 # Node ID fb2d26bc8ca159c7eb29ceb1a9354ac1deb366fd # Parent 84747442f5e20333b29c2373ba8e0e7bdbe106d9 patch 8.2.0007: popup menu positioned wrong with folding in two tabs Commit: https://github.com/vim/vim/commit/09dd2bb3364cc8fb5a8f2507bc2f4ceba481db3d Author: Bram Moolenaar Date: Sat Dec 14 18:42:15 2019 +0100 patch 8.2.0007: popup menu positioned wrong with folding in two tabs Problem: Popup menu positioned wrong with folding in two tabs. Solution: Update the cursor line height. (closes https://github.com/vim/vim/issues/5353) diff --git a/src/move.c b/src/move.c --- a/src/move.c +++ b/src/move.c @@ -816,7 +816,7 @@ validate_virtcol_win(win_T *wp) /* * Validate curwin->w_cline_height only. */ - static void + void validate_cheight(void) { check_cursor_moved(curwin); diff --git a/src/popupmenu.c b/src/popupmenu.c --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -180,6 +180,7 @@ pum_display( // pum below "pum_win_row" // Leave two lines of context if possible + validate_cheight(); if (curwin->w_cline_row + curwin->w_cline_height - curwin->w_wrow >= 3) context_lines = 3; diff --git a/src/proto/move.pro b/src/proto/move.pro --- a/src/proto/move.pro +++ b/src/proto/move.pro @@ -21,6 +21,7 @@ void validate_cursor(void); void validate_cline_row(void); void validate_virtcol(void); void validate_virtcol_win(win_T *wp); +void validate_cheight(void); void validate_cursor_col(void); int win_col_off(win_T *wp); int curwin_col_off(void); diff --git a/src/testdir/dumps/Test_pum_with_folds_two_tabs.dump b/src/testdir/dumps/Test_pum_with_folds_two_tabs.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_pum_with_folds_two_tabs.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|+| |[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|+| |[|N|o| |N|a|m|e|]| | +1&&@47|X+8#0000001#e0e0e08 +|"+0#0000000#ffffff0| |x| |{@2|1| @66 +|"| |a|0> |s|o|m|e| |t|e|x|t| @60 +|"| +0#0000001#e0e0e08|a|0| @12| +0#0000000#0000001| +0&#ffffff0@56 +|"| +0#0000001#ffd7ff255|a|1| @12| +0#0000000#0000001| +0&#ffffff0@56 +|"| +0#0000001#ffd7ff255|a|2| @12| +0#0000000#0000001| +0&#ffffff0@56 +|"| +0#0000001#ffd7ff255|a|3| @12| +0#0000000#a8a8a8255| +0&#ffffff0@56 +|"| +0#0000001#ffd7ff255|a|4| @12| +0#0000000#a8a8a8255| +0&#ffffff0@56 +|"| +0#0000001#ffd7ff255|a|5| @12| +0#0000000#a8a8a8255| +0&#ffffff0@56 +|-+2&&@1| |K|e|y|w|o|r|d| |c|o|m|p|l|e|t|i|o|n| |(|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |1|0| +0#0000000&@32 diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -1,3 +1,4 @@ +source screendump.vim source check.vim " Test for insert expansion @@ -380,3 +381,26 @@ func Test_ins_completeslash() set completeslash= endfunc +func Test_pum_with_folds_two_tabs() + CheckScreendump + + let lines =<< trim END + set fdm=marker + call setline(1, ['" x {{{1', '" a some text']) + call setline(3, range(&lines)->map({_, val -> '" a' .. val})) + norm! zm + tab sp + call feedkeys('2Gzv', 'xt') + call feedkeys("0fa", 'xt') + END + + call writefile(lines, 'Xpumscript') + let buf = RunVimInTerminal('-S Xpumscript', #{rows: 10}) + call term_wait(buf, 100) + call term_sendkeys(buf, "a\") + call VerifyScreenDump(buf, 'Test_pum_with_folds_two_tabs', {}) + + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) + call delete('Xpumscript') +endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 7, +/**/ 6, /**/ 5,