increased and later reduced, from David le Blanc in GitHub issue 4164.
-/* $OpenBSD: options-table.c,v 1.180 2024/10/05 00:32:55 nicm Exp $ */
+/* $OpenBSD: options-table.c,v 1.181 2024/10/07 08:50:47 nicm Exp $ */
/*
* Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com>
"If changed, the new value applies only to new panes."
},
+ { .name = "initial-repeat-time",
+ .type = OPTIONS_TABLE_NUMBER,
+ .scope = OPTIONS_TABLE_SESSION,
+ .minimum = 0,
+ .maximum = 10000,
+ .default_num = 0,
+ .unit = "milliseconds",
+ .text = "Time to wait for a key binding to repeat the first time the "
+ "key is pressed, if it is bound with the '-r' flag. "
+ "Subsequent presses use the 'repeat-time' option."
+ },
+
{ .name = "key-table",
.type = OPTIONS_TABLE_STRING,
.scope = OPTIONS_TABLE_SESSION,
.type = OPTIONS_TABLE_NUMBER,
.scope = OPTIONS_TABLE_SESSION,
.minimum = 0,
- .maximum = SHRT_MAX,
+ .maximum = 10000,
.default_num = 500,
.unit = "milliseconds",
.text = "Time to wait for a key binding to repeat, if it is bound "
-/* $OpenBSD: server-client.c,v 1.411 2024/10/05 12:10:16 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.412 2024/10/07 08:50:47 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
notify_client("client-active", c);
}
+/* Get repeat time. */
+static u_int
+server_client_repeat_time(struct client *c, struct key_binding *bd)
+{
+ struct session *s = c->session;
+ u_int repeat, initial;
+
+ if (~bd->flags & KEY_BINDING_REPEAT)
+ return (0);
+ repeat = options_get_number(s->options, "repeat-time");
+ if (repeat == 0)
+ return (0);
+ if ((~c->flags & CLIENT_REPEAT) || bd->key != c->last_key) {
+ initial = options_get_number(s->options, "initial-repeat-time");
+ if (initial != 0)
+ repeat = initial;
+ }
+ return (repeat);
+}
+
/*
* Handle data key input from client. This owns and can modify the key event it
* is given and is responsible for freeing it.
struct timeval tv;
struct key_table *table, *first;
struct key_binding *bd;
- int xtimeout;
+ u_int repeat;
uint64_t flags, prefix_delay;
struct cmd_find_state fs;
key_code key0, prefix, prefix2;
* If this is a repeating key, start the timer. Otherwise reset
* the client back to the root table.
*/
- xtimeout = options_get_number(s->options, "repeat-time");
- if (xtimeout != 0 && (bd->flags & KEY_BINDING_REPEAT)) {
+ repeat = server_client_repeat_time(c, bd);
+ if (repeat != 0) {
c->flags |= CLIENT_REPEAT;
+ c->last_key = bd->key;
- tv.tv_sec = xtimeout / 1000;
- tv.tv_usec = (xtimeout % 1000) * 1000L;
+ tv.tv_sec = repeat / 1000;
+ tv.tv_usec = (repeat % 1000) * 1000L;
evtimer_del(&c->repeat_timer);
evtimer_add(&c->repeat_timer, &tv);
} else {
-.\" $OpenBSD: tmux.1,v 1.962 2024/10/05 00:32:55 nicm Exp $
+.\" $OpenBSD: tmux.1,v 1.963 2024/10/07 08:50:47 nicm Exp $
.\"
.\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
.\"
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: October 5 2024 $
+.Dd $Mdocdate: October 7 2024 $
.Dt TMUX 1
.Os
.Sh NAME
The
.Fl r
flag indicates this key may repeat, see the
+.Ic initial-repeat-time
+and
.Ic repeat-time
-option.
+options.
.Fl N
attaches a note to the key (shown with
.Ic list-keys
Set the maximum number of lines held in window history.
This setting applies only to new windows - existing window histories are not
resized and retain the limit at the point they were created.
+.It Ic initial-repeat-time Ar time
+Set the time in milliseconds for the initial repeat when a key is bound with the
+.Fl r
+flag.
+This allows multiple commands to be entered without pressing the prefix key
+again.
+See also the
+.Ic repeat-time
+option.
+If
+.Ic initial-repeat-time
+is zero,
+.Ic repeat-time
+is used for the first key press.
.It Ic key-table Ar key-table
Set the default key table to
.Ar key-table
option if it has been set.
If off, do not renumber the windows.
.It Ic repeat-time Ar time
-Allow multiple commands to be entered without pressing the prefix-key again
+Allow multiple commands to be entered without pressing the prefix key again
in the specified
.Ar time
milliseconds (the default is 500).
Repeat is enabled for the default keys bound to the
.Ic resize-pane
command.
+See also the
+.Ic initial-repeat-time
+option.
.It Xo Ic set-titles
.Op Ic on | off
.Xc
-/* $OpenBSD: tmux.h,v 1.1233 2024/10/04 19:16:13 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1234 2024/10/07 08:50:47 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
char *exit_message;
struct key_table *keytable;
+ key_code last_key;
uint64_t redraw_panes;