version 1.77, 2019/04/17 14:37:48 |
version 1.78, 2019/06/03 18:28:37 |
|
|
.name = "attach-session", |
.name = "attach-session", |
.alias = "attach", |
.alias = "attach", |
|
|
.args = { "c:dErt:", 0, 0 }, |
.args = { "c:dErt:x", 0, 0 }, |
.usage = "[-dEr] [-c working-directory] " CMD_TARGET_SESSION_USAGE, |
.usage = "[-dErx] [-c working-directory] " CMD_TARGET_SESSION_USAGE, |
|
|
/* -t is special */ |
/* -t is special */ |
|
|
|
|
|
|
enum cmd_retval |
enum cmd_retval |
cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, |
cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, |
int rflag, const char *cflag, int Eflag) |
int xflag, int rflag, const char *cflag, int Eflag) |
{ |
{ |
struct cmd_find_state *current = &item->shared->current; |
struct cmd_find_state *current = &item->shared->current; |
enum cmd_find_type type; |
enum cmd_find_type type; |
|
|
struct winlink *wl; |
struct winlink *wl; |
struct window_pane *wp; |
struct window_pane *wp; |
char *cause; |
char *cause; |
|
enum msgtype msgtype; |
|
|
if (RB_EMPTY(&sessions)) { |
if (RB_EMPTY(&sessions)) { |
cmdq_error(item, "no sessions"); |
cmdq_error(item, "no sessions"); |
|
|
|
|
c->last_session = c->session; |
c->last_session = c->session; |
if (c->session != NULL) { |
if (c->session != NULL) { |
if (dflag) { |
if (dflag || xflag) { |
|
if (xflag) |
|
msgtype = MSG_DETACHKILL; |
|
else |
|
msgtype = MSG_DETACH; |
TAILQ_FOREACH(c_loop, &clients, entry) { |
TAILQ_FOREACH(c_loop, &clients, entry) { |
if (c_loop->session != s || c == c_loop) |
if (c_loop->session != s || c == c_loop) |
continue; |
continue; |
server_client_detach(c_loop, MSG_DETACH); |
server_client_detach(c_loop, msgtype); |
} |
} |
} |
} |
if (!Eflag) |
if (!Eflag) |
|
|
if (rflag) |
if (rflag) |
c->flags |= CLIENT_READONLY; |
c->flags |= CLIENT_READONLY; |
|
|
if (dflag) { |
if (dflag || xflag) { |
|
if (xflag) |
|
msgtype = MSG_DETACHKILL; |
|
else |
|
msgtype = MSG_DETACH; |
TAILQ_FOREACH(c_loop, &clients, entry) { |
TAILQ_FOREACH(c_loop, &clients, entry) { |
if (c_loop->session != s || c == c_loop) |
if (c_loop->session != s || c == c_loop) |
continue; |
continue; |
server_client_detach(c_loop, MSG_DETACH); |
server_client_detach(c_loop, msgtype); |
} |
} |
} |
} |
if (!Eflag) |
if (!Eflag) |
|
|
struct args *args = self->args; |
struct args *args = self->args; |
|
|
return (cmd_attach_session(item, args_get(args, 't'), |
return (cmd_attach_session(item, args_get(args, 't'), |
args_has(args, 'd'), args_has(args, 'r'), args_get(args, 'c'), |
args_has(args, 'd'), args_has(args, 'x'), args_has(args, 'r'), |
args_has(args, 'E'))); |
args_get(args, 'c'), args_has(args, 'E'))); |
} |
} |