Patch 9.0.0638
Problem: Popup menu highlight wrong on top of preview popup. (Yegappan
Lakshmanan)
Solution: Also check for the popup menu in screen_line().
Files: src/screen.c, src/testdir/test_popupwin.vim,
src/testdir/dumps/Test_pum_preview_1.dump,
src/testdir/dumps/Test_pum_preview_2.dump,
src/testdir/dumps/Test_pum_preview_3.dump,
src/testdir/dumps/Test_pum_preview_4.dump
*** ../vim-9.0.0637/src/screen.c 2022-10-01 19:43:48.610494062 +0100
--- src/screen.c 2022-10-02 14:23:46.648022499 +0100
***************
*** 420,425 ****
--- 420,446 ----
}
/*
+ * Return TRUE if the character at "row" / "col" is under the popup menu and
it
+ * will be redrawn soon or it is under another popup.
+ */
+ static int
+ skip_for_popup(int row, int col)
+ {
+ // Popup windows with zindex higher than POPUPMENU_ZINDEX go on top.
+ if (pum_under_menu(row, col, TRUE)
+ #ifdef FEAT_PROP_POPUP
+ && screen_zindex <= POPUPMENU_ZINDEX
+ #endif
+ )
+ return TRUE;
+ #ifdef FEAT_PROP_POPUP
+ if (blocked_by_popup(row, col))
+ return TRUE;
+ #endif
+ return FALSE;
+ }
+
+ /*
* Move one "cooked" screen line to the screen, but only the characters that
* have actually changed. Handle insert/delete character.
* "coloff" gives the first column on the screen for this line.
***************
*** 538,547 ****
redraw_this = TRUE;
}
#endif
! #ifdef FEAT_PROP_POPUP
! if (blocked_by_popup(row, col + coloff))
redraw_this = FALSE;
! #endif
if (redraw_this)
{
/*
--- 559,568 ----
redraw_this = TRUE;
}
#endif
! // Do not redraw if under the popup menu.
! if (redraw_this && skip_for_popup(row, col + coloff))
redraw_this = FALSE;
!
if (redraw_this)
{
/*
***************
*** 669,683 ****
}
#endif
ScreenAttrs[off_to] = ScreenAttrs[off_from];
- ScreenCols[off_to] = ScreenCols[off_from];
// For simplicity set the attributes of second half of a
// double-wide character equal to the first half.
if (char_cells == 2)
- {
ScreenAttrs[off_to + 1] = ScreenAttrs[off_from];
- ScreenCols[off_to + 1] = ScreenCols[off_from + 1];
- }
if (enc_dbcs != 0 && char_cells == 2)
screen_char_2(off_to, row, col + coloff);
--- 690,700 ----
***************
*** 2165,2181 ****
return;
// Skip if under the popup menu.
! // Popup windows with zindex higher than POPUPMENU_ZINDEX go on top.
! if (pum_under_menu(row, col, TRUE)
! #ifdef FEAT_PROP_POPUP
! && screen_zindex <= POPUPMENU_ZINDEX
! #endif
! )
return;
- #ifdef FEAT_PROP_POPUP
- if (blocked_by_popup(row, col))
- return;
- #endif
// Outputting a character in the last cell on the screen may scroll the
// screen up. Only do it when the "xn" termcap property is set, otherwise
--- 2182,2189 ----
return;
// Skip if under the popup menu.
! if (skip_for_popup(row, col))
return;
// Outputting a character in the last cell on the screen may scroll the
// screen up. Only do it when the "xn" termcap property is set, otherwise
*** ../vim-9.0.0637/src/testdir/test_popupwin.vim 2022-09-30
21:57:07.547153409 +0100
--- src/testdir/test_popupwin.vim 2022-10-02 14:21:28.256944265 +0100
***************
*** 3362,3367 ****
--- 3362,3406 ----
call StopVimInTerminal(buf)
endfunc
+ func Test_previewpopup_pum()
+ CheckScreendump
+ CheckFeature quickfix
+
+ let lines =<< trim END
+ let a = 3
+ let b = 1
+ echo a
+ echo b
+ call system('echo hello')
+ " the end
+ END
+ call writefile(lines, 'XpreviewText.vim', 'D')
+
+ let lines =<< trim END
+ call setline(1, ['one', 'two', 'three', 'other', 'once', 'only', 'off'])
+ set previewpopup=height:6,width:40
+ pedit XpreviewText.vim
+ END
+ call writefile(lines, 'XtestPreviewPum', 'D')
+ let buf = RunVimInTerminal('-S XtestPreviewPum', #{rows: 12})
+
+ call term_sendkeys(buf, "A o\<C-N>")
+ call VerifyScreenDump(buf, 'Test_pum_preview_1', {})
+
+ call term_sendkeys(buf, "\<C-N>")
+ call VerifyScreenDump(buf, 'Test_pum_preview_2', {})
+
+ call term_sendkeys(buf, "\<C-N>")
+ call VerifyScreenDump(buf, 'Test_pum_preview_3', {})
+
+ call term_sendkeys(buf, "\<C-N>")
+ call VerifyScreenDump(buf, 'Test_pum_preview_4', {})
+
+ call term_sendkeys(buf, "\<Esc>")
+ call StopVimInTerminal(buf)
+ endfunc
+
+
func Get_popupmenu_lines()
let lines =<< trim END
set completeopt+=preview,popup
*** ../vim-9.0.0637/src/testdir/dumps/Test_pum_preview_1.dump 2022-10-02
14:27:51.018620515 +0100
--- src/testdir/dumps/Test_pum_preview_1.dump 2022-10-02 14:22:15.604616108
+0100
***************
*** 0 ****
--- 1,12 ----
+ |o+0&#ffffff0|n|e| |o|t|h|e|r> @65
+ |╔+0#0000001#ffd7ff255| |X| +0&#e0e0e08|o|t|h|e|r| @9|═+0&#ffd7ff255@21|X|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001&|o|n|c|e| @32|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001&|o|n|l|y| @32|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001&|o|f@1| @33|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001&|o|n|e| @33|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|c+0#af5f00255&|a|l@1|
+0#0000001&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|e|c|h|o|
|h|e|l@1|o|'|)+0#e000e06&| +0#0000001&@14|║| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|"+0#0000e05&| |t|h|e| |e|n|d| +0#0000001&@30|║|
+0#4040ff13#ffffff0@32
+ |╚+0#0000001#ffd7ff255|═@39|⇲| +0#4040ff13#ffffff0@32
+ |~| @73
+ |~| @73
+ |-+2#0000000&@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| |5| +0#0000000&@33
*** ../vim-9.0.0637/src/testdir/dumps/Test_pum_preview_2.dump 2022-10-02
14:27:51.022620494 +0100
--- src/testdir/dumps/Test_pum_preview_2.dump 2022-10-02 14:22:16.764608245
+0100
***************
*** 0 ****
--- 1,12 ----
+ |o+0&#ffffff0|n|e| |o|n|c|e> @66
+ |╔+0#0000001#ffd7ff255| |X| |o|t|h|e|r| @9|═@21|X| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001#e0e0e08|o|n|c|e| @10|
+0&#ffd7ff255@21|║| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001&|o|n|l|y| @32|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001&|o|f@1| @33|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001&|o|n|e| @33|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|c+0#af5f00255&|a|l@1|
+0#0000001&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|e|c|h|o|
|h|e|l@1|o|'|)+0#e000e06&| +0#0000001&@14|║| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|"+0#0000e05&| |t|h|e| |e|n|d| +0#0000001&@30|║|
+0#4040ff13#ffffff0@32
+ |╚+0#0000001#ffd7ff255|═@39|⇲| +0#4040ff13#ffffff0@32
+ |~| @73
+ |~| @73
+ |-+2#0000000&@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| |2| |o|f| |5| +0#0000000&@33
*** ../vim-9.0.0637/src/testdir/dumps/Test_pum_preview_3.dump 2022-10-02
14:27:51.026620472 +0100
--- src/testdir/dumps/Test_pum_preview_3.dump 2022-10-02 14:22:17.924600390
+0100
***************
*** 0 ****
--- 1,12 ----
+ |o+0&#ffffff0|n|e| |o|n|l|y> @66
+ |╔+0#0000001#ffd7ff255| |X| |o|t|h|e|r| @9|═@21|X| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001&|o|n|c|e| @32|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001#e0e0e08|o|n|l|y| @10|
+0&#ffd7ff255@21|║| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001&|o|f@1| @33|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001&|o|n|e| @33|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|c+0#af5f00255&|a|l@1|
+0#0000001&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|e|c|h|o|
|h|e|l@1|o|'|)+0#e000e06&| +0#0000001&@14|║| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|"+0#0000e05&| |t|h|e| |e|n|d| +0#0000001&@30|║|
+0#4040ff13#ffffff0@32
+ |╚+0#0000001#ffd7ff255|═@39|⇲| +0#4040ff13#ffffff0@32
+ |~| @73
+ |~| @73
+ |-+2#0000000&@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| |3| |o|f| |5| +0#0000000&@33
*** ../vim-9.0.0637/src/testdir/dumps/Test_pum_preview_4.dump 2022-10-02
14:27:51.030620451 +0100
--- src/testdir/dumps/Test_pum_preview_4.dump 2022-10-02 14:22:19.088592515
+0100
***************
*** 0 ****
--- 1,12 ----
+ |o+0&#ffffff0|n|e| |o|f@1> @67
+ |╔+0#0000001#ffd7ff255| |X| |o|t|h|e|r| @9|═@21|X| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001&|o|n|c|e| @32|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|l+0#af5f00255&|e| +0#0000001&|o|n|l|y| @32|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001#e0e0e08|o|f@1| @11|
+0&#ffd7ff255@21|║| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|e+0#af5f00255&|c| +0#0000001&|o|n|e| @33|║|
+0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|c+0#af5f00255&|a|l@1|
+0#0000001&|s+0#00e0e07&|y|s|t|e|m|(+0#e000e06&|'+0#e000002&|e|c|h|o|
|h|e|l@1|o|'|)+0#e000e06&| +0#0000001&@14|║| +0#0000000#ffffff0@32
+ |║+0#0000001#ffd7ff255|"+0#0000e05&| |t|h|e| |e|n|d| +0#0000001&@30|║|
+0#4040ff13#ffffff0@32
+ |╚+0#0000001#ffd7ff255|═@39|⇲| +0#4040ff13#ffffff0@32
+ |~| @73
+ |~| @73
+ |-+2#0000000&@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| |4| |o|f| |5| +0#0000000&@33
*** ../vim-9.0.0637/src/version.c 2022-10-02 12:58:31.509276685 +0100
--- src/version.c 2022-10-02 14:23:07.608271382 +0100
***************
*** 701,702 ****
--- 701,704 ----
{ /* Add new patch number below this line */
+ /**/
+ 638,
/**/
--
hundred-and-one symptoms of being an internet addict:
243. You unsuccessfully try to download a pizza from www.dominos.com.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20221002132910.9ECEC1C09A3%40moolenaar.net.