From 283bf31a4187180bcba71a8317cd5819817ea2ac Mon Sep 17 00:00:00 2001 From: nick black Date: Wed, 25 Aug 2021 00:59:33 -0400 Subject: [PATCH] Windows: set up output handle, demand utf8 CPs #2094 --- src/lib/windows.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/lib/windows.c b/src/lib/windows.c index 4dda29de4..77aaaf53c 100644 --- a/src/lib/windows.c +++ b/src/lib/windows.c @@ -43,6 +43,14 @@ int prepare_windows_terminal(tinfo* ti, size_t* tablelen, size_t* tableused){ } ti->caps.rgb = true; ti->caps.colors = 256; + if(!SetConsoleOutputCP(65001)){ + logerror("couldn't set output page to utf8\n"); + return -1; + } + if(!SetConsoleCP(65001)){ + logerror("couldn't set input page to utf8\n"); + return -1; + } HANDLE in = GetStdHandle(STD_INPUT_HANDLE); if(in == INVALID_HANDLE_VALUE){ logerror("couldn't get input handle\n"); @@ -50,13 +58,29 @@ int prepare_windows_terminal(tinfo* ti, size_t* tablelen, size_t* tableused){ } // if we're a true Windows Terminal, SetConsoleMode() ought succeed. // otherwise, we're something else; go ahead and query. + // disable: ENABLE_ECHO_INPUT | ENABLE_INSERT_MODE | ENABLE_LINE_INPUT if(!SetConsoleMode(in, ENABLE_MOUSE_INPUT - | ENABLE_VIRTUAL_TERMINAL_INPUT | ENABLE_PROCESSED_INPUT - | ENABLE_WINDOW_INPUT)){ + | ENABLE_QUICK_EDIT_MODE + | ENABLE_EXTENDED_FLAGS + | ENABLE_WINDOW_INPUT + | ENABLE_VIRTUAL_TERMINAL_INPUT)){ logerror("couldn't set input console mode\n"); return -1; } + HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); + if(out == INVALID_HANDLE_VALUE){ + logerror("couldn't get output handle\n"); + return -1; + } + if(!SetConsoleMode(out, ENABLE_PROCESSED_OUTPUT + | ENABLE_WRAP_AT_EOL_OUTPUT + | ENABLE_VIRTUAL_TERMINAL_PROCESSING + | DISABLE_NEWLINE_AUTO_RETURN + | ENABLE_LVB_GRID_WORLDWIDE)){ + logerror("couldn't set output console mode\n"); + return -1; + } ti->caps.quadrants = true; ti->caps.braille = true; ti->termname = "Windows Terminal";