tPreliminary solution to the stuttering problem. - st - [fork] customized build… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 9fbafe55c996324a73a0be3af80edcd39e5a393b | |
parent d81250e5f96e96dd430a3fc61b5b47ffc04f98d8 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sun, 16 Sep 2012 13:22:23 +0200 | |
Preliminary solution to the stuttering problem. | |
Diffstat: | |
M st.c | 27 ++++++++++++++++++++++++--- | |
1 file changed, 24 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -48,7 +48,7 @@ | |
#define ESC_ARG_SIZ 16 | |
#define STR_BUF_SIZ 256 | |
#define STR_ARG_SIZ 16 | |
-#define DRAW_BUF_SIZ 1024 | |
+#define DRAW_BUF_SIZ 20*1024 | |
#define UTF_SIZ 4 | |
#define XK_NO_MOD UINT_MAX | |
#define XK_ANY_MOD 0 | |
t@@ -2329,7 +2329,8 @@ void | |
run(void) { | |
XEvent ev; | |
fd_set rfd; | |
- int xfd = XConnectionNumber(xw.dpy); | |
+ int xfd = XConnectionNumber(xw.dpy), i; | |
+ struct timeval drawtimeout; | |
for(;;) { | |
FD_ZERO(&rfd); | |
t@@ -2340,9 +2341,29 @@ run(void) { | |
continue; | |
die("select failed: %s\n", SERRNO); | |
} | |
- if(FD_ISSET(cmdfd, &rfd)) | |
+ | |
+ /* | |
+ * Stop after a certain number of reads so the user does not | |
+ * feel like the system is stuttering. | |
+ */ | |
+ for(i = 0; i < 1000 && FD_ISSET(cmdfd, &rfd); i++) { | |
ttyread(); | |
+ FD_ZERO(&rfd); | |
+ FD_SET(cmdfd, &rfd); | |
+ /* | |
+ * Just wait a bit so it isn't disturbing the | |
+ * user and the system is able to write something. | |
+ */ | |
+ drawtimeout.tv_sec = 0; | |
+ drawtimeout.tv_usec = 5; | |
+ if(select(cmdfd+1, &rfd, NULL, NULL, &drawtimeout) < 0… | |
+ if(errno == EINTR) | |
+ continue; | |
+ die("select failed: %s\n", SERRNO); | |
+ } | |
+ } | |
+ | |
while(XPending(xw.dpy)) { | |
XNextEvent(xw.dpy, &ev); | |
if(XFilterEvent(&ev, xw.win)) |