programing

win32 콘솔이 ANSI / VT100 이스케이프 시퀀스를 인식하도록하는 방법은 무엇입니까?

nasanasas 2021. 1. 10. 17:25
반응형

win32 콘솔이 ANSI / VT100 이스케이프 시퀀스를 인식하도록하는 방법은 무엇입니까?


ncurses 라이브러리의 경량 버전을 구축하고 있습니다. 지금까지는 VT100 호환 터미널에서 잘 작동하지만 win32 콘솔은 \033코드를 이스케이프 시퀀스의 시작으로 인식하지 못합니다 .

# include <stdio.h>
# include "term.h"

int main(void) {
  puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
  return 0;
}

스크린 샷

ANSI.SYS 드라이버를로드하고 ANSI / VT100 이스케이프 시퀀스를 인식하려면 C 코드 수준에서 무엇을 수행해야합니까?


[업데이트] 최신 Windows 10의 경우이 답변에 대한 댓글 바로 아래 @ brainslugs83의 유용한 기여를 읽어보세요.

이전 버전의 경우 Windows 10 Anniversary Update:

ANSI.SYS에는 Windows 95-Vista에서 MS-DOS 하위 시스템의 컨텍스트에서만 실행할 수 있다는 제한이 있습니다.

Microsoft KB101875는 명령 창에서 ANSI.SYS를 활성화하는 방법을 설명 하지만 Windows NT에는 적용되지 않습니다 . 기사에 따르면 우리는 모두 색상을 좋아 하지만 최신 버전의 Windows에는 이러한 멋진 ANSI 지원이 없습니다.

대신 Microsoft는 많은 함수를 만들었지 만 ANSI / VT100 이스케이프 시퀀스를 작동 할 필요가 없습니다.

자세한 설명은 Wikipedia 기사를 참조하십시오 .

ANSI.SYS는 NTVDM에서 실행되는 16 비트 레거시 프로그램을위한 NT 파생 시스템에서도 작동합니다.

Win32 콘솔은 기본적으로 ANSI 이스케이프 시퀀스를 전혀 지원하지 않습니다. 그러나 Ansicon 과 같은 소프트웨어 는 표준 Win32 콘솔에 대한 래퍼 역할을 할 수 있으며 ANSI 이스케이프 시퀀스에 대한 지원을 추가 할 수 있습니다.

그래서 Jason Hood의 ANSICON 이 해결책 이라고 생각 합니다. C 로 작성되었으며 32 비트 및 64 비트 버전의 Windows를 지원하며 소스를 사용할 수 있습니다 .

또한 ANSICON을 사용하기 위해 궁극적으로 답변 한 다른 유사한 질문이나 게시물을 발견했습니다.


윈도우 10 TH2 (v1511)에서 시작 conhost.exe하고 cmd.exe(비록 지원 ANSI와 VT100는 상자 밖으로 이스케이프 시퀀스 가 활성화되어야한다 ).

자세한 내용 은 수퍼 유저에서 내 대답 을 참조하십시오.


Windows 10부터를 사용 ENABLE_VIRTUAL_TERMINAL_PROCESSING하여 ANSI 이스케이프 시퀀스를 활성화 할 수 있습니다 .

https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx


Python 2.7의 경우 다음 스크립트가 Windows 10 (v1607)에서 잘 작동합니다.

import os

print '\033[35m'+'color-test'+'\033[39m'+" test end"
os.system('') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607
print '\033[35m'+'color-test'+'\033[39m'+" test end"

결과는 다음과 같아야합니다.

