Once readline has been initialized, writing more than 68 characters in one go
to stderr using stdio causes interesting effects on Mac OS. Specifically, the
terminal is completely messed up. To increase the anticipated weirdness level,
writing the same string in smaller chunks just works fine. This patch adds such
code to interactive.c.
static void wipe_bottom_line(void)
{
static void wipe_bottom_line(void)
{
- fprintf(i9ep->stderr_stream, "\r%s\r", i9ep->empty_line);
+ char x[] = " ";
+ int n = i9ep->num_columns;
+
+ /*
+ * For reasons beyond my understanding, writing more than 68 characters
+ * here causes MacOS to mess up the terminal. Writing a line of spaces
+ * in smaller chunks works fine though. Weird.
+ */
+ fprintf(i9ep->stderr_stream, "\r");
+ while (n > 0) {
+ if (n >= sizeof(x)) {
+ fprintf(i9ep->stderr_stream, "%s", x);
+ n -= sizeof(x);
+ continue;
+ }
+ x[n] = '\0';
+ fprintf(i9ep->stderr_stream, "%s", x);
+ break;
+ }
+ fprintf(i9ep->stderr_stream, "\r");