mirror of
https://github.com/tmux/tmux.git
synced 2024-11-16 09:28:51 +00:00
Sync OpenBSD patchset 1102:
Add a buffer with all input from last ground state, will be used for control mode. From George Nachman.
This commit is contained in:
parent
714416074a
commit
d0907861f9
39
input.c
39
input.c
@ -47,9 +47,11 @@
|
||||
*/
|
||||
|
||||
/* Helper functions. */
|
||||
struct input_transition;
|
||||
int input_split(struct input_ctx *);
|
||||
int input_get(struct input_ctx *, u_int, int, int);
|
||||
void input_reply(struct input_ctx *, const char *, ...);
|
||||
void input_set_state(struct window_pane *, const struct input_transition *);
|
||||
|
||||
/* Transition entry/exit handlers. */
|
||||
void input_clear(struct input_ctx *);
|
||||
@ -692,12 +694,34 @@ input_init(struct window_pane *wp)
|
||||
|
||||
ictx->state = &input_state_ground;
|
||||
ictx->flags = 0;
|
||||
|
||||
ictx->since_ground = evbuffer_new();
|
||||
}
|
||||
|
||||
/* Destroy input parser. */
|
||||
void
|
||||
input_free(unused struct window_pane *wp)
|
||||
input_free(struct window_pane *wp)
|
||||
{
|
||||
if (wp != NULL)
|
||||
evbuffer_free(wp->ictx.since_ground);
|
||||
}
|
||||
|
||||
/* Change input state. */
|
||||
void
|
||||
input_set_state(struct window_pane *wp, const struct input_transition *itr)
|
||||
{
|
||||
struct input_ctx *ictx = &wp->ictx;
|
||||
struct evbuffer *ground_evb = ictx->since_ground;
|
||||
|
||||
if (ictx->state->exit != NULL)
|
||||
ictx->state->exit(ictx);
|
||||
|
||||
if (itr->state == &input_state_ground)
|
||||
evbuffer_drain(ground_evb, EVBUFFER_LENGTH(ground_evb));
|
||||
|
||||
ictx->state = itr->state;
|
||||
if (ictx->state->enter != NULL)
|
||||
ictx->state->enter(ictx);
|
||||
}
|
||||
|
||||
/* Parse input. */
|
||||
@ -755,13 +779,12 @@ input_parse(struct window_pane *wp)
|
||||
continue;
|
||||
|
||||
/* And switch state, if necessary. */
|
||||
if (itr->state != NULL) {
|
||||
if (ictx->state->exit != NULL)
|
||||
ictx->state->exit(ictx);
|
||||
ictx->state = itr->state;
|
||||
if (ictx->state->enter != NULL)
|
||||
ictx->state->enter(ictx);
|
||||
}
|
||||
if (itr->state != NULL)
|
||||
input_set_state(wp, itr);
|
||||
|
||||
/* If not in ground state, save input. */
|
||||
if (ictx->state != &input_state_ground)
|
||||
evbuffer_add(ictx->since_ground, &ictx->ch, 1);
|
||||
}
|
||||
|
||||
/* Close the screen. */
|
||||
|
Loading…
Reference in New Issue
Block a user