diff --git a/degesch.c b/degesch.c index 4c27283..d0aca74 100644 --- a/degesch.c +++ b/degesch.c @@ -1367,12 +1367,8 @@ struct app_context size_t nick_palette_len; ///< Number of entries in nick_palette bool awaiting_mirc_escape; ///< Awaiting a mIRC attribute escape - // TODO: try to get rid of this in favor of "paste_buffer" -> "input_buffer" - char char_buf[MB_LEN_MAX + 1]; ///< Buffered multibyte char - size_t char_buf_len; ///< How much of an MB char is buffered - bool in_bracketed_paste; ///< User is pasting some content - struct str paste_buffer; ///< Buffered pasted content + struct str input_buffer; ///< Buffered pasted content bool running_backlog_helper; ///< Running a backlog helper } @@ -1437,7 +1433,7 @@ app_context_init (struct app_context *self) free (encoding); input_init (&self->input); - str_init (&self->paste_buffer); + str_init (&self->input_buffer); self->nick_palette = filter_color_cube_for_acceptable_nick_colors (&self->nick_palette_len); @@ -1471,7 +1467,7 @@ app_context_free (struct app_context *self) iconv_close (self->term_to_utf8); input_free (&self->input); - str_free (&self->paste_buffer); + str_free (&self->input_buffer); } static void refresh_prompt (struct app_context *ctx); @@ -9060,7 +9056,6 @@ static void await_mirc_escape (struct app_context *ctx) { ctx->awaiting_mirc_escape = true; - ctx->char_buf_len = 0; } static void @@ -9887,13 +9882,16 @@ process_mirc_escape (const struct pollfd *fd, struct app_context *ctx) { // There's no other way with libedit, as both el_getc() in a function // handler and CC_ARGHACK would block execution - if (read (fd->fd, ctx->char_buf + ctx->char_buf_len, 1) != 1) + struct str *buf = &ctx->input_buffer; + str_ensure_space (buf, 1); + if (read (fd->fd, buf->str + buf->len, 1) != 1) goto error; + buf->str[++buf->len] = '\0'; mbstate_t state; memset (&state, 0, sizeof state); - size_t len = mbrlen (ctx->char_buf, ++ctx->char_buf_len, &state); + size_t len = mbrlen (buf->str, buf->len, &state); // Illegal sequence if (len == (size_t) -1) @@ -9903,9 +9901,9 @@ process_mirc_escape (const struct pollfd *fd, struct app_context *ctx) if (len == (size_t) -2) return; - if (ctx->char_buf_len != 1) + if (buf->len != 1) goto error; - switch (ctx->char_buf[0]) + switch (buf->str[0]) { case 'b': input_insert (&ctx->input, "\x02"); break; case 'c': input_insert (&ctx->input, "\x03"); break; @@ -9924,6 +9922,7 @@ process_mirc_escape (const struct pollfd *fd, struct app_context *ctx) error: input_ding (&ctx->input); done: + str_reset (buf); ctx->awaiting_mirc_escape = false; } @@ -9932,7 +9931,7 @@ done: static void process_bracketed_paste (const struct pollfd *fd, struct app_context *ctx) { - struct str *buf = &ctx->paste_buffer; + struct str *buf = &ctx->input_buffer; str_ensure_space (buf, 1); if (read (fd->fd, buf->str + buf->len, 1) != 1) goto error;