ANSI 색상을 해석하는 Windows용 콘솔 에뮬레이터가 있습니까?
우리는 rspec을 사용하고 우리 팀의 일부는 Windows를 사용하며 색상 지정을 위한 특수 문자열은 그다지 유용하지 않습니다.)
답변1
이 페이지의 답변 중 어느 것도 새로운 지원의 중요한 측면을 언급하지 않습니다.ANSI 터미널 제어에 추가된 것윈도우 10빌드 16257(이상)의 콘솔 호스트. 즉, 그것은n̲o̲t̲ e̲n̲a̲b̲l̲e̲d̲기본적으로. 사용 중인 특정 소프트웨어가 아닌 이상가능하게 한다호출을 통한 ANSI 처리콘솔 모드 설정플래그 가 있는 API를 사용하면 ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0004)
해당 응용 프로그램에 대한 색상이 표시되거나 ANSI 처리가 이루어지지 않습니다.
ENABLE_VIRTUAL_TERMINAL_PROCESSING0x0004
https://docs.microsoft.com/windows/console/setconsolemode로 글을 쓸 때파일 쓰기또는쓰기콘솔, 문자는 기존 콘솔 API를 통해 수행할 수 있는 커서 이동, 색상/글꼴 모드 및 기타 작업을 제어하는 VT100 및 유사한 제어 문자 시퀀스에 대해 구문 분석됩니다. 자세한 내용은 콘솔 가상 터미널 시퀀스를 참조하세요.
이 페이지에 표시된 예제가 작동하는 이유는 분명히 명령 echo
(또는 아마도일괄 처리CMD.EXE
또는 ) 의 일부는 conhost
방금 언급한 API를 호출하여 ANSI 처리를 활성화합니다. 그러나 이를 작성하거나 수행하지 않을 수 있는 다른 많은 도구나 실행 파일이 stdin
있는 stdout
경우 해당 프로세스에 대한 색상이 표시되지 않습니다.
다행히 전역 기본값은 다음에서 변경할 수 있습니다.옵트에게옵트아웃. 의 레지스트리 키는 HKEY_CURRENT_USER\Console\VirtualTerminalLevel
ANSI 이스케이프 시퀀스 처리를 위한 전역 기본 동작을 설정합니다. DWORD
필요한 경우 키를 생성 하고 해당 값을 기본적으로 ANSI 처리를 1
전역적으로 활성화(또는 0
비활성화)하도록 설정합니다.
[HKEY_CURRENT_USER\콘솔] "가상 터미널 수준"=dword:00000001
이 레지스트리 설정은기본를 호출하여 콘솔 모드를 명시적으로 조작하지 않는 콘솔 앱에만 영향을 미친다는 의미입니다 SetConsoleMode(...)
. 따라서 레지스트리 값이 도움이 될 수 있지만~할 수 있게 하다ANSI콘솔 모드를 인식하지 못함어떤 앱에도 영향을 미치지 않습니다.콘솔 모드에 능숙함(어떤 이유로든) 명시적으로장애를 입히다ANSI.
답변2
콘에뮤Xterm 256 색상 확장으로 ANSI X3.64를 지원합니다. 저는 이 콘솔 에뮬레이터의 작성자입니다.
Ansi 시퀀스는 ConEmu 탭에서 실행되는 모든 프로세스에 대해 처리됩니다.
AFAIK, ConEmu는 Ansicon보다 더 많은 코드를 지원합니다.
답변3
Windows 10 TH2(v1511)부터 conhost.exe
(및 확장에 따라 cmd.exe
) 특정 색상에서 ANSI 이스케이프 시퀀스를 지원합니다.
그만큼콘솔 가상 터미널 시퀀스에 대한 MSDN 페이지지원되는 시퀀스와 이를 활성화하는 방법을 설명합니다.
당신이 사용할 수있는GetConsoleMode그리고콘솔 모드 설정이 동작을 구성하는 플래그입니다. [...]
다음 시퀀스의 동작은 VT100 및 파생된 터미널 에뮬레이터 기술, 특히 xterm 터미널 에뮬레이터를 기반으로 합니다. 터미널 시퀀스에 대한 자세한 내용은 다음에서 확인할 수 있습니다.http://vt100.net그리고 에http://invisible-island.net/xterm/ctlseqs/ctlseqs.html.
답변4
현재 CMD 콘솔 색상은 Win10에서 기본적으로 활성화되어 있지 않으므로 활성화하려면 코드에 다음을 추가하세요.
#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwMode = 0;
GetConsoleMode(hOut, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hOut, dwMode);
// References:
//SetConsoleMode() and ENABLE_VIRTUAL_TERMINAL_PROCESSING?
//https://stackoverflow.com/questions/38772468/setconsolemode-and-enable-virtual-terminal-processing
// Windows console with ANSI colors handling
// https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling
#endif