From 09dd2bb3364cc8fb5a8f2507bc2f4ceba481db3d Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 14 Dec 2019 18:42:15 +0100 Subject: [PATCH] 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 #5353) --- src/move.c | 2 +- src/popupmenu.c | 1 + src/proto/move.pro | 1 + .../dumps/Test_pum_with_folds_two_tabs.dump | 10 ++++++++ src/testdir/test_ins_complete.vim | 24 +++++++++++++++++++ src/version.c | 2 ++ 6 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/testdir/dumps/Test_pum_with_folds_two_tabs.dump diff --git a/src/move.c b/src/move.c index 8e53d8bcb..6121e3e2d 100644 --- 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 index f908bfca4..ab2ce555b 100644 --- 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 index d05eb1753..8efecb9f2 100644 --- 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 index 000000000..2414cdc8e --- /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 index e48a72c5d..ad6294480 100644 --- 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 index 2ab2e074f..6c31de8c9 100644 --- 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 */ +/**/ + 7, /**/ 6, /**/ -- 2.40.0