From 32f2bb6e1e672f52d736579d9752473b14a5744d Mon Sep 17 00:00:00 2001 From: glepnir Date: Tue, 15 Apr 2025 19:06:58 +0200 Subject: [PATCH] patch 9.1.1306: completion menu rendering can be improved Problem: Parts of the popup menu were rendered twice when the popup was at maximum width because the truncation flag was being set too liberally. Solution: Make the truncation condition more precise by only setting it when there's exactly one character of space remaining (glepnir). closes: #17108 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- src/popupmenu.c | 22 +++++++++------------- src/version.c | 2 ++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/popupmenu.c b/src/popupmenu.c index 07c99f052b..38ab24bcec 100644 --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -691,6 +691,10 @@ pum_redraw(void) width = 0; s = NULL; p = pum_get_item(idx, item_type); + + if (j + 1 < 3) + next_isempty = pum_get_item(idx, order[j + 1]) == NULL; + if (p != NULL) for ( ; ; MB_PTR_ADV(p)) { @@ -731,15 +735,13 @@ pum_redraw(void) int cells; int over_cell = 0; int truncated = FALSE; + int pad = next_isempty ? 0 : 2; cells = mb_string2cells(rt , -1); truncated = pum_width == p_pmw - && pum_width - totwidth < cells; - - if (pum_width == p_pmw && !truncated - && (j + 1 < 3 && pum_get_item(idx, order[j + 1]) != NULL)) - truncated = TRUE; + && pum_width - totwidth < cells + pad; + // only draw the text that fits if (cells > pum_width) { do @@ -816,12 +818,9 @@ pum_redraw(void) int cells = (*mb_string2cells)(st, size); char_u *st_end = NULL; int over_cell = 0; + int pad = next_isempty ? 0 : 2; int truncated = pum_width == p_pmw - && pum_width - totwidth < cells; - - if (pum_width == p_pmw && !truncated - && (j + 1 < 3 && pum_get_item(idx, order[j + 1]) != NULL)) - truncated = TRUE; + && pum_width - totwidth < cells + pad; // only draw the text that fits while (size > 0 @@ -910,9 +909,6 @@ pum_redraw(void) else n = order[j] == CPT_ABBR ? 1 : 0; - if (j + 1 < 3) - next_isempty = pum_get_item(idx, order[j + 1]) == NULL; - // Stop when there is nothing more to display. if (j == 2 || (next_isempty && (j == 1 || (j == 0 diff --git a/src/version.c b/src/version.c index 7bd2bb6b7b..166c76da62 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1306, /**/ 1305, /**/