From 4346098e977d8fb3bde0783e9858f3def7bc01a5 Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 28 Mar 2020 09:39:44 +0000 Subject: Fix how popup height is calculated to take embedded newlines into account. --- popup.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'popup.c') diff --git a/popup.c b/popup.c index 16b7b260..f4afbd85 100644 --- a/popup.c +++ b/popup.c @@ -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; -- cgit