~petersanchez/st

9fbafe55c996324a73a0be3af80edcd39e5a393b — Christoph Lohmann 11 years ago d81250e
Preliminary solution to the stuttering problem.
1 files changed, 24 insertions(+), 3 deletions(-)

M st.c
M st.c => st.c +24 -3
@@ 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


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


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