From cfad4396d2857cdbb3180f72f306cbb0535d839d Mon Sep 17 00:00:00 2001 From: SHIRAKATA Kentaro Date: Sun, 10 Oct 2021 05:26:37 +0900 Subject: [PATCH] better support for overwrapping wide chars --- sys/winnt/nttty.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/sys/winnt/nttty.c b/sys/winnt/nttty.c index 3da2b6a..2818282 100644 --- a/sys/winnt/nttty.c +++ b/sys/winnt/nttty.c @@ -224,6 +224,18 @@ keyboard_handler_t keyboard_handler; /* Console buffer flipping support */ +static void back_buffer_clear_cell(COORD pos) +{ + DWORD unused; + static WORD attr[1] = {CONSOLE_CLEAR_ATTRIBUTE}; + static char buf[1] = {CONSOLE_CLEAR_CHARACTER}; + + WriteConsoleOutputAttribute(console.hConOut, attr, + 1, pos, &unused); + WriteConsoleOutputCharacterA(console.hConOut, buf, + 1, pos, &unused); +} + static void back_buffer_flip() { cell_t * back = console.back_buffer; @@ -237,6 +249,14 @@ static void back_buffer_flip() if (back->iskanji == 1) { cell_t * back2 = back + 1; cell_t * front2 = front + 1; + if(back2->iskanji != 2){ + /* Š®‘S‚ȃ}ƒ‹ƒ`ƒoƒCƒg•¶Žš‚Å‚È‚¢‚Ì‚Å‹ó”’ */ + back_buffer_clear_cell(pos); + *front = *back; + back++; + front++; + continue; + } /* pos.x == 0 ‚ÌðŒ‚Í•s—v‚Ì‚Í‚¸‚¾‚ª #42072 ‘΍ô‚ŒljÁB */ if (back->attribute != front->attribute || back2->attribute != front2->attribute || pos.X == 0) { @@ -262,6 +282,14 @@ static void back_buffer_flip() front += 2; continue; } + if (back->iskanji == 2) { + /* Š®‘S‚ȃ}ƒ‹ƒ`ƒoƒCƒg•¶Žš‚Å‚È‚¢‚Ì‚Å‹ó”’ */ + back_buffer_clear_cell(pos); + *front = *back; + back++; + front++; + continue; + } #endif if (back->attribute != front->attribute) { WriteConsoleOutputAttribute(console.hConOut, &back->attribute, -- 2.11.0