--- rxvt-unicode/src/command.C 2005/12/31 18:19:06 1.220 +++ rxvt-unicode/src/command.C 2006/01/01 15:03:49 1.226 @@ -50,6 +50,10 @@ #include "version.h" #include "command.h" +#if HAVE_SCHED_YIELD +# include +#endif + #ifdef KEYSYM_RESOURCE # include "keyboard.h" #endif @@ -982,7 +986,7 @@ display->flush (); if (want_refresh && !flush_ev.active) - flush_ev.start (NOW + 0.01); + flush_ev.start (NOW + 1. / 60.); // refresh at max. 60 hz normally } void @@ -1082,14 +1086,20 @@ cmdbuf_ptr = cmdbuf_base; cmdbuf_endp = cmdbuf_ptr + n; - n = read (pty.pty, cmdbuf_endp, CBUFSIZ - n); + ssize_t r = read (pty.pty, cmdbuf_endp, CBUFSIZ - n); - if (n > 0) + if (r > 0) { - cmdbuf_endp += n; + cmdbuf_endp += r; return true; } - else if ((n < 0 && errno != EAGAIN && errno != EINTR) || n == 0) + else if (r < 0 && (errno == EAGAIN || errno == EINTR)) + { +#if HAVE_SCHED_YIELD + sched_yield (); +#endif + } + else { pty_ev.stop (); @@ -2686,6 +2696,7 @@ || (refresh_count >= refresh_limit * (nrow - 1))) { refreshnow = true; + refresh_count = 0; ch = NOCHAR; break; } @@ -2732,6 +2743,7 @@ { flag = true; scr_refresh (refresh_type); + flush_ev.stop (); } } @@ -4054,6 +4066,9 @@ SET_OPTION (Opt_intensityStyles); else CLR_OPTION (Opt_intensityStyles); + + scr_touch (true); + break; #endif case 1048: /* alternative cursor save */ case 1049: @@ -4315,7 +4330,6 @@ scr_color ((unsigned int) (minBrightCOLOR + (arg[i] - 100)), Color_bg); break; #endif - } } }