TODO: /*TODO: the xlceararea/xfillrectangle below don't take scroll offste into account, ask mikachu for details */
+TODO: investgate wm resize race: while sleep 0.001; do printf "\033[?30l";sleep 0.001;printf "\033[?30h";done
+TODO: investigate miroslav patches
TODO: artificially enlargen wide characters at end to correctly cut&paste.
TODO: cursor over overlays, when focus change?
- remove bogus "setuid/setgid security issues" from rxvt.1.pod, they
- ignore byte-order marks and do not treat them like combining characters.
- fix build issue when CURSOR_BLINK is not defined (Emanuele Giaquinta).
- do some ยต-optimisations to the character fast path.
+ - use a less cunning, but more robust algorithm to avoid one terminal
+ monopolising the whole process by outputting a lot of text.
- try to work around linux first breaking sched_yield and now breaking
the only known workaround.
if (revents & ev::READ)
// loop, but don't allow a single term to monopolize us
- while (pty_fill ())
- if (cmd_parse ())
- break;
+ for (int i = CBUFCNT; i-- && pty_fill (); )
+ cmd_parse ();
if (revents & ev::WRITE)
pty_write ();
/*}}} */
-bool
+void
rxvt_term::cmd_parse ()
{
- bool flag = false;
wchar_t ch = NOCHAR;
char *seq_begin; // remember start of esc-sequence here
*/
if (refreshnow)
{
- flag = true;
scr_refresh ();
want_refresh = 1;
}
-
}
else
{
ch = NOCHAR;
}
}
-
- return flag;
}
// read the next character
#define IMBUFSIZ 128 // input modifier buffer sizes
#define KBUFSZ 512 // size of keyboard mapping buffer
#define CBUFSIZ 2048 // size of command buffer
+#define CBUFCNT 8 // never call pty_fill/cmd_parse more than this often in a row
#define UBUFSIZ 2048 // character buffer
#if ENABLE_FRILLS
uint32_t next_octet () NOTHROW;
uint32_t cmd_get8 () THROW ((class out_of_input));
- bool cmd_parse ();
+ void cmd_parse ();
void mouse_report (XButtonEvent &ev);
void button_press (XButtonEvent &ev);
void button_release (XButtonEvent &ev);