diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-11-12 14:21:41 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-11-12 14:21:41 +0000 |
commit | e4a6cdefda66dbc7b4cab944975e5d9053e3f862 (patch) | |
tree | 5e906739ca641f071b1ebbef6be0f2410f267c62 /cmd-kill-session.c | |
parent | 6409f2b406a8d9378461f614a203346ecdc6b532 (diff) |
kill-window command.
Diffstat (limited to 'cmd-kill-session.c')
-rw-r--r-- | cmd-kill-session.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/cmd-kill-session.c b/cmd-kill-session.c new file mode 100644 index 00000000..45479624 --- /dev/null +++ b/cmd-kill-session.c @@ -0,0 +1,64 @@ +/* $Id: cmd-kill-session.c,v 1.1 2007-11-12 14:21:40 nicm Exp $ */ + +/* + * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <sys/types.h> + +#include <getopt.h> +#include <stdlib.h> + +#include "tmux.h" + +/* + * Destroy session, detaching all clients attached to it and destroying any + * windows linked only to this session. + * + * Note this deliberately has no alias to make it hard to hit by accident. + */ + +void cmd_kill_session_exec(void *, struct cmd_ctx *); + +const struct cmd_entry cmd_kill_session_entry = { + "kill-session", NULL, "", + 0, + NULL, + cmd_kill_session_exec, + NULL, + NULL, + NULL, +}; + +void +cmd_kill_session_exec(unused void *ptr, struct cmd_ctx *ctx) +{ + struct client *c; + struct session *s = ctx->session; + u_int i; + + for (i = 0; i < ARRAY_LENGTH(&clients); i++) { + c = ARRAY_ITEM(&clients, i); + if (c->session == s) { + c->session = NULL; + server_write_client(c, MSG_EXIT, NULL, 0); + } + } + + session_destroy(s); + + if (!(ctx->flags & CMD_KEY)) + server_write_client(ctx->client, MSG_EXIT, NULL, 0); +} |