mirror of
https://github.com/tmux/tmux.git
synced 2025-01-07 16:28:48 +00:00
Merge branch 'obsd-master'
This commit is contained in:
commit
64f1076d97
42
input.c
42
input.c
@ -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);
|
||||
|
@ -385,6 +385,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,
|
||||
|
@ -222,6 +222,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. */
|
||||
@ -1866,7 +1877,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;
|
||||
|
||||
@ -1961,8 +1972,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
|
||||
|
284
tmux.1
284
tmux.1
@ -1814,6 +1814,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
|
||||
@ -1824,11 +1841,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)
|
||||
@ -1842,6 +1908,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)
|
||||
@ -1873,6 +1945,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->)
|
||||
@ -1905,6 +1995,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)
|
||||
@ -1939,18 +2050,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
|
||||
@ -1973,6 +2137,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)
|
||||
@ -1985,6 +2164,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)
|
||||
@ -1997,12 +2210,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
|
||||
@ -2012,12 +2264,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)
|
||||
@ -3797,7 +4065,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.
|
||||
@ -4093,10 +4362,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
|
||||
@ -4230,6 +4501,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
|
||||
|
Loading…
Reference in New Issue
Block a user