| 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); |