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.

Raspunde prin e-mail lui