From 0a783d275f9abc5af08e2b4b9c0662846a3dacc2 Mon Sep 17 00:00:00 2001 From: purplerain Date: Mon, 16 Sep 2024 21:47:14 +0000 Subject: [PATCH] sync with OpenBSD -current --- sbin/dhcpleased/frontend.c | 4 +- share/man/man8/rc.shutdown.8 | 7 +- sys/kern/exec_elf.c | 6 +- usr.bin/ssh/sntrup761.c | 14 +- usr.bin/ssh/sntrup761.sh | 7 +- usr.bin/tmux/input.c | 44 +++--- usr.bin/tmux/options-table.c | 13 +- usr.bin/tmux/server-client.c | 43 +++++- usr.bin/tmux/tmux.1 | 288 ++++++++++++++++++++++++++++++++++- usr.bin/tmux/tmux.h | 3 +- 10 files changed, 386 insertions(+), 43 deletions(-) diff --git a/sbin/dhcpleased/frontend.c b/sbin/dhcpleased/frontend.c index 399345c99..dd81bd892 100644 --- a/sbin/dhcpleased/frontend.c +++ b/sbin/dhcpleased/frontend.c @@ -1,4 +1,4 @@ -/* $OpenBSD: frontend.c,v 1.38 2024/08/26 06:06:04 florian Exp $ */ +/* $OpenBSD: frontend.c,v 1.39 2024/09/16 07:34:49 florian Exp $ */ /* * Copyright (c) 2017, 2021 Florian Obser @@ -310,7 +310,7 @@ frontend_dispatch_main(int fd, short event, void *bula) fatalx("%s: invalid %s", __func__, i2s(type)); if ((iface = get_iface_by_id(if_index)) == NULL) { - close(fd); + close(udpsock); break; } if (iface->udpsock != -1) diff --git a/share/man/man8/rc.shutdown.8 b/share/man/man8/rc.shutdown.8 index 93e45ac75..fae45aaf3 100644 --- a/share/man/man8/rc.shutdown.8 +++ b/share/man/man8/rc.shutdown.8 @@ -1,4 +1,4 @@ -.\" $OpenBSD: rc.shutdown.8,v 1.16 2020/05/16 16:58:12 jmc Exp $ +.\" $OpenBSD: rc.shutdown.8,v 1.17 2024/09/15 19:39:26 kn Exp $ .\" .\" Copyright (c) 1999 Aaron Campbell .\" All rights reserved. @@ -24,7 +24,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd $Mdocdate: May 16 2020 $ +.Dd $Mdocdate: September 15 2024 $ .Dt RC.SHUTDOWN 8 .Os .Sh NAME @@ -54,6 +54,9 @@ defined in the .Va pkg_scripts variable in .Xr rc.conf.local 8 , +as well as +.Xr vmd 8 , +in that order, by passing them the .Cm stop argument. diff --git a/sys/kern/exec_elf.c b/sys/kern/exec_elf.c index 548f96c64..fdf22b754 100644 --- a/sys/kern/exec_elf.c +++ b/sys/kern/exec_elf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exec_elf.c,v 1.190 2024/08/21 03:16:25 deraadt Exp $ */ +/* $OpenBSD: exec_elf.c,v 1.191 2024/09/15 23:13:19 deraadt Exp $ */ /* * Copyright (c) 1996 Per Fogelstrom @@ -311,8 +311,10 @@ elf_read_pintable(struct proc *p, struct vnode *vp, Elf_Phdr *pp, for (i = 0; i < nsyscalls; i++) { if (syscalls[i].sysno <= 0 || syscalls[i].sysno >= SYS_MAXSYSCALL || - syscalls[i].offset > len) + syscalls[i].offset > len) { + npins = 0; goto bad; + } npins = MAX(npins, syscalls[i].sysno); } if (is_ldso) diff --git a/usr.bin/ssh/sntrup761.c b/usr.bin/ssh/sntrup761.c index 81ae5dc86..52525cf83 100644 --- a/usr.bin/ssh/sntrup761.c +++ b/usr.bin/ssh/sntrup761.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sntrup761.c,v 1.7 2024/09/15 02:20:51 djm Exp $ */ +/* $OpenBSD: sntrup761.c,v 1.8 2024/09/16 05:37:05 djm Exp $ */ /* * Public Domain, Authors: @@ -912,8 +912,8 @@ crypto_int32 crypto_int32_min(crypto_int32 crypto_int32_x,crypto_int32 crypto_in __asm__ ("cmp %w0,%w1\n csel %w0,%w0,%w1,lt" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc"); return crypto_int32_x; #else - crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x; - crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x; + crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x; + crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x; crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y); crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z); crypto_int32_z &= crypto_int32_r; @@ -931,8 +931,8 @@ crypto_int32 crypto_int32_max(crypto_int32 crypto_int32_x,crypto_int32 crypto_in __asm__ ("cmp %w0,%w1\n csel %w0,%w1,%w0,lt" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc"); return crypto_int32_x; #else - crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x; - crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x; + crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x; + crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x; crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y); crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z); crypto_int32_z &= crypto_int32_r; @@ -956,8 +956,8 @@ void crypto_int32_minmax(crypto_int32 *crypto_int32_p,crypto_int32 *crypto_int32 *crypto_int32_p = crypto_int32_r; *crypto_int32_q = crypto_int32_s; #else - crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x; - crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x; + crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x; + crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x; crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y); crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z); crypto_int32_z &= crypto_int32_r; diff --git a/usr.bin/ssh/sntrup761.sh b/usr.bin/ssh/sntrup761.sh index 92c803bb1..4de8dc334 100644 --- a/usr.bin/ssh/sntrup761.sh +++ b/usr.bin/ssh/sntrup761.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $OpenBSD: sntrup761.sh,v 1.8 2024/09/15 02:20:51 djm Exp $ +# $OpenBSD: sntrup761.sh,v 1.9 2024/09/16 05:37:05 djm Exp $ # Placed in the Public Domain. # AUTHOR="supercop-20240808/crypto_kem/sntrup761/ref/implementors" @@ -63,8 +63,13 @@ for i in $FILES; do -e "s/static void crypto_int16_minmax/void crypto_int16_minmax/" ;; */cryptoint/crypto_int32.h) + # Use int64_t for intermediate values in crypto_int32_minmax to + # prevent signed 32-bit integer overflow when called by + # crypto_sort_int32. Original code depends on -fwrapv (we set -ftrapv) sed -e "s/static void crypto_int32_store/void crypto_int32_store/" \ -e "s/^[#]define crypto_int32_optblocker.*//" \ + -e "s/crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x;/crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x;/" \ + -e "s/crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x;/crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x;/" \ -e "s/static void crypto_int32_minmax/void crypto_int32_minmax/" ;; */cryptoint/crypto_int64.h) diff --git a/usr.bin/tmux/input.c b/usr.bin/tmux/input.c index 6cf28f688..f1aa4f8ae 100644 --- a/usr.bin/tmux/input.c +++ b/usr.bin/tmux/input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: input.c,v 1.228 2024/08/21 04:37:42 nicm Exp $ */ +/* $OpenBSD: input.c,v 1.229 2024/09/16 20:38:48 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1349,7 +1349,7 @@ input_csi_dispatch(struct input_ctx *ictx) struct screen_write_ctx *sctx = &ictx->ctx; struct screen *s = sctx->s; struct input_table_entry *entry; - int i, n, m; + int i, n, m, ek; u_int cx, bg = ictx->cell.cell.bg; if (ictx->flags & INPUT_DISCARD) @@ -1407,30 +1407,36 @@ input_csi_dispatch(struct input_ctx *ictx) break; case INPUT_CSI_MODSET: n = input_get(ictx, 0, 0, 0); - m = input_get(ictx, 1, 0, 0); - /* - * Set the extended key reporting mode as per the client request, - * unless "extended-keys always" forces us into mode 1. - */ - if (options_get_number(global_options, "extended-keys") != 1) + if (n != 4) break; - screen_write_mode_clear(sctx, - MODE_KEYS_EXTENDED|MODE_KEYS_EXTENDED_2); - if (n == 4 && m == 1) - screen_write_mode_set(sctx, MODE_KEYS_EXTENDED); - if (n == 4 && m == 2) + m = input_get(ictx, 1, 0, 0); + + /* + * Set the extended key reporting mode as per the client + * request, unless "extended-keys" is set to "off". + */ + ek = options_get_number(global_options, "extended-keys"); + if (ek == 0) + break; + screen_write_mode_clear(sctx, EXTENDED_KEY_MODES); + if (m == 2) screen_write_mode_set(sctx, MODE_KEYS_EXTENDED_2); + else if (m == 1 || ek == 2) + screen_write_mode_set(sctx, MODE_KEYS_EXTENDED); break; case INPUT_CSI_MODOFF: n = input_get(ictx, 0, 0, 0); + if (n != 4) + break; + /* - * Clear the extended key reporting mode as per the client request, - * unless "extended-keys always" forces us into mode 1. + * Clear the extended key reporting mode as per the client + * request, unless "extended-keys always" forces into mode 1. */ - if (n == 4) { - screen_write_mode_clear(sctx, - MODE_KEYS_EXTENDED|MODE_KEYS_EXTENDED_2); - } + screen_write_mode_clear(sctx, + MODE_KEYS_EXTENDED|MODE_KEYS_EXTENDED_2); + if (options_get_number(global_options, "extended-keys") == 2) + screen_write_mode_set(sctx, MODE_KEYS_EXTENDED); break; case INPUT_CSI_WINOPS: input_csi_dispatch_winops(ictx); diff --git a/usr.bin/tmux/options-table.c b/usr.bin/tmux/options-table.c index 59cf34654..9ef6dedc7 100644 --- a/usr.bin/tmux/options-table.c +++ b/usr.bin/tmux/options-table.c @@ -1,4 +1,4 @@ -/* $OpenBSD: options-table.c,v 1.177 2024/08/21 04:37:42 nicm Exp $ */ +/* $OpenBSD: options-table.c,v 1.178 2024/09/16 20:28:22 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott @@ -386,6 +386,17 @@ const struct options_table_entry options_table[] = { .text = "Maximum number of server messages to keep." }, + { .name = "prefix-timeout", + .type = OPTIONS_TABLE_NUMBER, + .scope = OPTIONS_TABLE_SERVER, + .minimum = 0, + .maximum = INT_MAX, + .default_num = 0, + .unit = "milliseconds", + .text = "The timeout for the prefix key if no subsequent key is " + "pressed. Zero means disabled." + }, + { .name = "prompt-history-limit", .type = OPTIONS_TABLE_NUMBER, .scope = OPTIONS_TABLE_SERVER, diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index a8c501222..b929c2002 100644 --- a/usr.bin/tmux/server-client.c +++ b/usr.bin/tmux/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.408 2024/09/11 19:12:33 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.409 2024/09/16 20:28:22 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -226,6 +226,17 @@ server_client_set_key_table(struct client *c, const char *name) key_bindings_unref_table(c->keytable); c->keytable = key_bindings_get_table(name, 1); c->keytable->references++; + if (gettimeofday(&c->keytable->activity_time, NULL) != 0) + fatal("gettimeofday failed"); +} + +static uint64_t +server_client_key_table_activity_diff(struct client *c) +{ + struct timeval diff; + + timersub(&c->activity_time, &c->keytable->activity_time, &diff); + return ((diff.tv_sec * 1000ULL) + (diff.tv_usec / 1000ULL)); } /* Get default key table. */ @@ -1870,7 +1881,7 @@ server_client_key_callback(struct cmdq_item *item, void *data) struct key_table *table, *first; struct key_binding *bd; int xtimeout; - uint64_t flags; + uint64_t flags, prefix_delay; struct cmd_find_state fs; key_code key0, prefix, prefix2; @@ -1965,8 +1976,34 @@ try_again: if (c->flags & CLIENT_REPEAT) log_debug("currently repeating"); - /* Try to see if there is a key binding in the current table. */ bd = key_bindings_get(table, key0); + + /* + * If prefix-timeout is enabled and we're in the prefix table, see if + * the timeout has been exceeded. Revert to the root table if so. + */ + prefix_delay = options_get_number(global_options, "prefix-timeout"); + if (prefix_delay > 0 && + strcmp(table->name, "prefix") == 0 && + server_client_key_table_activity_diff(c) > prefix_delay) { + /* + * If repeating is active and this is a repeating binding, + * ignore the timeout. + */ + if (bd != NULL && + (c->flags & CLIENT_REPEAT) && + (bd->flags & KEY_BINDING_REPEAT)) { + log_debug("prefix timeout ignored, repeat is active"); + } else { + log_debug("prefix timeout exceeded"); + server_client_set_key_table(c, NULL); + first = table = c->keytable; + server_status_client(c); + goto table_changed; + } + } + + /* Try to see if there is a key binding in the current table. */ if (bd != NULL) { /* * Key was matched in this table. If currently repeating but a diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index 9165234df..246df394e 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.954 2024/08/27 07:49:07 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.957 2024/09/16 20:46:58 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott .\" @@ -14,7 +14,7 @@ .\" 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: August 27 2024 $ +.Dd $Mdocdate: September 16 2024 $ .Dt TMUX 1 .Os .Sh NAME @@ -1812,6 +1812,23 @@ is used to name the new paste buffer. .Xc Copy from the cursor position and exit copy mode. .It Xo +.Ic copy-pipe-end-of-line +.Op Ar command +.Op Ar prefix +.Xc +Copy from the cursor position to the end of the line and pipe the text to +.Ar command . +.Ar prefix +is used to name the new paste buffer. +.It Xo +.Ic copy-pipe-end-of-line-and-cancel +.Op Ar command +.Op Ar prefix +.Xc +Same as +.Ic copy-pipe-end-of-line +but also exit copy mode. +.It Xo .Ic copy-line .Op Ar prefix .Xc @@ -1822,11 +1839,60 @@ Copy the entire line. .Xc Copy the entire line and exit copy mode. .It Xo +.Ic copy-pipe-line +.Op Ar command +.Op Ar prefix +.Xc +Copy the entire line and pipe the text to +.Ar command . +.Ar prefix +is used to name the new paste buffer. +.It Xo +.Ic copy-pipe-line-and-cancel +.Op Ar command +.Op Ar prefix +.Xc +Same as +.Ic copy-pipe-line +but also exit copy mode. +.It Xo +.Ic copy-pipe +.Op Ar command +.Op Ar prefix +.Xc +Copy the selection, clear it and pipe its text to +.Ar command . +.Ar prefix +is used to name the new paste buffer. +.It Xo +.Ic copy-pipe-no-clear +.Op Ar command +.Op Ar prefix +.Xc +Same as +.Ic copy-pipe +but do not clear the selection. +.It Xo +.Ic copy-pipe-and-cancel +.Op Ar command +.Op Ar prefix +.Xc +Same as +.Ic copy-pipe +but also exit copy mode. +.It Xo .Ic copy-selection .Op Ar prefix .Xc Copies the current selection. .It Xo +.Ic copy-selection-no-clear +.Op Ar prefix +.Xc +Same as +.Ic copy-selection +but do not clear the selection. +.It Xo .Ic copy-selection-and-cancel .Op Ar prefix (vi: Enter) @@ -1840,6 +1906,12 @@ Copy the current selection and exit copy mode. .Xc Move the cursor down. .It Xo +.Ic cursor-down-and-cancel +.Xc +Same as +.Ic cursor-down +but also exit copy mode if reaching the bottom. +.It Xo .Ic cursor-left (vi: h) (emacs: Left) @@ -1871,6 +1943,24 @@ Move the cursor to the end of the line. .Xc Move the cursor to a specific line. .It Xo +.Ic halfpage-down +(vi: C-d) +(emacs: M-Down) +.Xc +Scroll down by half a page. +.It Xo +.Ic halfpage-down-and-cancel +.Xc +Same as +.Ic halfpage-down +but also exit copy mode if reaching the bottom. +.It Xo +.Ic halfpage-up +(vi: C-u) +(emacs: M-Up) +.Xc +Scroll up by half a page. +.It Xo .Ic history-bottom (vi: G) (emacs: M->) @@ -1903,6 +1993,27 @@ Jump backwards to the specified text. .Xc Jump forward to the specified text. .It Xo +.Ic jump-reverse +(vi: ,) +(emacs: ,) +.Xc +Repeat the last jump in the reverse direction (forward becomes backward and +backward becomes forward). +.It Xo +.Ic jump-to-backward +.Ar to +(vi: T) +.Xc +Jump backwards, but one character less, placing the cursor on the character +after the target. +.It Xo +.Ic jump-to-forward +.Ar to +(vi: t) +.Xc +Jump forward, but one character less, placing the cursor on the character +before the target. +.It Xo .Ic jump-to-mark (vi: M-x) (emacs: M-x) @@ -1937,18 +2048,71 @@ Move to the next prompt. .Xc Move to the next word. .It Xo +.Ic next-word-end +(vi: e) +(emacs: M-f) +.Xc +Move to the end of the next word. +.It Xo +.Ic next-space +(vi: W) +.Xc +Same as +.Ic next-word +but use a space alone as the word separator. +.It Xo +.Ic next-space-end +(vi: E) +.Xc +Same as +.Ic next-word-end +but use a space alone as the word separator. +.It Xo +.Ic other-end +(vi: o) +.Xc +Switch at which end of the selection the cursor sits. +.It Xo .Ic page-down (vi: C-f) (emacs: PageDown) .Xc Scroll down by one page. .It Xo +.Ic page-down-and-cancel +.Xc +Same as +.Ic page-down +but also exit copy mode if reaching the bottom. +.It Xo .Ic page-up (vi: C-b) (emacs: PageUp) .Xc Scroll up by one page. .It Xo +.Ic pipe +.Op Ar command +.Xc +Pipe the selected text to +.Ar command +and clear the selection. +.It Xo +.Ic pipe-no-clear +.Op Ar command +.Xc +Same as +.Ic pipe +but do not clear the selection. +.It Xo +.Ic pipe-and-cancel +.Op Ar command +.Op Ar prefix +.Xc +Same as +.Ic pipe +but also exit copy mode. +.It Xo .Ic previous-matching-bracket (emacs: M-C-b) .Xc @@ -1971,6 +2135,21 @@ Move to the previous prompt. .Xc Move to the previous word. .It Xo +.Ic previous-space +(vi: B) +.Xc +Same as +.Ic previous-word +but use a space alone as the word separator. +.It Xo +.Ic rectangle-on +.Xc +Turn on rectangle selection mode. +.It Xo +.Ic rectangle-off +.Xc +Turn off rectangle selection mode. +.It Xo .Ic rectangle-toggle (vi: v) (emacs: R) @@ -1983,6 +2162,40 @@ Toggle rectangle selection mode. .Xc Refresh the content from the pane. .It Xo +.Ic scroll-bottom +.Xc +Scroll up until the current line is at the bottom while keeping the cursor on +that line. +.It Xo +.Ic scroll-down +(vi: C-e) +(emacs: C-Down) +.Xc +Scroll down. +.It Xo +.Ic scroll-down-and-cancel +.Xc +Same as +.Ic scroll-down +but also exit copy mode if the cursor reaches the bottom. +.It Xo +.Ic scroll-middle +(vi: z) +.Xc +Scroll so that the current line becomes the middle one while keeping the +cursor on that line. +.It Xo +.Ic scroll-top +.Xc +Scroll down until the current line is at the top while keeping the cursor on +that line. +.It Xo +.Ic scroll-up +(vi: C-y) +(emacs: C-Up) +.Xc +Scroll up. +.It Xo .Ic search-again (vi: n) (emacs: n) @@ -1995,12 +2208,51 @@ Repeat the last search. .Xc Search backwards for the specified text. .It Xo +.Ic search-backward-incremental +.Ar text +(emacs: C-r) +.Xc +Search backwards incrementally for the specified text. +Is expected to be used with the +.Fl i +flag to the +.Ic command-prompt +command. +.It Xo +.Ic search-backward-text +.Ar text +.Xc +Search backwards for the specified plain text. +.It Xo .Ic search-forward .Ar text (vi: /) .Xc Search forward for the specified text. .It Xo +.Ic search-forward-incremental +.Ar text +(emacs: C-s) +.Xc +Search forward incrementally for the specified text. +Is expected to be used with the +.Fl i +flag to the +.Ic command-prompt +command. +.It Xo +.Ic search-forward-text +.Ar text +.Xc +Search forward for the specified plain text. +.It Xo +.Ic search-reverse +(vi: N) +(emacs: N) +.Xc +Repeat the last search in the reverse direction (forward becomes backward and +backward becomes forward). +.It Xo .Ic select-line (vi: V) .Xc @@ -2010,12 +2262,28 @@ Select the current line. .Xc Select the current word. .It Xo +.Ic set-mark +(vi: X) +(emacs: X) +.Xc +Mark the current line. +.It Xo .Ic start-of-line (vi: 0) (emacs: C-a) .Xc Move the cursor to the start of the line. .It Xo +.Ic stop-selection +.Xc +Stop selecting without clearing the current selection. +.It Xo +.Ic toggle-position +(vi: P) +(emacs: P) +.Xc +Toggle the visibility of the position indicator in the top right. +.It Xo .Ic top-line (vi: H) (emacs: M-R) @@ -3795,7 +4063,8 @@ the sequence for only keys which lack an existing well-known representation; or mode 2 which changes the sequence for all keys. When set to .Ic always , -mode 1 output is forced and the program cannot change it. +modes 1 and 2 can still be requested by applications, but mode 1 will be forced +instead of the standard mode. When set to .Ic off , this feature is disabled and only standard keys are reported. @@ -4091,10 +4360,12 @@ If (the default), leave the session orphaned. If .Ic keep-last , -destroy the session only if it is in a group and has other sessions in that group. +destroy the session only if it is in a group and has other sessions in that +group. If .Ic keep-group , -destroy the session unless it is in a group and is the only session in that group. +destroy the session unless it is in a group and is the only session in that +group. .It Xo Ic detach-on-destroy .Op Ic off | on | no-detached | previous | next .Xc @@ -4228,6 +4499,13 @@ Like .Ic prefix2 can be set to .Ql None . +.It Ic prefix-timeout Ar time +Set the time in milliseconds for which +.Nm +waits after +.Ic prefix +is input before dismissing it. +Can be set to zero to disable any timeout. .It Xo Ic renumber-windows .Op Ic on | off .Xc diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index 99f5343b5..f6bfb91b5 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.1226 2024/08/27 07:49:07 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.1227 2024/09/16 20:28:22 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1982,6 +1982,7 @@ RB_HEAD(key_bindings, key_binding); struct key_table { const char *name; + struct timeval activity_time; struct key_bindings key_bindings; struct key_bindings default_key_bindings;