summaryrefslogtreecommitdiffstats
path: root/popup.c
diff options
context:
space:
mode:
authornicm <nicm>2020-03-28 09:39:44 +0000
committernicm <nicm>2020-03-28 09:39:44 +0000
commit4346098e977d8fb3bde0783e9858f3def7bc01a5 (patch)
treeb5164226ed816a4a1870a06ea09c6f597d22771f /popup.c
parente0b17e796b52bfad7d867bc876a9826bf5761be4 (diff)
Fix how popup height is calculated to take embedded newlines into account.
Diffstat (limited to 'popup.c')
-rw-r--r--popup.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/popup.c b/popup.c
index 16b7b260..f4afbd85 100644
--- a/popup.c
+++ b/popup.c
@@ -350,6 +350,22 @@ popup_job_complete_cb(struct job *job)
}
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;