patch 9.1.1398: completion: trunc does not follow Pmenu highlighting attributes

Problem:  When items are combined with user-defined highlight attributes
          (e.g., strikethrough), trunc inherits these attributes, making
          the text difficult to read.
Solution: trunc now uses the original Pmenu and PmenuSel highlight
          attributes (glepnir)

closes: #17340

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/popupmenu.c b/src/popupmenu.c
index d629049..6d91c33 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -589,14 +589,16 @@
 	int     width,
 	int     width_limit,
 	int     totwidth,
-	int     next_isempty)
+	int     next_isempty,
+	int	selected)
 {
-    char_u  *rt;
-    int     cells;
+    char_u  *rt = NULL;
+    int     cells = 0;
     int     over_cell = 0;
     int     truncated = FALSE;
     int     pad = next_isempty ? 0 : 2;
-    int     remaining;
+    int     remaining = 0;
+    int	    trunc_attr = highlight_attr[selected ? HLF_PSI : HLF_PNI];
     int	    truncrl = curwin->w_fill_chars.truncrl != NUL
 					? curwin->w_fill_chars.truncrl : '<';
 
@@ -656,7 +658,8 @@
 	width = cells + over_cell + 1;
 	rt = orig_rt;
 
-	screen_putchar(truncrl, row, col - width + 1 + TPL_LCOL(NULL), attr);
+	screen_putchar(truncrl, row,
+		col - width + 1 + TPL_LCOL(NULL), trunc_attr);
 
 	if (over_cell > 0)
 	    screen_fill(row, row + 1, col - width + 2 + TPL_LCOL(NULL),
@@ -691,15 +694,17 @@
 	int     width,        // width already calculated in outer loop
 	int     width_limit,
 	int     totwidth,
-	int     next_isempty)
+	int     next_isempty,
+	int	selected)
 {
-    int     size;
-    int     cells;
+    int     size = 0;
+    int     cells = 0;
     char_u  *st_end = NULL;
     int     over_cell = 0;
     int     pad = next_isempty ? 0 : 2;
-    int     truncated;
-    int     remaining;
+    int     truncated = FALSE;
+    int     remaining = 0;
+    int	    trunc_attr = highlight_attr[selected ? HLF_PSI : HLF_PNI];
     int	    trunc = curwin->w_fill_chars.trunc != NUL
 					    ? curwin->w_fill_chars.trunc : '>';
 
@@ -756,7 +761,8 @@
 	    screen_fill(row, row + 1, col + cells + TPL_LCOL(NULL),
 		    col + cells + over_cell + TPL_LCOL(NULL), ' ', ' ', attr);
 
-	screen_putchar(trunc, row, col + cells + over_cell + TPL_LCOL(NULL), attr);
+	screen_putchar(trunc, row,
+		col + cells + over_cell + TPL_LCOL(NULL), trunc_attr);
     }
 
     VIM_CLEAR(st);
@@ -785,6 +791,7 @@
     char_u  *p = pum_get_item(idx, item_type);
     int     width = 0;  // item width
     int     w;		// char width
+    int	    selected = idx == pum_selected;
 
     for ( ; ; MB_PTR_ADV(p))
     {
@@ -815,11 +822,11 @@
 #ifdef FEAT_RIGHTLEFT
 	if (pum_rl)
 	    col = pum_display_rtl_text(row, col, st, attr, attrs,
-		    width, pum_width, *totwidth_ptr, next_isempty);
+		    width, pum_width, *totwidth_ptr, next_isempty, selected);
 	else
 #endif
 	    col = pum_display_ltr_text(row, col, st, attr, attrs,
-		    width, pum_width, *totwidth_ptr, next_isempty);
+		    width, pum_width, *totwidth_ptr, next_isempty, selected);
 
 	if (attrs != NULL)
 	    VIM_CLEAR(attrs);