diff --git a/cmd-set-option.c b/cmd-set-option.c index 1a4df533..b445e537 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -74,6 +74,7 @@ const char *set_option_bell_action_list[] = { }; const struct set_option_entry set_option_table[] = { + { "escape-time", SET_OPTION_NUMBER, 0, INT_MAX, NULL }, { "quiet", SET_OPTION_FLAG, 0, 0, NULL }, { NULL, 0, 0, 0, NULL } }; diff --git a/tmux.1 b/tmux.1 index fbbfe79e..79e65af6 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1288,8 +1288,14 @@ Available window options are listed under .Pp Available server options are: .Bl -tag -width Ds +.It Ic escape-time +Set the time in milliseconds for which +.Nm +waits after an escape is input to determine if it is part of a function or meta +key sequences. +The default is 500 milliseconds. .It Ic quiet -Enable of disable the display of various informational messages (see also the +Enable or disable the display of various informational messages (see also the .Fl q command line flag). .El @@ -1884,7 +1890,7 @@ The default is off. Show the window options with .Fl w (equivalent to -.Ic show-window-options ), +.Ic show-window-options ) , the server options with .Fl s , otherwise the session options for diff --git a/tmux.c b/tmux.c index 540c6f9f..0e080306 100644 --- a/tmux.c +++ b/tmux.c @@ -317,6 +317,7 @@ main(int argc, char **argv) options_init(&global_options, NULL); oo = &global_options; options_set_number(oo, "quiet", quiet); + options_set_number(oo, "escape-time", 500); options_init(&global_s_options, NULL); so = &global_s_options; diff --git a/tmux.h b/tmux.h index e9d11f65..c68e560a 100644 --- a/tmux.h +++ b/tmux.h @@ -50,7 +50,7 @@ extern char **environ; /* Default prompt history length. */ #define PROMPT_HISTORY 100 -/* +/* * Minimum layout cell size, NOT including separator line. The scroll region * cannot be one line in height so this must be at least two. */ @@ -59,9 +59,6 @@ extern char **environ; /* Automatic name refresh interval, in milliseconds. */ #define NAME_INTERVAL 500 -/* Escape timer period, in milliseconds. */ -#define ESCAPE_PERIOD 500 - /* Maximum data to buffer for output before suspending reading from panes. */ #define BACKOFF_THRESHOLD 1024 diff --git a/tty-keys.c b/tty-keys.c index a88f9542..0ac1b43d 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -429,7 +429,7 @@ tty_keys_next(struct tty *tty) const char *buf; size_t len, size; cc_t bspace; - int key; + int key, delay; buf = EVBUFFER_DATA(tty->event->input); len = EVBUFFER_LENGTH(tty->event->input); @@ -521,8 +521,9 @@ partial_key: start_timer: /* Start the timer and wait for expiry or more data. */ - tv.tv_sec = 0; - tv.tv_usec = ESCAPE_PERIOD * 1000L; + 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);