*** tty-keys.c 2012-09-15 00:00:00.000000000 +0000 --- tty-keys.c 2012-09-15 00:00:00.000000001 +0000 *************** *** 519,525 **** * Escape but no key string. If have already seen an escape, then the * timer must have expired, so give up waiting and send the escape. */ ! if (tty->flags & TTY_ESCAPE) { evbuffer_drain(tty->event->input, 1); key = '\033'; goto handle_key; --- 519,527 ---- * Escape but no key string. If have already seen an escape, then the * timer must have expired, so give up waiting and send the escape. */ ! if (tty->flags & TTY_ESCAPE) && ! evtimer_initialized(&tty->key_timer) && ! !evtimer_pending(&tty->key_timer, NULL)) { evbuffer_drain(tty->event->input, 1); key = '\033'; goto handle_key; *************** *** 528,539 **** /* Fall through to start the timer. */ start_timer: /* Start the timer and wait for expiry or more data. */ delay = options_get_number(&global_options, "escape-time"); tv.tv_sec = delay / 1000; tv.tv_usec = (delay % 1000) * 1000L; ! evtimer_del(&tty->key_timer); evtimer_set(&tty->key_timer, tty_keys_callback, tty); evtimer_add(&tty->key_timer, &tv); --- 530,546 ---- /* Fall through to start the timer. */ start_timer: + if (evtimer_initialized(&tty->key_timer) && + evtimer_pending(&tty->key_timer, NULL)) + return (0); + /* Start the timer and wait for expiry or more data. */ delay = options_get_number(&global_options, "escape-time"); tv.tv_sec = delay / 1000; tv.tv_usec = (delay % 1000) * 1000L; ! if (event_initialized(&tty->key_timer)) ! evtimer_del(&tty->key_timer); evtimer_set(&tty->key_timer, tty_keys_callback, tty); evtimer_add(&tty->key_timer, &tv); *************** *** 557,563 **** goto handle_key; handle_key: ! evtimer_del(&tty->key_timer); tty->key_callback(key, &mouse, tty->key_data); --- 564,571 ---- goto handle_key; handle_key: ! if (event_initialized(&tty->key_timer)) ! evtimer_del(&tty->key_timer); tty->key_callback(key, &mouse, tty->key_data);