version 1.61, 2020/04/13 08:26:27 |
version 1.62, 2020/04/13 10:59:58 |
|
|
cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) |
cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) |
{ |
{ |
struct args *args = cmd_get_args(self); |
struct args *args = cmd_get_args(self); |
|
struct cmdq_shared *shared = cmdq_get_shared(item); |
|
struct cmd_find_state *current = &shared->current; |
|
struct cmd_find_state target; |
const char *tflag = args_get(args, 't'); |
const char *tflag = args_get(args, 't'); |
enum cmd_find_type type; |
enum cmd_find_type type; |
int flags; |
int flags; |
|
|
type = CMD_FIND_SESSION; |
type = CMD_FIND_SESSION; |
flags = CMD_FIND_PREFER_UNATTACHED; |
flags = CMD_FIND_PREFER_UNATTACHED; |
} |
} |
if (cmd_find_target(&item->target, item, tflag, type, flags) != 0) |
if (cmd_find_target(&target, item, tflag, type, flags) != 0) |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
s = item->target.s; |
s = target.s; |
wl = item->target.wl; |
wl = target.wl; |
wp = item->target.wp; |
wp = target.wp; |
|
|
if (args_has(args, 'r')) |
if (args_has(args, 'r')) |
c->flags ^= CLIENT_READONLY; |
c->flags ^= CLIENT_READONLY; |
|
|
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
} else { |
} else { |
if (item->client == NULL) |
if (cmdq_get_client(item) == NULL) |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
if (wl != NULL && wp != NULL) { |
if (wl != NULL && wp != NULL) { |
w = wl->window; |
w = wl->window; |
|
|
} |
} |
if (wl != NULL) { |
if (wl != NULL) { |
session_set_current(s, wl); |
session_set_current(s, wl); |
cmd_find_from_session(&item->shared->current, s, 0); |
cmd_find_from_session(current, s, 0); |
} |
} |
} |
} |
|
|
|
|
if (c->session != NULL && c->session != s) |
if (c->session != NULL && c->session != s) |
c->last_session = c->session; |
c->last_session = c->session; |
c->session = s; |
c->session = s; |
if (~item->shared->flags & CMDQ_SHARED_REPEAT) |
if (~shared->flags & CMDQ_SHARED_REPEAT) |
server_client_set_key_table(c, NULL); |
server_client_set_key_table(c, NULL); |
tty_update_client_offset(c); |
tty_update_client_offset(c); |
status_timer_start(c); |
status_timer_start(c); |