mirror of
https://github.com/tmux/tmux.git
synced 2024-11-17 18:08:51 +00:00
Add an option to control the input buffer size, from Ken Lau.
This commit is contained in:
parent
596ea62dc3
commit
c26d71d3e9
14
input.c
14
input.c
@ -93,7 +93,6 @@ struct input_ctx {
|
|||||||
size_t param_len;
|
size_t param_len;
|
||||||
|
|
||||||
#define INPUT_BUF_START 32
|
#define INPUT_BUF_START 32
|
||||||
#define INPUT_BUF_LIMIT 1048576
|
|
||||||
u_char *input_buf;
|
u_char *input_buf;
|
||||||
size_t input_len;
|
size_t input_len;
|
||||||
size_t input_space;
|
size_t input_space;
|
||||||
@ -729,6 +728,9 @@ static const struct input_transition input_state_consume_st_table[] = {
|
|||||||
{ -1, -1, NULL, NULL }
|
{ -1, -1, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Maximum of bytes allowed to read in a single input. */
|
||||||
|
static size_t input_buffer_size = INPUT_BUF_DEFAULT_SIZE;
|
||||||
|
|
||||||
/* Input table compare. */
|
/* Input table compare. */
|
||||||
static int
|
static int
|
||||||
input_table_compare(const void *key, const void *value)
|
input_table_compare(const void *key, const void *value)
|
||||||
@ -1193,7 +1195,7 @@ input_input(struct input_ctx *ictx)
|
|||||||
available = ictx->input_space;
|
available = ictx->input_space;
|
||||||
while (ictx->input_len + 1 >= available) {
|
while (ictx->input_len + 1 >= available) {
|
||||||
available *= 2;
|
available *= 2;
|
||||||
if (available > INPUT_BUF_LIMIT) {
|
if (available > input_buffer_size) {
|
||||||
ictx->flags |= INPUT_DISCARD;
|
ictx->flags |= INPUT_DISCARD;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -3017,3 +3019,11 @@ input_reply_clipboard(struct bufferevent *bev, const char *buf, size_t len,
|
|||||||
bufferevent_write(bev, end, strlen(end));
|
bufferevent_write(bev, end, strlen(end));
|
||||||
free(out);
|
free(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set input buffer size. */
|
||||||
|
void
|
||||||
|
input_set_buffer_size(size_t buffer_size)
|
||||||
|
{
|
||||||
|
log_debug("%s: %lu -> %lu", __func__, input_buffer_size, buffer_size);
|
||||||
|
input_buffer_size = buffer_size;
|
||||||
|
}
|
||||||
|
@ -348,6 +348,15 @@ const struct options_table_entry options_table[] = {
|
|||||||
"Empty does not write a history file."
|
"Empty does not write a history file."
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ .name = "input-buffer-size",
|
||||||
|
.type = OPTIONS_TABLE_NUMBER,
|
||||||
|
.scope = OPTIONS_TABLE_SERVER,
|
||||||
|
.minimum = INPUT_BUF_DEFAULT_SIZE,
|
||||||
|
.maximum = UINT_MAX,
|
||||||
|
.default_num = INPUT_BUF_DEFAULT_SIZE,
|
||||||
|
.text = "Number of byte accpted in a single input before dropping."
|
||||||
|
},
|
||||||
|
|
||||||
{ .name = "menu-style",
|
{ .name = "menu-style",
|
||||||
.type = OPTIONS_TABLE_STRING,
|
.type = OPTIONS_TABLE_STRING,
|
||||||
.scope = OPTIONS_TABLE_WINDOW,
|
.scope = OPTIONS_TABLE_WINDOW,
|
||||||
|
@ -1177,6 +1177,8 @@ options_push_changes(const char *name)
|
|||||||
RB_FOREACH(w, windows, &windows)
|
RB_FOREACH(w, windows, &windows)
|
||||||
layout_fix_panes(w, NULL);
|
layout_fix_panes(w, NULL);
|
||||||
}
|
}
|
||||||
|
if (strcmp(name, "input-buffer-size") == 0)
|
||||||
|
input_set_buffer_size(options_get_number(global_options, name));
|
||||||
RB_FOREACH(s, sessions, &sessions)
|
RB_FOREACH(s, sessions, &sessions)
|
||||||
status_update_cache(s);
|
status_update_cache(s);
|
||||||
|
|
||||||
|
3
tmux.1
3
tmux.1
@ -4139,6 +4139,9 @@ option.
|
|||||||
If not empty, a file to which
|
If not empty, a file to which
|
||||||
.Nm
|
.Nm
|
||||||
will write command prompt history on exit and load it from on start.
|
will write command prompt history on exit and load it from on start.
|
||||||
|
.It Ic input-buffer-size Ar bytes
|
||||||
|
Maximum of bytes allowed to read in escape and control sequences.
|
||||||
|
Once reached, the sequence will be discarded.
|
||||||
.It Ic message-limit Ar number
|
.It Ic message-limit Ar number
|
||||||
Set the number of error or information messages to save in the message log for
|
Set the number of error or information messages to save in the message log for
|
||||||
each client.
|
each client.
|
||||||
|
2
tmux.h
2
tmux.h
@ -2840,6 +2840,7 @@ void recalculate_sizes(void);
|
|||||||
void recalculate_sizes_now(int);
|
void recalculate_sizes_now(int);
|
||||||
|
|
||||||
/* input.c */
|
/* input.c */
|
||||||
|
#define INPUT_BUF_DEFAULT_SIZE 1048576
|
||||||
struct input_ctx *input_init(struct window_pane *, struct bufferevent *,
|
struct input_ctx *input_init(struct window_pane *, struct bufferevent *,
|
||||||
struct colour_palette *);
|
struct colour_palette *);
|
||||||
void input_free(struct input_ctx *);
|
void input_free(struct input_ctx *);
|
||||||
@ -2851,6 +2852,7 @@ void input_parse_screen(struct input_ctx *, struct screen *,
|
|||||||
screen_write_init_ctx_cb, void *, u_char *, size_t);
|
screen_write_init_ctx_cb, void *, u_char *, size_t);
|
||||||
void input_reply_clipboard(struct bufferevent *, const char *, size_t,
|
void input_reply_clipboard(struct bufferevent *, const char *, size_t,
|
||||||
const char *);
|
const char *);
|
||||||
|
void input_set_buffer_size(size_t);
|
||||||
|
|
||||||
/* input-key.c */
|
/* input-key.c */
|
||||||
void input_key_build(void);
|
void input_key_build(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user