Global (Windows): resets console codepage on program exit

Fixes #2245
This commit is contained in:
李通洲
2026-03-26 18:22:00 +08:00
parent 12746a9681
commit 397822d0db
+16 -7
View File
@@ -61,6 +61,9 @@ void ffInitInstance(void)
static volatile bool ffDisableLinewrap = true;
static volatile bool ffHideCursor = true;
#if _WIN32
static volatile UINT oldCp = CP_UTF8;
#endif
static void resetConsole(void)
{
@@ -70,12 +73,15 @@ static void resetConsole(void)
if(ffHideCursor)
fputs("\033[?25h", stdout);
#if defined(_WIN32)
fflush(stdout);
#endif
if(instance.state.dynamicInterval > 0)
fputs("\033[?1049l", stdout); // Disable alternate buffer
#if defined(_WIN32)
fflush(stdout);
if(oldCp != CP_UTF8)
SetConsoleOutputCP(oldCp);
#endif
}
#ifdef _WIN32
@@ -106,9 +112,12 @@ void ffStart(void)
SetConsoleCtrlHandler(consoleHandler, TRUE);
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hStdout, &mode);
SetConsoleMode(hStdout, mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
SetConsoleOutputCP(CP_UTF8);
if (GetConsoleMode(hStdout, &mode))
{
SetConsoleMode(hStdout, mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
oldCp = GetConsoleOutputCP();
if (oldCp != CP_UTF8) SetConsoleOutputCP(CP_UTF8);
}
#else
if (instance.config.display.noBuffer) setvbuf(stdout, NULL, _IONBF, 0);
struct sigaction action = { .sa_handler = exitSignalHandler };