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.
This commit is contained in:
parent
0d7bbc0bc3
commit
c13cdfd00e
|
@ -2102,8 +2102,23 @@ fhandler_console::char_command (char c)
|
||||||
break;
|
break;
|
||||||
case 'J': /* ED */
|
case 'J': /* ED */
|
||||||
wpbuf_put (c);
|
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);
|
WriteConsoleA (get_output_handle (), wpbuf, wpixput, &wn, 0);
|
||||||
break;
|
break;
|
||||||
case 'h': /* DECSET */
|
case 'h': /* DECSET */
|
||||||
|
|
Loading…
Reference in New Issue