degesch: have just one input buffer

This commit is contained in:
Přemysl Eric Janouch 2015-11-15 01:23:32 +01:00
parent d8299a1231
commit d14bc2df53
1 changed files with 12 additions and 13 deletions

View File

@ -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;