tRemove timeout in the main loop - st - [fork] customized build of st, the simp… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 85849ce72aa4e9cee307a031b97777e9eba2d453 | |
parent 15cc8754c2e272ebac6e86845859816e881da000 | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
Date: Sun, 16 Sep 2012 10:47:21 +0200 | |
Remove timeout in the main loop | |
The main loop waits until there is some data to read in file descriptors of | |
tthe X server or the pseudo tty. But it uses a timeout in select(), which | |
causes that st awake each 20 ms, even it doesn't have something to do. This | |
patch removes this problem removing the timeout, which is not needed. | |
--- | |
TODO | 1 - | |
st.c | 27 +++------------------------ | |
2 files changed, 3 insertions(+), 25 deletions(-) | |
Diffstat: | |
M TODO | 1 - | |
M st.c | 27 +++------------------------ | |
2 files changed, 3 insertions(+), 25 deletions(-) | |
--- | |
diff --git a/TODO b/TODO | |
t@@ -15,7 +15,6 @@ code & interface | |
* clean selection code | |
* clean and complete terminfo entry | |
-* remove the timeouts in the main loop | |
bugs | |
---- | |
diff --git a/st.c b/st.c | |
t@@ -53,8 +53,6 @@ | |
#define XK_NO_MOD UINT_MAX | |
#define XK_ANY_MOD 0 | |
-#define SELECT_TIMEOUT (20*1000) /* 20 ms */ | |
-#define DRAW_TIMEOUT (20*1000) /* 20 ms */ | |
#define REDRAW_TIMEOUT (80*1000) /* 80 ms */ | |
#define SERRNO strerror(errno) | |
t@@ -205,7 +203,6 @@ typedef struct { | |
int ch; /* char height */ | |
int cw; /* char width */ | |
char state; /* focus, redraw, visible */ | |
- struct timeval lastdraw; | |
} XWindow; | |
typedef struct { | |
t@@ -250,7 +247,6 @@ static void drawregion(int, int, int, int); | |
static void execsh(void); | |
static void sigchld(int); | |
static void run(void); | |
-static bool last_draw_too_old(void); | |
static void csidump(void); | |
static void csihandle(void); | |
t@@ -2158,7 +2154,6 @@ void | |
draw() { | |
drawregion(0, 0, term.col, term.row); | |
xcopy(); | |
- gettimeofday(&xw.lastdraw, NULL); | |
} | |
void | |
t@@ -2345,41 +2340,25 @@ resize(XEvent *e) { | |
ttyresize(col, row); | |
} | |
-bool | |
-last_draw_too_old(void) { | |
- struct timeval now; | |
- gettimeofday(&now, NULL); | |
- return TIMEDIFF(now, xw.lastdraw) >= DRAW_TIMEOUT/1000; | |
-} | |
- | |
void | |
run(void) { | |
XEvent ev; | |
fd_set rfd; | |
int xfd = XConnectionNumber(xw.dpy); | |
- struct timeval timeout = {0}; | |
- bool stuff_to_print = 0; | |
for(;;) { | |
FD_ZERO(&rfd); | |
FD_SET(cmdfd, &rfd); | |
FD_SET(xfd, &rfd); | |
- timeout.tv_sec = 0; | |
- timeout.tv_usec = SELECT_TIMEOUT; | |
- if(select(MAX(xfd, cmdfd)+1, &rfd, NULL, NULL, &timeout) < 0) { | |
+ if(select(MAX(xfd, cmdfd)+1, &rfd, NULL, NULL, NULL) < 0) { | |
if(errno == EINTR) | |
continue; | |
die("select failed: %s\n", SERRNO); | |
} | |
- if(FD_ISSET(cmdfd, &rfd)) { | |
+ if(FD_ISSET(cmdfd, &rfd)) | |
ttyread(); | |
- stuff_to_print = 1; | |
- } | |
- if(stuff_to_print && last_draw_too_old()) { | |
- stuff_to_print = 0; | |
- draw(); | |
- } | |
+ draw(); | |
while(XPending(xw.dpy)) { | |
XNextEvent(xw.dpy, &ev); |