version 1.64, 2020/04/13 14:46:04 |
version 1.65, 2020/04/13 20:51:57 |
|
|
|
|
/* -t is special */ |
/* -t is special */ |
|
|
.flags = CMD_READONLY, |
.flags = CMD_READONLY|CMD_CLIENT_CFLAG, |
.exec = cmd_switch_client_exec |
.exec = cmd_switch_client_exec |
}; |
}; |
|
|
|
|
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; |
struct client *c; |
struct client *tc = cmdq_get_target_client(item); |
struct session *s; |
struct session *s; |
struct winlink *wl; |
struct winlink *wl; |
struct window *w; |
struct window *w; |
|
|
const char *tablename; |
const char *tablename; |
struct key_table *table; |
struct key_table *table; |
|
|
if ((c = cmd_find_client(item, args_get(args, 'c'), 0)) == NULL) |
|
return (CMD_RETURN_ERROR); |
|
|
|
if (tflag != NULL && tflag[strcspn(tflag, ":.%")] != '\0') { |
if (tflag != NULL && tflag[strcspn(tflag, ":.%")] != '\0') { |
type = CMD_FIND_PANE; |
type = CMD_FIND_PANE; |
flags = 0; |
flags = 0; |
|
|
wp = target.wp; |
wp = target.wp; |
|
|
if (args_has(args, 'r')) |
if (args_has(args, 'r')) |
c->flags ^= CLIENT_READONLY; |
tc->flags ^= CLIENT_READONLY; |
|
|
tablename = args_get(args, 'T'); |
tablename = args_get(args, 'T'); |
if (tablename != NULL) { |
if (tablename != NULL) { |
|
|
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
table->references++; |
table->references++; |
key_bindings_unref_table(c->keytable); |
key_bindings_unref_table(tc->keytable); |
c->keytable = table; |
tc->keytable = table; |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |
|
|
if (args_has(args, 'n')) { |
if (args_has(args, 'n')) { |
if ((s = session_next_session(c->session)) == NULL) { |
if ((s = session_next_session(tc->session)) == NULL) { |
cmdq_error(item, "can't find next session"); |
cmdq_error(item, "can't find next session"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
} else if (args_has(args, 'p')) { |
} else if (args_has(args, 'p')) { |
if ((s = session_previous_session(c->session)) == NULL) { |
if ((s = session_previous_session(tc->session)) == NULL) { |
cmdq_error(item, "can't find previous session"); |
cmdq_error(item, "can't find previous session"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
} else if (args_has(args, 'l')) { |
} else if (args_has(args, 'l')) { |
if (c->last_session != NULL && session_alive(c->last_session)) |
if (tc->last_session != NULL && session_alive(tc->last_session)) |
s = c->last_session; |
s = tc->last_session; |
else |
else |
s = NULL; |
s = NULL; |
if (s == NULL) { |
if (s == NULL) { |
|
|
} |
} |
|
|
if (!args_has(args, 'E')) |
if (!args_has(args, 'E')) |
environ_update(s->options, c->environ, s->environ); |
environ_update(s->options, tc->environ, s->environ); |
|
|
if (c->session != NULL && c->session != s) |
if (tc->session != NULL && tc->session != s) |
c->last_session = c->session; |
tc->last_session = tc->session; |
c->session = s; |
tc->session = s; |
if (~cmdq_get_flags(item) & CMDQ_STATE_REPEAT) |
if (~cmdq_get_flags(item) & CMDQ_STATE_REPEAT) |
server_client_set_key_table(c, NULL); |
server_client_set_key_table(tc, NULL); |
tty_update_client_offset(c); |
tty_update_client_offset(tc); |
status_timer_start(c); |
status_timer_start(tc); |
notify_client("client-session-changed", c); |
notify_client("client-session-changed", tc); |
session_update_activity(s, NULL); |
session_update_activity(s, NULL); |
gettimeofday(&s->last_attached_time, NULL); |
gettimeofday(&s->last_attached_time, NULL); |
|
|
server_check_unattached(); |
server_check_unattached(); |
server_redraw_client(c); |
server_redraw_client(tc); |
s->curw->flags &= ~WINLINK_ALERTFLAGS; |
s->curw->flags &= ~WINLINK_ALERTFLAGS; |
s->curw->window->latest = c; |
s->curw->window->latest = tc; |
recalculate_sizes(); |
recalculate_sizes(); |
alerts_check_session(s); |
alerts_check_session(s); |
|
|