@@ -46,10 +46,30 @@ static void defaultConfig(void) {
4646 ffOptionsInitDisplay (& instance .config .display );
4747}
4848
49+ #ifdef _WIN32
50+ static volatile UINT oldCp = CP_UTF8 ;
51+ void resetConsoleCP (void ) {
52+ if (oldCp != CP_UTF8 ) {
53+ SetConsoleOutputCP (oldCp );
54+ }
55+ }
56+ #endif
57+
4958void ffInitInstance (void ) {
5059#ifdef _WIN32
5160 // https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?source=recommendat>
5261 setlocale (LC_ALL , ".UTF8" );
62+
63+ HANDLE hStdout = GetStdHandle (STD_OUTPUT_HANDLE );
64+ DWORD mode = 0 ;
65+ if (GetConsoleMode (hStdout , & mode )) {
66+ SetConsoleMode (hStdout , mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING );
67+ oldCp = GetConsoleOutputCP ();
68+ if (oldCp != CP_UTF8 ) {
69+ SetConsoleOutputCP (CP_UTF8 );
70+ atexit (resetConsoleCP );
71+ }
72+ }
5373#else
5474 // Never use `setlocale(LC_ALL, "")`
5575 setlocale (LC_TIME , "" );
@@ -61,9 +81,6 @@ void ffInitInstance(void) {
6181
6282static volatile bool ffDisableLinewrap = false;
6383static volatile bool ffHideCursor = false;
64- #ifdef _WIN32
65- static volatile UINT oldCp = CP_UTF8 ;
66- #endif
6784
6885static void resetConsole (void ) {
6986 if (ffDisableLinewrap ) {
@@ -80,10 +97,6 @@ static void resetConsole(void) {
8097
8198#if defined(_WIN32 )
8299 fflush (stdout );
83-
84- if (oldCp != CP_UTF8 ) {
85- SetConsoleOutputCP (oldCp );
86- }
87100#endif
88101}
89102
@@ -111,15 +124,6 @@ void ffStart(void) {
111124 setvbuf (stdout , NULL , _IOFBF , 4096 );
112125 }
113126 SetConsoleCtrlHandler (consoleHandler , TRUE);
114- HANDLE hStdout = GetStdHandle (STD_OUTPUT_HANDLE );
115- DWORD mode = 0 ;
116- if (GetConsoleMode (hStdout , & mode )) {
117- SetConsoleMode (hStdout , mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING );
118- oldCp = GetConsoleOutputCP ();
119- if (oldCp != CP_UTF8 ) {
120- SetConsoleOutputCP (CP_UTF8 );
121- }
122- }
123127#else
124128 if (instance .config .display .noBuffer ) {
125129 setvbuf (stdout , NULL , _IONBF , 0 );
0 commit comments