=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-kill-window.c,v retrieving revision 1.15 retrieving revision 1.16 diff -c -r1.15 -r1.16 *** src/usr.bin/tmux/cmd-kill-window.c 2014/10/20 22:29:25 1.15 --- src/usr.bin/tmux/cmd-kill-window.c 2014/10/22 23:11:41 1.16 *************** *** 1,4 **** ! /* $OpenBSD: cmd-kill-window.c,v 1.15 2014/10/20 22:29:25 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-kill-window.c,v 1.16 2014/10/22 23:11:41 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 34,56 **** cmd_kill_window_exec }; enum cmd_retval cmd_kill_window_exec(struct cmd *self, struct cmd_q *cmdq) { ! struct args *args = self->args; ! struct winlink *wl, *wl2, *wl3; ! struct session *s; if ((wl = cmd_find_window(cmdq, args_get(args, 't'), &s)) == NULL) return (CMD_RETURN_ERROR); ! if (args_has(args, 'a')) { ! RB_FOREACH_SAFE(wl2, winlinks, &s->windows, wl3) { ! if (wl != wl2) ! server_kill_window(wl2->window); } ! } else ! server_kill_window(wl->window); recalculate_sizes(); return (CMD_RETURN_NORMAL); --- 34,81 ---- cmd_kill_window_exec }; + const struct cmd_entry cmd_unlink_window_entry = { + "unlink-window", "unlinkw", + "kt:", 0, 0, + "[-k] " CMD_TARGET_WINDOW_USAGE, + 0, + cmd_kill_window_exec + }; + enum cmd_retval cmd_kill_window_exec(struct cmd *self, struct cmd_q *cmdq) { ! struct args *args = self->args; ! struct winlink *wl, *wl2, *wl3; ! struct window *w; ! struct session *s; ! struct session_group *sg; ! u_int references; if ((wl = cmd_find_window(cmdq, args_get(args, 't'), &s)) == NULL) return (CMD_RETURN_ERROR); + w = wl->window; ! if (self->entry == &cmd_unlink_window_entry) { ! sg = session_group_find(s); ! if (sg != NULL) ! references = session_group_count(sg); ! else ! references = 1; ! if (!args_has(self->args, 'k') && w->references == references) { ! cmdq_error(cmdq, "window only linked to one session"); ! return (CMD_RETURN_ERROR); } ! server_unlink_window(s, wl); ! } else { ! if (args_has(args, 'a')) { ! RB_FOREACH_SAFE(wl2, winlinks, &s->windows, wl3) { ! if (wl != wl2) ! server_kill_window(wl2->window); ! } ! } else ! server_kill_window(wl->window); ! } recalculate_sizes(); return (CMD_RETURN_NORMAL);