aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Yano <takashi.yano@nifty.ne.jp>2020-02-27 00:33:02 +0900
committerCorinna Vinschen <corinna@vinschen.de>2020-02-26 21:17:36 +0100
commitc13cdfd00ed09d23e5cf1864033a1bfd54bc3aab (patch)
tree4082d8f7ec711dde3a077034b89bd814216510bf
parent0d7bbc0bc3da7d7c9e0a76243cbeaf458724d32d (diff)
downloadnewlib-c13cdfd00ed09d23e5cf1864033a1bfd54bc3aab.zip
newlib-c13cdfd00ed09d23e5cf1864033a1bfd54bc3aab.tar.gz
newlib-c13cdfd00ed09d23e5cf1864033a1bfd54bc3aab.tar.bz2
Cygwin: console: Add emulation of CSI3J on Win10 1809.
- This patch add emulation of CSI3J, which is broken in Win10 1809, rather than ignoring it as before.
-rw-r--r--winsup/cygwin/fhandler_console.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
index f87d932..4ab9bca 100644
--- a/winsup/cygwin/fhandler_console.cc
+++ b/winsup/cygwin/fhandler_console.cc
@@ -2102,8 +2102,23 @@ fhandler_console::char_command (char c)
break;
case 'J': /* ED */
wpbuf_put (c);
- /* Ignore CSI3J in Win10 1809 because it is broken. */
- if (con.args[0] != 3 || !wincap.has_con_broken_csi3j ())
+ if (con.args[0] == 3 && wincap.has_con_broken_csi3j ())
+ { /* Workaround for broken CSI3J in Win10 1809 */
+ CONSOLE_SCREEN_BUFFER_INFO sbi;
+ GetConsoleScreenBufferInfo (get_output_handle (), &sbi);
+ SMALL_RECT r = {0, sbi.srWindow.Top,
+ (SHORT) (sbi.dwSize.X - 1), (SHORT) (sbi.dwSize.Y - 1)};
+ CHAR_INFO f = {' ', sbi.wAttributes};
+ COORD d = {0, 0};
+ ScrollConsoleScreenBufferA (get_output_handle (),
+ &r, NULL, d, &f);
+ SetConsoleCursorPosition (get_output_handle (), d);
+ d = sbi.dwCursorPosition;
+ d.Y -= sbi.srWindow.Top;
+ SetConsoleCursorPosition (get_output_handle (), d);
+ }
+ else
+ /* Just send the sequence */
WriteConsoleA (get_output_handle (), wpbuf, wpixput, &wn, 0);
break;
case 'h': /* DECSET */