--- rxvt-unicode/src/command.C 2005/12/31 17:16:17 1.219 +++ rxvt-unicode/src/command.C 2006/01/01 05:28:28 1.223 @@ -56,6 +56,11 @@ #include +#define HAVE_SCHED_YIELD 1 //D//TODO//FIXME +#if HAVE_SCHED_YIELD +# include +#endif + /*----------------------------------------------------------------------*/ #define IS_CONTROL(ch) !((ch) & 0xffffff60UL) @@ -157,12 +162,10 @@ x--; } } -#endif void rxvt_term::iso14755_51 (unicode_t ch, rend_t r, int x, int y) { -#if ENABLE_OVERLAY rxvt_fontset *fs = FONTSET (r); rxvt_font *f = (*fs)[fs->find_font (ch)]; wchar_t *chr, *alloc, ch2, *fname; @@ -240,8 +243,8 @@ if (alloc) delete [] alloc; # endif -#endif } +#endif void rxvt_term::commit_iso14755 () @@ -1084,14 +1087,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 (); @@ -4050,6 +4059,17 @@ /* extra handling for values with state unkept */ switch (arg[i]) { +#if ENABLE_STYLES + case 1021: + if (mode) + SET_OPTION (Opt_intensityStyles); + else + CLR_OPTION (Opt_intensityStyles); + + want_refresh = 1; + want_full_refresh = 1; + break; +#endif case 1048: /* alternative cursor save */ case 1049: if (OPTION (Opt_secondaryScreen)) @@ -4142,13 +4162,6 @@ else CLR_OPTION (Opt_scrollTtyKeypress); break; -#if ENABLE_STYLES - case 1021: - if (state) - SET_OPTION (Opt_intensityStyles); - else - CLR_OPTION (Opt_intensityStyles); -#endif case 1047: /* secondary screen w/ clearing last */ if (OPTION (Opt_secondaryScreen)) if (current_screen != PRIMARY) @@ -4317,7 +4330,6 @@ scr_color ((unsigned int) (minBrightCOLOR + (arg[i] - 100)), Color_bg); break; #endif - } } }