diff -r 9550074991e1 st.c --- a/st.c Tue Feb 07 23:53:45 2012 +0100 +++ b/st.c Thu Feb 09 17:09:59 2012 +0100 @@ -50,8 +50,8 @@ #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 SELECT_TIMEOUT (20*1000) /* 20 ms */ +#define DRAW_TIMEOUT (200*1000) /* 200 ms */ #define SERRNO strerror(errno) #define MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -2050,17 +2050,19 @@ 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, stuff_to_print ? &timeout : NULL) < 0) { if(errno == EINTR) continue; die("select failed: %s\n", SERRNO); } if(FD_ISSET(cmdfd, &rfd)) { ttyread(); - stuff_to_print = 1; - } - - if(stuff_to_print && last_draw_too_old()) { + if(last_draw_too_old()) { + stuff_to_print = 0; + draw(); + } else + stuff_to_print = 1; + } else if(!FD_ISSET(xfd, &rfd) && stuff_to_print) { stuff_to_print = 0; draw(); }