[35mcolor-test[39m test end

color-test test end

시스템에 무언가를 설치해야하기 때문에 ANSICON이 허용되지 않는 경우 ANSI 코드를 구문 분석하고 SetConsoleTextAttribute 와 같은 관련 Win32 API 콘솔 함수 로 변환하는보다 가벼운 솔루션입니다 .

https://github.com/mattn/ansicolor-w32.c


필요한 cmd를 색칠 Windows.h하고 사용하려면 http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspxSetConsoleTextAttribute() 에서 더 자세한 정보를 찾을 수 있습니다 .


@ BrainSlugs83을 기반으로 다음 명령 줄을 사용하여 레지스터를 통해 현재 Windows 10 버전에서 활성화 할 수 있습니다.

REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1

어쩌면 ANSICON는 U 도움을 줄 수

Windows OS에 따라 32 비트 또는 64 비트 파일을 다운로드하고 압축을 풉니 다.

다음과 함께 설치하십시오. ansicon -i


나는 개인적으로 클링을 좋아한다 . ANSI 코드를 처리 할뿐만 아니라 다른 많은 기능을 추가하여 Windows Console이 bash (기록, 역 기록 검색, 키보드 단축키 등) 처럼 작동합니다 .

  • Bash와 같은 라인 편집 (GNU의 Readline 라이브러리에서).
  • 세션 간의 기록 지속성.
  • 상황에 맞는 완성;
    • 실행 파일 (및 별칭).
    • 디렉토리 명령.
    • 환경 변수
    • 타사 도구 Git, Mercurial, SVN, Go 및 P4.
  • 새로운 키보드 단축키;
    • 클립 보드에서 붙여 넣기 ( Ctrl-V ).
    • Incremental history search (Ctrl-R/Ctrl-S).
    • Powerful completion (TAB).
    • Undo (Ctrl-Z).
    • Automatic "cd .." (Ctrl-PgUp).
    • Environment variable expansion (Ctrl-Alt-E).
    • (press Alt-H for many more...)
  • Scriptable completion with Lua.
  • Coloured and scriptable prompt.
  • Auto-answering of the "Terminate batch job?" prompt.

Ansi.sys (in the system32 folder) is an "MSDOS driver" provided as part of Windows XP, 2000, and earlier versions of NT. In 2000 and XP, it is located in the system32 folder (I don't remember the structure of earlier versions of NT). Programs that run in the DOS subsystem and use standard output can use ANSI.SYS just as they could running over MSDOS.

To load ansi.sys, you must use the device= or devicehigh= command in config, just as you would in MSDOS. On Windows NT 5 (2K & XP), each copy of the DOS subsystem can be given a separate config file in the pif/shortcut (use the "advanced" button), and there is a default file called CONFIG.NT (also in the system32 folder), which is used if the pif/shortcut does not specify a special config file.

When ansi.sys is loaded correctly, mem /d will report that it is loaded. On earlier versions of NT, you can and must load a proper DOS environment to load ansi.sys, and ansi art will work at the prompt. On Win 2K and XP, loading ansi.sys will have no effect on your "CMD prompt" because CMD is not a DOS program: it is a 32 bit Windows console program. For some reason that I do not understand, on WinXP, even if you load a fixed copy of command.com using "command.com /p", the command prompt will not be ansi enabled: perhaps when you do it that way it only emulates loading command.com?

In any case, when you use an actual DOS version of command.com, ansi is enabled after being loaded: you can demonstrate it's use with a bit of ansi art like this:

command /c type ansiart.ans

(here is an example: http://artscene.textfiles.com/ansi/artwork/beastie.ans)

CONFIG.NT (in the system32 folder) contains an example of the syntax for loading device drivers. You will need to be an Administrator to edit that default file, or you can make a copy of it.

On Win 2K and XP, the default "shortcut" for MSDOS is a .PIF file, not a .LNK file. If you create a .lnk file to CMD, you won't be able to set special config and autoexec files, it will use the default CONFIG.NT. If you want to use a special config file for just one DOS application, you can make a copy of the "MSDOS shortcut", or you can make a copy of "_default.pif", found in your Windows folder.


In lastest win10, it can be done by SetConsoleMode(originMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING). See https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example


I found this tool to be working for my end. Microsoft Color Tool from GitHub

Unzip the compressed file then open CMD with Administration permission.

Go to the folder where you unzip the file in CMD.

Then execute this command "colortool -b scheme-name"

The scheme-name needs to be replaced with any of these options below:

  • campbell.ini
  • campbell-legacy.ini
  • cmd-legacy.ini
  • deuternopia.itermcolors
  • OneHalfDark.itermcolors
  • OneHalfLight.itermcolors
  • solarized_dark.itermcolors
  • solarized_light.itermcolors

In my case, the command would be like this "colortool -b solarized_dark.itermcolors"

Click right on the console window and select Properties.

값을 변경할 필요가 없습니다. "확인"을 클릭하여 설정을 저장하십시오. (글꼴에 이미 색상이 포함되어 있음을 알 수 있습니다).

콘솔 속성

그런 다음 cmd 또는 powerShell을 다시 시작하십시오.

ANSI 색상이 활성화되고 이전에 선택한 색상 구성표와 함께 작동해야합니다.


같은 문제가있었습니다. ConEmu를 설치 했고 그 중 하나가 내 문제를 해결했습니다.

참조 URL : https://stackoverflow.com/questions/16755142/how-to-make-win32-console-recognize-ansi-vt100-escape-sequences

반응형