Fix how popup height is calculated to take embedded newlines into account.

This commit is contained in:
nicm
2020-03-28 09:39:44 +00:00
parent e0b17e796b
commit 4346098e97
3 changed files with 23 additions and 4 deletions

20
popup.c
View File

@ -349,6 +349,22 @@ popup_job_complete_cb(struct job *job)
server_client_clear_overlay(pd->c);
}
u_int
popup_height(u_int nlines, const char **lines)
{
char *copy, *next, *loop;
u_int i, height = 0;
for (i = 0; i < nlines; i++) {
copy = next = xstrdup(lines[i]);
while ((loop = strsep(&next, "\n")) != NULL)
height++;
free(copy);
}
return (height);
}
u_int
popup_width(struct cmdq_item *item, u_int nlines, const char **lines,
struct client *c, struct cmd_find_state *fs)
@ -372,8 +388,8 @@ popup_width(struct cmdq_item *item, u_int nlines, const char **lines,
width = tmpwidth;
free(tmp);
}
free(copy);
}
free(copy);
format_free(ft);
return (width);
@ -394,8 +410,6 @@ popup_display(int flags, struct cmdq_item *item, u_int px, u_int py, u_int sx,
return (-1);
if (c->tty.sx < sx || c->tty.sy < sy)
return (-1);
if (nlines > sy - 2)
nlines = sy - 2;
pd = xcalloc(1, sizeof *pd);
pd->item = item;