Preliminary solution to the stuttering problem.
							parent
							
								
									d81250e5f9
								
							
						
					
					
						commit
						9fbafe55c9
					
				
							
								
								
									
										27
									
								
								st.c
								
								
								
								
							
							
						
						
									
										27
									
								
								st.c
								
								
								
								
							| 
						 | 
				
			
			@ -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))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue