summaryrefslogtreecommitdiffstats
path: root/input.c
diff options
context:
space:
mode:
authornicm <nicm>2019-05-07 10:25:15 +0000
committernicm <nicm>2019-05-07 10:25:15 +0000
commit69440d19b783c72139f22c5c72b34b55d99e71de (patch)
treeac9803539b6091f3c666c471d76c2dd8e30fbb86 /input.c
parent45ae9a8e3520d73c795bb993ced4fe43d06ad6f1 (diff)
Do not use evbuffer_add_buffer because it is destructive and doesn't
work in newer libevent.
Diffstat (limited to 'input.c')
-rw-r--r--input.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/input.c b/input.c
index 20272a62..285de2d2 100644
--- a/input.c
+++ b/input.c
@@ -874,18 +874,27 @@ input_set_state(struct window_pane *wp, const struct input_transition *itr)
void
input_parse(struct window_pane *wp)
{
+ struct evbuffer *evb = wp->event->input;
+
+ input_parse_buffer(wp, EVBUFFER_DATA(evb), EVBUFFER_LENGTH(evb));
+ evbuffer_drain(evb, EVBUFFER_LENGTH(evb));
+}
+
+/* Parse given input. */
+void
+input_parse_buffer(struct window_pane *wp, u_char *buf, size_t len)
+{
struct input_ctx *ictx = wp->ictx;
struct screen_write_ctx *sctx = &ictx->ctx;
const struct input_transition *itr;
- struct evbuffer *evb = wp->event->input;
- u_char *buf;
- size_t len, off;
+ size_t off = 0;
- if (EVBUFFER_LENGTH(evb) == 0)
+ if (len == 0)
return;
window_update_activity(wp->window);
wp->flags |= PANE_CHANGED;
+ notify_input(wp, buf, len);
/*
* Open the screen. Use NULL wp if there is a mode set as don't want to
@@ -897,12 +906,6 @@ input_parse(struct window_pane *wp)
screen_write_start(sctx, NULL, &wp->base);
ictx->wp = wp;
- buf = EVBUFFER_DATA(evb);
- len = EVBUFFER_LENGTH(evb);
- off = 0;
-
- notify_input(wp, evb);
-
log_debug("%s: %%%u %s, %zu bytes: %.*s", __func__, wp->id,
ictx->state->name, len, (int)len, buf);
@@ -950,8 +953,6 @@ input_parse(struct window_pane *wp)
/* Close the screen. */
screen_write_stop(sctx);
-
- evbuffer_drain(evb, len);
}
/* Split the parameter list (if any). */