mirror of
https://github.com/tmux/tmux.git
synced 2025-01-05 23:38:48 +00:00
Add -d flag to display-panes to specify timeout, and make 0 mean no
timeout. From Laurens Post.
This commit is contained in:
parent
c1ec28a34b
commit
c6a8ad23a1
@ -37,8 +37,8 @@ const struct cmd_entry cmd_display_panes_entry = {
|
||||
.name = "display-panes",
|
||||
.alias = "displayp",
|
||||
|
||||
.args = { "t:", 0, 1 },
|
||||
.usage = CMD_TARGET_CLIENT_USAGE,
|
||||
.args = { "d:t:", 0, 1 },
|
||||
.usage = "[-d duration] " CMD_TARGET_CLIENT_USAGE,
|
||||
|
||||
.flags = CMD_AFTERHOOK,
|
||||
.exec = cmd_display_panes_exec
|
||||
@ -49,6 +49,9 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item)
|
||||
{
|
||||
struct args *args = self->args;
|
||||
struct client *c;
|
||||
struct session *s;
|
||||
u_int delay;
|
||||
char *cause;
|
||||
|
||||
if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL)
|
||||
return (CMD_RETURN_ERROR);
|
||||
@ -61,8 +64,18 @@ cmd_display_panes_exec(struct cmd *self, struct cmdq_item *item)
|
||||
c->identify_callback_data = xstrdup(args->argv[0]);
|
||||
else
|
||||
c->identify_callback_data = xstrdup("select-pane -t '%%'");
|
||||
s = c->session;
|
||||
|
||||
server_client_set_identify(c);
|
||||
if (args_has(args, 'd')) {
|
||||
delay = args_strtonum(args, 'd', 0, UINT_MAX, &cause);
|
||||
if (cause != NULL) {
|
||||
cmdq_error(item, "delay %s", cause);
|
||||
free(cause);
|
||||
return (CMD_RETURN_ERROR);
|
||||
}
|
||||
} else
|
||||
delay = options_get_number(s->options, "display-panes-time");
|
||||
server_client_set_identify(c, delay);
|
||||
|
||||
return (CMD_RETURN_NORMAL);
|
||||
}
|
||||
|
@ -74,19 +74,18 @@ server_client_callback_identify(__unused int fd, __unused short events,
|
||||
|
||||
/* Set identify mode on client. */
|
||||
void
|
||||
server_client_set_identify(struct client *c)
|
||||
server_client_set_identify(struct client *c, u_int delay)
|
||||
{
|
||||
struct timeval tv;
|
||||
int delay;
|
||||
|
||||
delay = options_get_number(c->session->options, "display-panes-time");
|
||||
tv.tv_sec = delay / 1000;
|
||||
tv.tv_usec = (delay % 1000) * 1000L;
|
||||
|
||||
if (event_initialized(&c->identify_timer))
|
||||
evtimer_del(&c->identify_timer);
|
||||
evtimer_set(&c->identify_timer, server_client_callback_identify, c);
|
||||
evtimer_add(&c->identify_timer, &tv);
|
||||
if (delay != 0)
|
||||
evtimer_add(&c->identify_timer, &tv);
|
||||
|
||||
c->flags |= CLIENT_IDENTIFY;
|
||||
c->tty.flags |= (TTY_FREEZE|TTY_NOCURSOR);
|
||||
|
13
tmux.1
13
tmux.1
@ -1461,6 +1461,7 @@ specifies the format for each item in the tree.
|
||||
This command works only if at least one client is attached.
|
||||
.It Xo
|
||||
.Ic display-panes
|
||||
.Op Fl d Ar duration
|
||||
.Op Fl t Ar target-client
|
||||
.Op Ar template
|
||||
.Xc
|
||||
@ -1468,11 +1469,19 @@ This command works only if at least one client is attached.
|
||||
Display a visible indicator of each pane shown by
|
||||
.Ar target-client .
|
||||
See the
|
||||
.Ic display-panes-time ,
|
||||
.Ic display-panes-colour ,
|
||||
.Ic display-panes-colour
|
||||
and
|
||||
.Ic display-panes-active-colour
|
||||
session options.
|
||||
The indicator is closed when a key is pressed or
|
||||
.Ar duration
|
||||
milliseconds have passed.
|
||||
If
|
||||
.Fl d
|
||||
is not given,
|
||||
.Ic display-panes-time
|
||||
is used.
|
||||
A duration of zero means the indicator stays until a key is pressed.
|
||||
While the indicator is on screen, a pane may be chosen with the
|
||||
.Ql 0
|
||||
to
|
||||
|
2
tmux.h
2
tmux.h
@ -1870,7 +1870,7 @@ void server_add_accept(int);
|
||||
|
||||
/* server-client.c */
|
||||
u_int server_client_how_many(void);
|
||||
void server_client_set_identify(struct client *);
|
||||
void server_client_set_identify(struct client *, u_int);
|
||||
void server_client_clear_identify(struct client *, struct window_pane *);
|
||||
void server_client_set_key_table(struct client *, const char *);
|
||||
const char *server_client_get_key_table(struct client *);
|
||||
|
Loading…
Reference in New Issue
Block a user