patch 9.1.1306: completion menu rendering can be improved
Commit:
https://github.com/vim/vim/commit/32f2bb6e1e672f52d736579d9752473b14a5744d
Author: glepnir <[email protected]>
Date: Tue Apr 15 19:06:58 2025 +0200
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 <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/popupmenu.c b/src/popupmenu.c
index 07c99f052..38ab24bce 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 7bd2bb6b7..166c76da6 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,
/**/
--
--
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 visit
https://groups.google.com/d/msgid/vim_dev/E1u4jsG-004rRG-W0%40256bit.org.