aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2017-08-16 14:01:15 +0100
committerThomas Adam <thomas@xteddy.org>2017-08-16 14:01:15 +0100
commit2103a09430142725ea933dcf434c79460ab419f1 (patch)
treea5ee1d7b8a303078b713a891edc0a177082522bb
parent0824850bbce86c395230700cb10c81f162319858 (diff)
parentc6a8ad23a14034ee956bcb45748f743ef5d0c1fc (diff)
downloadrtmux-2103a09430142725ea933dcf434c79460ab419f1.tar.gz
rtmux-2103a09430142725ea933dcf434c79460ab419f1.tar.bz2
rtmux-2103a09430142725ea933dcf434c79460ab419f1.zip
Merge branch 'obsd-master'
-rw-r--r--alerts.c14
-rw-r--r--cmd-display-panes.c19
-rw-r--r--options-table.c6
-rw-r--r--server-client.c7
-rw-r--r--tmux.113
-rw-r--r--tmux.h12
6 files changed, 46 insertions, 25 deletions
diff --git a/alerts.c b/alerts.c
index 790ce38e..9c9bdf3b 100644
--- a/alerts.c
+++ b/alerts.c
@@ -267,11 +267,11 @@ alerts_set_message(struct session *s, struct window *w, struct winlink *wl,
int flag;
/*
- * We have found an alert (bell, activity or silence), so we need
- * to notify the user. For each client attached to this session,
+ * We have found an alert (bell, activity or silence), so we need to
+ * pass it on to the user. For each client attached to this session,
* decide whether a bell (or visual message) is needed.
*
- * {bell,activity,silence}-action determines when we notify: none means
+ * {bell,activity,silence}-action determines when we alert: none means
* nothing happens, current means we only do something for the current
* window and other means only for windows other than the current.
*
@@ -280,17 +280,17 @@ alerts_set_message(struct session *s, struct window *w, struct winlink *wl,
* mean both a bell and visual message is sent.
*/
- if (action == BELL_NONE)
+ if (action == ALERT_NONE)
return;
TAILQ_FOREACH(c, &clients, entry) {
if (c->session != s || c->flags & CLIENT_CONTROL)
continue;
flag = 0;
- if (action == BELL_ANY)
+ if (action == ALERT_ANY)
flag = 1;
- else if (action == BELL_CURRENT)
+ else if (action == ALERT_CURRENT)
flag = (c->session->curw->window == w);
- else if (action == BELL_OTHER)
+ else if (action == ALERT_OTHER)
flag = (c->session->curw->window != w);
if (!flag)
continue;
diff --git a/cmd-display-panes.c b/cmd-display-panes.c
index 5593b268..c124a631 100644
--- a/cmd-display-panes.c
+++ b/cmd-display-panes.c
@@ -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);
}
diff --git a/options-table.c b/options-table.c
index 705e11c6..ded8438d 100644
--- a/options-table.c
+++ b/options-table.c
@@ -149,7 +149,7 @@ const struct options_table_entry options_table[] = {
.type = OPTIONS_TABLE_CHOICE,
.scope = OPTIONS_TABLE_SESSION,
.choices = options_table_bell_action_list,
- .default_num = BELL_OTHER
+ .default_num = ALERT_OTHER
},
{ .name = "assume-paste-time",
@@ -172,7 +172,7 @@ const struct options_table_entry options_table[] = {
.type = OPTIONS_TABLE_CHOICE,
.scope = OPTIONS_TABLE_SESSION,
.choices = options_table_bell_action_list,
- .default_num = BELL_ANY
+ .default_num = ALERT_ANY
},
{ .name = "default-command",
@@ -357,7 +357,7 @@ const struct options_table_entry options_table[] = {
.type = OPTIONS_TABLE_CHOICE,
.scope = OPTIONS_TABLE_SESSION,
.choices = options_table_bell_action_list,
- .default_num = BELL_OTHER
+ .default_num = ALERT_OTHER
},
{ .name = "status",
diff --git a/server-client.c b/server-client.c
index 61d4f45f..cf9e8b31 100644
--- a/server-client.c
+++ b/server-client.c
@@ -72,19 +72,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);
diff --git a/tmux.1 b/tmux.1
index 367287a2..3fa1ad8c 100644
--- a/tmux.1
+++ b/tmux.1
@@ -1465,6 +1465,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
@@ -1472,11 +1473,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
diff --git a/tmux.h b/tmux.h
index 2ce80843..1989fc55 100644
--- a/tmux.h
+++ b/tmux.h
@@ -81,11 +81,11 @@ struct tmuxproc;
#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
#endif
-/* Bell option values. */
-#define BELL_NONE 0
-#define BELL_ANY 1
-#define BELL_CURRENT 2
-#define BELL_OTHER 3
+/* Alert option values. */
+#define ALERT_NONE 0
+#define ALERT_ANY 1
+#define ALERT_CURRENT 2
+#define ALERT_OTHER 3
/* Visual option values. */
#define VISUAL_OFF 0
@@ -1874,7 +1874,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 *);