Skip to content

Commit a720e1f

Browse files
committed
Fastfetch (Windows): moves SetConsoleMode and SetConsoleOutputCP to the start of process
Fixes #2383
1 parent 7006162 commit a720e1f

1 file changed

Lines changed: 20 additions & 16 deletions

File tree

src/common/impl/init.c

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
4958
void 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

6282
static volatile bool ffDisableLinewrap = false;
6383
static volatile bool ffHideCursor = false;
64-
#ifdef _WIN32
65-
static volatile UINT oldCp = CP_UTF8;
66-
#endif
6784

6885
static 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

Comments
 (0)