1
0
mirror of https://github.com/tmux/tmux.git synced 2025-04-22 20:38:48 +00:00

Use pointer rather than index for the client's last session.

This commit is contained in:
Nicholas Marriott 2010-12-20 00:17:22 +00:00
parent a51dcdc430
commit 9358cfaf4a
5 changed files with 14 additions and 16 deletions

View File

@ -122,7 +122,7 @@ int
cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx) cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
{ {
struct cmd_new_session_data *data = self->data; struct cmd_new_session_data *data = self->data;
struct session *s, *groupwith; struct session *s, *old_s, *groupwith;
struct window *w; struct window *w;
struct window_pane *wp; struct window_pane *wp;
struct environ env; struct environ env;
@ -279,17 +279,16 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
if (!detached) { if (!detached) {
if (ctx->cmdclient != NULL) { if (ctx->cmdclient != NULL) {
server_write_client(ctx->cmdclient, MSG_READY, NULL, 0); server_write_client(ctx->cmdclient, MSG_READY, NULL, 0);
if (ctx->cmdclient->session != NULL) {
session_index(ctx->cmdclient->session, old_s = ctx->cmdclient->session;
&ctx->cmdclient->last_session); if (old_s != NULL)
} ctx->cmdclient->last_session = old_s;
ctx->cmdclient->session = s; ctx->cmdclient->session = s;
server_redraw_client(ctx->cmdclient); server_redraw_client(ctx->cmdclient);
} else { } else {
if (ctx->curclient->session != NULL) { old_s = ctx->curclient->session;
session_index(ctx->curclient->session, if (old_s != NULL)
&ctx->curclient->last_session); ctx->curclient->last_session = old_s;
}
ctx->curclient->session = s; ctx->curclient->session = s;
server_redraw_client(ctx->curclient); server_redraw_client(ctx->curclient);
} }

View File

@ -159,9 +159,8 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx)
return (-1); return (-1);
} }
} else if (data->flag_last) { } else if (data->flag_last) {
if (c->last_session != UINT_MAX && if (c->last_session != NULL && session_alive(c->last_session))
c->last_session < ARRAY_LENGTH(&sessions)) s = c->last_session;
s = ARRAY_ITEM(&sessions, c->last_session);
if (s == NULL) { if (s == NULL) {
ctx->error(ctx, "can't find last session"); ctx->error(ctx, "can't find last session");
return (-1); return (-1);
@ -172,7 +171,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_ctx *ctx)
return (-1); return (-1);
if (c->session != NULL) if (c->session != NULL)
session_index(c->session, &c->last_session); c->last_session = c->session;
c->session = s; c->session = s;
recalculate_sizes(); recalculate_sizes();

View File

@ -78,7 +78,7 @@ server_client_create(int fd)
c->title = NULL; c->title = NULL;
c->session = NULL; c->session = NULL;
c->last_session = UINT_MAX; c->last_session = NULL;
c->tty.sx = 80; c->tty.sx = 80;
c->tty.sy = 24; c->tty.sy = 24;

View File

@ -399,7 +399,7 @@ server_destroy_session(struct session *s)
c->session = NULL; c->session = NULL;
c->flags |= CLIENT_EXIT; c->flags |= CLIENT_EXIT;
} else { } else {
c->last_session = UINT_MAX; c->last_session = NULL;
c->session = s_new; c->session = s_new;
server_redraw_client(c); server_redraw_client(c);
} }

2
tmux.h
View File

@ -1155,7 +1155,7 @@ struct client {
struct mode_key_data prompt_mdata; struct mode_key_data prompt_mdata;
struct session *session; struct session *session;
u_int last_session; struct session *last_session;
int references; int references;
}; };