Msysgit: предупреждение о шрифте Unicode

Недавно я получаю эту ошибку при использовании msysgit, в частности, когда есть какой-то не-ASCII-контент, сгенерированный выходом git:

предупреждение: ваш шрифт консоли, вероятно, не поддерживает Unicode. Если на выходе появляются странные символы, подумайте о переходе на TrueType-шрифт, например Lucida Console!

Самое смешное, что, хотя это сообщение говорит мне, что мой шрифт не поддерживает Unicode, он действительно работает, и соответствующий текст отображается правильно (в правильной кодировке и со всеми отображаемыми символами).

Печально то, что я не нахожу способ отключить это сообщение. Я попытался изменить шрифт в git Bash (обычно я использую PowerShell), но когда я проверил шрифт там, я заметил, что он уже был настроен на Lucida Console, и предупреждение появляется в той же самой консоли. Поэтому я немного не знаю, что делать, чтобы исправить это, или, по крайней мере, остановить msysgit от печати этого предупреждения все время.

Я попробовал переустановить msysgit, также с выбранным вариантом, который должен установить шрифт в Lucida Console, но это не помогло. Что я могу сделать?

Ответы

Ответ 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;
}

Ответ 2

На самом деле речь идет об изменении шрифта в командной строке.

:]