Ответ 1
Этот тест выполняется функцией warn_if_raster_font
в compat/winansi.c
. Это использует Win32 API GetCurrentConsoleFontEx, чтобы найти шрифт, используемый консолью, подключенной к текущему потоку вывода. Этот тест всегда должен быть правильным в Windows Vista и выше. В Windows XP он должен искать в реестре текущий шрифт консоли по умолчанию. Так что, возможно, вы находитесь на XP, и когда вы настроили ярлык для используемой консоли, параметр по умолчанию остается настроенным на использование шрифта, отличного от юникода.
Если нет, попробуйте выполнить компиляцию следующего кода, который использует примерно тот же код и видит, что он печатает. Если вывод содержит tt: 4, мы ожидаем, что соответствующий код git правильно определит ваш шрифт консоли как truetype.
#define STRICT
#define WINVER 0x0600
#define _WIN32_WINNT 0x600
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#ifdef __MINGW32__
typedef struct _CONSOLE_FONT_INFOEX {
ULONG cbSize;
DWORD nFont;
COORD dwFontSize;
UINT FontFamily;
UINT FontWeight;
WCHAR FaceName[LF_FACESIZE];
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
#endif
typedef BOOL (WINAPI *PGETCURRENTCONSOLEFONTEX)(HANDLE, BOOL,
PCONSOLE_FONT_INFOEX);
int
_tmain(int argc, TCHAR *argv[])
{
PGETCURRENTCONSOLEFONTEX pgccf;
pgccf = (PGETCURRENTCONSOLEFONTEX)
GetProcAddress(GetModuleHandleW(L"kernel32.dll"),
"GetCurrentConsoleFontEx");
if (pgccf == NULL) {
_tprintf(_T("error: failed to get function pointer\n"));
} else {
HANDLE console;
CONSOLE_FONT_INFOEX cfi;
cfi.cbSize = sizeof(cfi);
console = GetStdHandle(STD_OUTPUT_HANDLE);
if (!pgccf(console, 0, &cfi)) {
_tprintf(_T("error: failed to get console info\n"));
} else {
_tprintf(_T("font %08x tt:%d"), cfi.FontFamily,
(cfi.FontFamily&TMPF_TRUETYPE));
wprintf(L" %s", cfi.FaceName);
_tprintf(_T("\n"));
}
}
return 0;
}