mirror of
https://github.com/tmux/tmux.git
synced 2024-11-08 04:08:49 +00:00
Sync OpenBSD patchset 507:
Convert the key repeat timer to an event.
This commit is contained in:
parent
81336d6bb0
commit
ac6092c27f
@ -1,4 +1,4 @@
|
|||||||
/* $Id: server-client.c,v 1.17 2009-11-08 23:12:35 tcunha Exp $ */
|
/* $Id: server-client.c,v 1.18 2009-11-08 23:24:59 tcunha Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -27,6 +27,7 @@
|
|||||||
#include "tmux.h"
|
#include "tmux.h"
|
||||||
|
|
||||||
void server_client_handle_data(struct client *);
|
void server_client_handle_data(struct client *);
|
||||||
|
void server_client_repeat_timer(int, short, void *);
|
||||||
void server_client_check_redraw(struct client *);
|
void server_client_check_redraw(struct client *);
|
||||||
void server_client_set_title(struct client *);
|
void server_client_set_title(struct client *);
|
||||||
|
|
||||||
@ -40,7 +41,6 @@ void printflike2 server_client_msg_error(struct cmd_ctx *, const char *, ...);
|
|||||||
void printflike2 server_client_msg_print(struct cmd_ctx *, const char *, ...);
|
void printflike2 server_client_msg_print(struct cmd_ctx *, const char *, ...);
|
||||||
void printflike2 server_client_msg_info(struct cmd_ctx *, const char *, ...);
|
void printflike2 server_client_msg_info(struct cmd_ctx *, const char *, ...);
|
||||||
|
|
||||||
|
|
||||||
/* Create a new client. */
|
/* Create a new client. */
|
||||||
void
|
void
|
||||||
server_client_create(int fd)
|
server_client_create(int fd)
|
||||||
@ -83,6 +83,8 @@ server_client_create(int fd)
|
|||||||
c->prompt_buffer = NULL;
|
c->prompt_buffer = NULL;
|
||||||
c->prompt_index = 0;
|
c->prompt_index = 0;
|
||||||
|
|
||||||
|
evtimer_set(&c->repeat_timer, server_client_repeat_timer, c);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
|
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
|
||||||
if (ARRAY_ITEM(&clients, i) == NULL) {
|
if (ARRAY_ITEM(&clients, i) == NULL) {
|
||||||
ARRAY_SET(&clients, i, c);
|
ARRAY_SET(&clients, i, c);
|
||||||
@ -118,6 +120,8 @@ server_client_lost(struct client *c)
|
|||||||
if (c->title != NULL)
|
if (c->title != NULL)
|
||||||
xfree(c->title);
|
xfree(c->title);
|
||||||
|
|
||||||
|
evtimer_del(&c->repeat_timer);
|
||||||
|
|
||||||
evtimer_del(&c->identify_timer);
|
evtimer_del(&c->identify_timer);
|
||||||
|
|
||||||
if (c->message_string != NULL)
|
if (c->message_string != NULL)
|
||||||
@ -263,21 +267,17 @@ server_client_handle_data(struct client *c)
|
|||||||
struct window_pane *wp;
|
struct window_pane *wp;
|
||||||
struct screen *s;
|
struct screen *s;
|
||||||
struct options *oo;
|
struct options *oo;
|
||||||
struct timeval tv_add, tv_now;
|
struct timeval tv, 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. */
|
/* Get the time for the activity timer. */
|
||||||
if (gettimeofday(&tv_now, NULL) != 0)
|
if (gettimeofday(&tv_now, NULL) != 0)
|
||||||
fatal("gettimeofday failed");
|
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 (timercmp(&tv_now, &c->repeat_timer, >))
|
|
||||||
c->flags &= ~(CLIENT_PREFIX|CLIENT_REPEAT);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Process keys. */
|
/* Process keys. */
|
||||||
keylist = options_get_data(&c->session->options, "prefix");
|
keylist = options_get_data(&c->session->options, "prefix");
|
||||||
@ -370,9 +370,10 @@ server_client_handle_data(struct client *c)
|
|||||||
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_add.tv_sec = xtimeout / 1000;
|
tv.tv_sec = xtimeout / 1000;
|
||||||
tv_add.tv_usec = (xtimeout % 1000) * 1000L;
|
tv.tv_usec = (xtimeout % 1000) * 1000L;
|
||||||
timeradd(&tv_now, &tv_add, &c->repeat_timer);
|
evtimer_del(&c->repeat_timer);
|
||||||
|
evtimer_add(&c->repeat_timer, &tv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dispatch the command. */
|
/* Dispatch the command. */
|
||||||
@ -411,6 +412,16 @@ server_client_handle_data(struct client *c)
|
|||||||
tty_reset(&c->tty);
|
tty_reset(&c->tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Repeat time callback. */
|
||||||
|
void
|
||||||
|
server_client_repeat_timer(unused int fd, unused short events, void *data)
|
||||||
|
{
|
||||||
|
struct client *c = data;
|
||||||
|
|
||||||
|
if (c->flags & CLIENT_REPEAT)
|
||||||
|
c->flags &= ~(CLIENT_PREFIX|CLIENT_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
/* Check for client redraws. */
|
/* Check for client redraws. */
|
||||||
void
|
void
|
||||||
server_client_check_redraw(struct client *c)
|
server_client_check_redraw(struct client *c)
|
||||||
|
4
tmux.h
4
tmux.h
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tmux.h,v 1.506 2009-11-08 23:22:24 tcunha Exp $ */
|
/* $Id: tmux.h,v 1.507 2009-11-08 23:24:59 tcunha Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -1055,7 +1055,7 @@ struct client {
|
|||||||
char *cwd;
|
char *cwd;
|
||||||
|
|
||||||
struct tty tty;
|
struct tty tty;
|
||||||
struct timeval repeat_timer;
|
struct event repeat_timer;
|
||||||
|
|
||||||
struct timeval status_timer;
|
struct timeval status_timer;
|
||||||
struct jobs status_jobs;
|
struct jobs status_jobs;
|
||||||
|
Loading…
Reference in New Issue
Block a user