version 1.9, 2009/10/27 13:03:33 |
version 1.10, 2009/11/03 20:29:47 |
|
|
c->references = 0; |
c->references = 0; |
imsg_init(&c->ibuf, fd); |
imsg_init(&c->ibuf, fd); |
|
|
if (gettimeofday(&c->tv, NULL) != 0) |
if (gettimeofday(&c->creation_time, NULL) != 0) |
fatal("gettimeofday failed"); |
fatal("gettimeofday failed"); |
|
|
ARRAY_INIT(&c->prompt_hdata); |
ARRAY_INIT(&c->prompt_hdata); |
|
|
struct window_pane *wp; |
struct window_pane *wp; |
struct screen *s; |
struct screen *s; |
struct options *oo; |
struct options *oo; |
struct timeval tv; |
struct timeval tv_add, tv_now; |
struct key_binding *bd; |
struct key_binding *bd; |
struct keylist *keylist; |
struct keylist *keylist; |
struct mouse_event mouse; |
struct mouse_event mouse; |
int key, status, xtimeout, mode, isprefix; |
int key, status, xtimeout, mode, isprefix; |
u_int i; |
u_int i; |
|
|
|
/* Check and update repeat flag. */ |
|
if (gettimeofday(&tv_now, NULL) != 0) |
|
fatal("gettimeofday failed"); |
xtimeout = options_get_number(&c->session->options, "repeat-time"); |
xtimeout = options_get_number(&c->session->options, "repeat-time"); |
if (xtimeout != 0 && c->flags & CLIENT_REPEAT) { |
if (xtimeout != 0 && c->flags & CLIENT_REPEAT) { |
if (gettimeofday(&tv, NULL) != 0) |
if (timercmp(&tv_now, &c->repeat_timer, >)) |
fatal("gettimeofday failed"); |
|
if (timercmp(&tv, &c->repeat_timer, >)) |
|
c->flags &= ~(CLIENT_PREFIX|CLIENT_REPEAT); |
c->flags &= ~(CLIENT_PREFIX|CLIENT_REPEAT); |
} |
} |
|
|
|
|
while (tty_keys_next(&c->tty, &key, &mouse) == 0) { |
while (tty_keys_next(&c->tty, &key, &mouse) == 0) { |
if (c->session == NULL) |
if (c->session == NULL) |
return; |
return; |
|
|
c->session->activity = time(NULL); |
|
w = c->session->curw->window; |
w = c->session->curw->window; |
wp = w->active; /* could die */ |
wp = w->active; /* could die */ |
oo = &c->session->options; |
oo = &c->session->options; |
|
|
|
/* Update activity timer. */ |
|
memcpy(&c->session->activity_time, |
|
&tv_now, sizeof c->session->activity_time); |
|
|
/* Special case: number keys jump to pane in identify mode. */ |
/* Special case: number keys jump to pane in identify mode. */ |
if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') { |
if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') { |
wp = window_pane_at_index(w, key - '0'); |
wp = window_pane_at_index(w, key - '0'); |
|
|
if (xtimeout != 0 && bd->can_repeat) { |
if (xtimeout != 0 && bd->can_repeat) { |
c->flags |= CLIENT_PREFIX|CLIENT_REPEAT; |
c->flags |= CLIENT_PREFIX|CLIENT_REPEAT; |
|
|
tv.tv_sec = xtimeout / 1000; |
tv_add.tv_sec = xtimeout / 1000; |
tv.tv_usec = (xtimeout % 1000) * 1000L; |
tv_add.tv_usec = (xtimeout % 1000) * 1000L; |
if (gettimeofday(&c->repeat_timer, NULL) != 0) |
timeradd(&tv_now, &tv_add, &c->repeat_timer); |
fatal("gettimeofday failed"); |
|
timeradd(&c->repeat_timer, &tv, &c->repeat_timer); |
|
} |
} |
|
|
/* Dispatch the command. */ |
/* Dispatch the command. */ |
|
|
if (!(c->flags & CLIENT_SUSPENDED)) |
if (!(c->flags & CLIENT_SUSPENDED)) |
break; |
break; |
c->flags &= ~CLIENT_SUSPENDED; |
c->flags &= ~CLIENT_SUSPENDED; |
|
|
|
if (c->session != NULL && |
|
gettimeofday(&c->session->activity_time, NULL) != 0) |
|
fatal("gettimeofday failed"); |
|
|
tty_start_tty(&c->tty); |
tty_start_tty(&c->tty); |
server_redraw_client(c); |
server_redraw_client(c); |
recalculate_sizes(); |
recalculate_sizes(); |
if (c->session != NULL) |
|
c->session->activity = time(NULL); |
|
break; |
break; |
case MSG_ENVIRON: |
case MSG_ENVIRON: |
if (datalen != sizeof environdata) |
if (datalen != sizeof environdata) |
|
|
struct cmd *cmd; |
struct cmd *cmd; |
int argc; |
int argc; |
char **argv, *cause; |
char **argv, *cause; |
|
|
if (c->session != NULL) |
|
c->session->activity = time(NULL); |
|
|
|
ctx.error = server_client_msg_error; |
ctx.error = server_client_msg_error; |
ctx.print = server_client_msg_print; |
ctx.print = server_client_msg_print; |