summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd-detach-client.c16
-rw-r--r--tmux.15
2 files changed, 17 insertions, 4 deletions
diff --git a/cmd-detach-client.c b/cmd-detach-client.c
index d8642757..6477e062 100644
--- a/cmd-detach-client.c
+++ b/cmd-detach-client.c
@@ -28,8 +28,8 @@ int cmd_detach_client_exec(struct cmd *, struct cmd_ctx *);
const struct cmd_entry cmd_detach_client_entry = {
"detach-client", "detach",
- "s:t:P", 0, 0,
- "[-P] [-s target-session] " CMD_TARGET_CLIENT_USAGE,
+ "as:t:P", 0, 0,
+ "[-P] [-a] [-s target-session] " CMD_TARGET_CLIENT_USAGE,
CMD_READONLY,
NULL,
NULL,
@@ -40,7 +40,7 @@ int
cmd_detach_client_exec(struct cmd *self, struct cmd_ctx *ctx)
{
struct args *args = self->args;
- struct client *c;
+ struct client *c, *c2;
struct session *s;
enum msgtype msgtype;
u_int i;
@@ -65,7 +65,15 @@ cmd_detach_client_exec(struct cmd *self, struct cmd_ctx *ctx)
if (c == NULL)
return (-1);
- server_write_client(c, msgtype, NULL, 0);
+ if (args_has(args, 'a')) {
+ for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
+ c2 = ARRAY_ITEM(&clients, i);
+ if (c2 == NULL || c == c2)
+ continue;
+ server_write_client(c2, msgtype, NULL, 0);
+ }
+ } else
+ server_write_client(c, msgtype, NULL, 0);
}
return (0);
diff --git a/tmux.1 b/tmux.1
index f190d7bf..826e1cac 100644
--- a/tmux.1
+++ b/tmux.1
@@ -585,6 +585,7 @@ recently used
session.
.It Xo Ic detach-client
.Op Fl P
+.Op Fl a
.Op Fl s Ar target-session
.Op Fl t Ar target-client
.Xc
@@ -593,6 +594,10 @@ Detach the current client if bound to a key, the client specified with
.Fl t ,
or all clients currently attached to the session specified by
.Fl s .
+The
+.Fl a
+option kills all but the client given with
+.Fl t .
If
.Fl P
is given, send SIGHUP to the parent process of the client, typically causing it