Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/fhandler_tty.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index e02a8f43b..f9c7c3ade 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -1255,6 +1255,28 @@ fhandler_pty_slave::push_to_pcon_screenbuffer (const char *ptr, size_t len)
memmove (p0, p0+4, nlen - (p0+4 - buf));
nlen -= 4;
}
+
+ /* If the ESC sequence ESC[?3h or ESC[?3l which clears console screen
+ buffer is pushed, set need_redraw_screen to trigger redraw screen. */
+ p0 = buf;
+ while ((p0 = (char *) memmem (p0, nlen - (p0 - buf), "\033[?", 3)))
+ {
+ p0 += 3;
+ while (p0 < buf + nlen && *p0 != 'h' && *p0 != 'l')
+ {
+ int arg = 0;
+ while (p0 < buf + nlen && isdigit (*p0))
+ arg = arg * 10 + (*p0 ++) - '0';
+ if (arg == 3)
+ get_ttyp ()->need_redraw_screen = true;
+ if (p0 < buf + nlen && *p0 == ';')
+ p0 ++;
+ }
+ p0 ++;
+ if (p0 >= buf + nlen)
+ break;
+ }
+
DWORD dwMode, flags;
flags = ENABLE_VIRTUAL_TERMINAL_PROCESSING;
GetConsoleMode (get_output_handle (), &dwMode);