mirror of
https://github.com/tmux/tmux.git
synced 2024-11-16 09:28:51 +00:00
Sync OpenBSD patchset 1094:
Handle partial keys properly by making sure the timer has actually expired, fixes problems with mintty reported by Michael Simpson.
This commit is contained in:
parent
e65c5ad56c
commit
bdfbb52951
12
tty-keys.c
12
tty-keys.c
@ -476,7 +476,6 @@ tty_keys_next(struct tty *tty)
|
|||||||
goto partial_key;
|
goto partial_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Is this a mouse key press? */
|
/* Is this a mouse key press? */
|
||||||
switch (tty_keys_mouse(tty, buf, len, &size, &mouse)) {
|
switch (tty_keys_mouse(tty, buf, len, &size, &mouse)) {
|
||||||
case 0: /* yes */
|
case 0: /* yes */
|
||||||
@ -532,10 +531,11 @@ tty_keys_next(struct tty *tty)
|
|||||||
|
|
||||||
partial_key:
|
partial_key:
|
||||||
/*
|
/*
|
||||||
* Escape but no key string. If have already seen an escape, then the
|
* Escape but no key string. If have already seen an escape and the
|
||||||
* timer must have expired, so give up waiting and send the escape.
|
* timer has expired, give up waiting and send the escape.
|
||||||
*/
|
*/
|
||||||
if (tty->flags & TTY_ESCAPE) {
|
if ((tty->flags & TTY_ESCAPE) &&
|
||||||
|
!evtimer_pending(&tty->key_timer, NULL)) {
|
||||||
evbuffer_drain(tty->event->input, 1);
|
evbuffer_drain(tty->event->input, 1);
|
||||||
key = '\033';
|
key = '\033';
|
||||||
goto handle_key;
|
goto handle_key;
|
||||||
@ -544,6 +544,10 @@ partial_key:
|
|||||||
/* Fall through to start the timer. */
|
/* Fall through to start the timer. */
|
||||||
|
|
||||||
start_timer:
|
start_timer:
|
||||||
|
/* If already waiting for timer, do nothing. */
|
||||||
|
if (evtimer_pending(&tty->key_timer, NULL))
|
||||||
|
return (0);
|
||||||
|
|
||||||
/* Start the timer and wait for expiry or more data. */
|
/* Start the timer and wait for expiry or more data. */
|
||||||
delay = options_get_number(&global_options, "escape-time");
|
delay = options_get_number(&global_options, "escape-time");
|
||||||
tv.tv_sec = delay / 1000;
|
tv.tv_sec = delay / 1000;
|
||||||
|
Loading…
Reference in New Issue
Block a user