맨위로가기

ANSI 이스케이프 코드

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

ANSI 이스케이프 코드는 1970년대에 화면 제어를 위해 개발된 일련의 문자 시퀀스이다. 초창기에는 터미널 제조업체마다 다른 이스케이프 시퀀스를 사용했지만, ECMA-48 표준 제정 이후 ANSI X3.64 표준을 거쳐 ISO 6429로 통합되면서 표준화되었다. ANSI 이스케이프 코드는 텍스트 서식, 커서 제어 등 다양한 기능을 제공하며, 유닉스 계열 시스템을 비롯한 여러 플랫폼에서 지원된다. 쉘 스크립트, C/C++ 등 다양한 프로그래밍 환경에서 활용되며, 터미널 기반 응용 프로그램의 시각적 요소를 제어하는 데 사용된다.

더 읽어볼만한 페이지

  • 텍스트 사용자 인터페이스 - 윈도우 콘솔
    윈도우 콘솔은 윈도우 운영체제에서 명령 줄 인터페이스 환경을 제공하며, 입력 및 출력 버퍼를 통해 작동하고 Windows API를 통해 프로그램과 상호 작용하며, 운영체제 버전에 따라 특징과 지원 방식에 차이가 있다.
  • 텍스트 사용자 인터페이스 - 지움 문자
    지움 문자는 텍스트 편집 환경에서 문자를 삭제하는 제어 문자로, 초기에는 백스페이스와 유사한 기능을 했으나 이후 ASCII 코드 127번으로 정의되었고, 유닉스 시스템에서는 터미널 드라이버 설정으로 백스페이스 키를 삭제 문자로 설정해야 했으며, 현대 운영체제에서는 백스페이스 키로 대체되고 유닉스 계열에서는 `stty` 명령어로 설정 가능하다.
  • ANSI 표준 - ANSI C
    ANSI C는 미국 국립 표준 협회에서 제정한 C 프로그래밍 언어의 표준으로, C89 또는 C90이라고도 불리며, `__STDC__` 매크로를 통해 표준 준수 여부를 확인할 수 있고, C95, C99, C11, C17, C23 등의 후속 표준으로 개선되어 왔다.
  • ANSI 표준 - DMX512
    DMX512는 1986년 개발된 조명 장비 제어를 위한 디지털 통신 프로토콜이며, 최대 512개의 채널을 지원하고, RDM을 지원하며, 견고성과 단순성으로 인해 널리 사용된다.
  • 컴퓨터 표준 - 포트란
    포트란은 1950년대 IBM에서 개발되어 과학 및 공학 계산에 주로 사용되는 프로그래밍 언어이며, '수식 번역 시스템'에서 유래하여 객체 지향 프로그래밍, 병렬 처리 등의 기능이 추가되며 현대적인 언어로 발전해왔다.
  • 컴퓨터 표준 - PCI 익스프레스
    PCI 익스프레스(PCIe)는 고속 직렬 통신을 사용하는 컴퓨터 확장 카드 인터페이스 규격으로, 점대점 연결 방식과 패킷 기반 데이터 전송, 그리고 다양한 레인 구성과 지속적인 발전을 특징으로 한다.
ANSI 이스케이프 코드
설명
명칭ANSI 이스케이프 코드
정의비디오 텍스트 터미널에서 화면 표시 옵션을 제어하는 데 사용되는 방법
개요
기원1970년대 초반
표준ANSI X3.64
ISO/IEC 6429
ECMA-48
기능커서 이동
글꼴 스타일 변경
색상 변경
화면 지우기
사용 예시텍스트 색상 변경: `Esc[31m` (빨간색)
배경 색상 변경: `Esc[42m` (초록색)
굵게 표시: `Esc[1m`
기술적 세부 사항
이스케이프 시퀀스 시작`Esc` (ASCII 27, 0x1B) 또는 `CSI` (Control Sequence Introducer, `Esc` + `[`)
제어 기능C0 및 C1 제어 코드 기반
관련 표준ITU T.61
ISO/IEC 8613-6 / ITU T.416
ITU T.101
JIS X 0207
ISO 6630
DIN 31626
ETS 300 706
활용
응용 프로그램터미널 에뮬레이터
콘솔 기반 게임
텍스트 기반 사용자 인터페이스 (TUI)
예시htop (시스템 모니터)
추가 정보
관련 용어VT100
텔레타이프
ncurses
주의 사항
보안 문제악성 이스케이프 시퀀스를 이용한 터미널 에뮬레이터 공격 가능성
표준 상세
ECMAECMA-48
ISO/IECISO/IEC 6429
FIPSFIPS 86
ANSIANSI X3.64
JISJIS X 0211

2. 역사

ANSI 이스케이프 시퀀스는 1970년대에 여러 비디오 터미널 제조업체들이 화면 제어를 위해 독자적인 이스케이프 시퀀스를 사용하면서 시작되었다. 예를 들어 VT52는 ESC 문자, Y 문자, 그리고 x, y 위치에 32를 더한 숫자 값을 나타내는 두 문자를 보내 화면의 x, y 위치에 커서를 배치할 수 있었다. Hazeltine 1500은 ~, DC1 문자를 사용하고 쉼표로 구분된 X 및 Y 위치를 사용하는 등, 단말기마다 다른 제어 시퀀스를 사용해야 했다.

이러한 비호환성 문제를 해결하기 위해 1976년 ECMA-48 표준이 제정되었다. 이는 ECMA-6에서 파생된 일련의 문자 코딩 표준 중 하나였다. 1979년 ANSI가 ANSI X3.64를 채택하면서 "ANSI 이스케이프 시퀀스"라는 이름이 널리 알려지게 되었다. ANSI X3L2 위원회와 ECMA 위원회 TC 1이 협력하여 만든 이 표준은 ISO 6429로 통합되었다. 1994년 ANSI는 국제 표준을 우선하여 자체 표준을 철회했다.

DEC VT100 terminal
DEC VT100 비디오 디스플레이 단말기.


1978년 출시된 Digital의 VT100은 ANSI 이스케이프 시퀀스를 지원하는 최초의 대중적인 터미널 중 하나였다. VT100의 성공으로 1979년 Zenith Z-19를 비롯한 다양한 복제품이 출시되었다.[1] Qume QVT-108, Televideo TVI-970, Wyse WY-99GT 등도 "VT100", "VT103" 또는 "ANSI" 모드를 지원하며 널리 사용되었다.

1981년 ANSI X3.64는 FIPS 간행물 86으로 미국 정부에서 채택되었으나, 이후 중복 문제로 철회되었다.[2]

ECMA-48은 1991년 5판까지 여러 차례 개정되었으며, ISO/IEC 표준 '''ISO/IEC 6429'''로 채택되었다. 일본 산업 표준으로는 JIS X 0211로 채택되었다.

텔레텍스 표준인 ITU T.61과 개방형 문서 아키텍처 표준인 '''ISO/IEC 8613'''(주로 ISO/IEC 8613-6 또는 ITU T.416)은 ANSI 시스템과 많은 이스케이프 코드를 공유하지만, 컴퓨터 단말기에는 의미가 없는 확장 기능을 가지고 있어 빠르게 사용되지 않게 되었다.

3. 플랫폼 지원

대부분의 현대 운영 체제 및 터미널 에뮬레이터는 ANSI 이스케이프 시퀀스를 지원한다. xterm과 같은 유닉스 터미널 에뮬레이터는 동일한 머신에서 실행되는 소프트웨어와 통신할 수 있으며, 따라서 터미널 에뮬레이터에서 X11으로 실행되는 소프트웨어는 이러한 시퀀스를 사용할 수 있다고 가정할 수 있다.[1]

MS-DOS 버전 2.0은 라는 선택적인 장치 드라이버를 포함했다. 성능이 좋지 않았고, 기본적으로 설치되지 않았기 때문에 소프트웨어에서 이를 활용하는 경우는 거의 없었다.

윈도우 콘솔은 ANSI 이스케이프 시퀀스를 지원하지 않았으며, 마이크로소프트는 이를 활성화할 수 있는 어떠한 방법도 제공하지 않았다. 그러나 JP Software의 TCC, Michael J. Mefford의 ANSI.COM, Jason Hood의 [4] 및 Maximus5의 ConEmu와 같은 몇몇 대체 프로그램들이 ANSI 이스케이프 시퀀스를 활성화했다. Python colorama 패키지[5]나 Cygwin과 같은 소프트웨어는 콘솔로 전송되는 텍스트를 처리하여 ANSI 이스케이프 시퀀스를 추출하고 윈도우 호출로 에뮬레이션했다.

2016년에 마이크로소프트는 윈도우 10 버전 1511 업데이트를 출시했는데, 이는 윈도우가 출시된 지 30년이 넘어서 ANSI 이스케이프 시퀀스에 대한 지원을 예상치 못하게 구현한 것이다.[6] 이는 Windows Subsystem for Linux와 함께 이루어졌으며, 유닉스 계열 터미널 기반 소프트웨어가 윈도우 콘솔을 사용할 수 있도록 하기 위한 것으로 보인다. Windows PowerShell 5.1은 이를 기본적으로 활성화했으며, PowerShell 6에서는 를 사용하여 필요한 ESC 문자를 문자열에 포함시킬 수 있게 되었다.[7]

2019년에 출시된 Windows Terminal은 기본적으로 해당 시퀀스를 지원하며, 마이크로소프트는 윈도우 콘솔을 Windows Terminal로 대체할 계획이다.[8]

4. 기술적 설명

ANSI 표준은 모든 단말기가 사용할 명령어 집합을 만들고 모든 숫자 정보를 ASCII 숫자로 전송하도록 요구함으로써 이러한 문제를 해결하려 했다. 이 일련의 표준 중 첫 번째는 1976년에 채택된 ECMA-48이었다. 이는 1965년 ECMA-6에서 시작된 일련의 문자 코딩 표준의 연속으로, ISO 646이 여기서 파생되었다. "ANSI 이스케이프 시퀀스"라는 이름은 1979년 ANSI가 ANSI X3.64를 채택하면서 시작되었다. ANSI X3L2 위원회는 ECMA 위원회 TC 1과 협력하여 거의 동일한 표준을 만들었으며, 이 두 표준은 국제 표준인 ISO 6429로 통합되었다. 1994년, ANSI는 국제 표준을 선호하여 자체 표준을 철회했다.

이러한 시퀀스를 지원하는 최초의 인기 있는 비디오 단말기는 1978년에 출시된 Digital의 VT100이었다. 이 모델은 시장에서 매우 성공적이었으며, 1979년 훨씬 더 저렴한 Zenith Z-19를 비롯한 다양한 VT100 복제품을 낳았다.[1] Qume QVT-108, Televideo TVI-970, Wyse WY-99GT 등 다른 제품들에도 다양한 호환성을 가진 "VT100", "VT103", 또는 "ANSI" 모드가 옵션으로 제공되었다. 이러한 인기로 인해 점차적으로 더 많은 소프트웨어(특히 게시판 시스템 및 기타 온라인 서비스)가 이스케이프 시퀀스가 작동한다고 가정하게 되었고, 거의 모든 새로운 단말기 및 에뮬레이터 프로그램이 이를 지원하게 되었다.

1981년, ANSI X3.64는 FIPS 간행물 86에 의해 미국 정부에서 채택되었으나, 이후 미국 정부는 산업 표준 중복을 중단하여 FIPS pub. 86은 철회되었다.[2]

ECMA-48은 여러 번 업데이트되었으며 현재 1991년의 5판에 해당한다. 또한 ISO와 IEC에서 표준 '''ISO/IEC 6429'''로 채택되었으며, 일본 산업 표준으로는 JIS X 0211로 채택되었다.

관련 표준으로는 ITU T.61, 텔레텍스 표준, '''ISO/IEC 8613''', 개방형 문서 아키텍처 표준(주로 ISO/IEC 8613-6 또는 ITU T.416)이 있다. 이들 시스템은 ANSI 시스템과 많은 이스케이프 코드를 공유하며, 컴퓨터 단말기에는 반드시 의미가 없는 확장 기능을 가지고 있다. 두 시스템 모두 빠르게 사용되지 않게 되었지만 ECMA-48은 해당 시스템에서 사용되는 확장을 예약된 것으로 표시한다.

ANSI 이스케이프 코드는 C0 제어 코드, Fe 이스케이프 시퀀스, CSI 시퀀스, OSC 시퀀스 등 다양한 종류로 구성된다.

4. 1. C0 제어 코드

널리 사용되는 C0 제어 코드 (전체 목록은 아님)
^C0약어이름효과
^G0x07BEL소리를 낸다.
^H0x08BS백스페이스커서를 왼쪽으로 이동한다 (그러나 커서가 줄 시작 부분에 있으면 "뒤로 감싸기"될 수 있음).
^I0x09HT커서를 다음 탭 정지 위치로 오른쪽으로 이동한다.
^J0x0ALF줄 바꿈다음 줄로 이동하고, 화면 하단에 있으면 디스플레이를 위로 스크롤한다. 일반적으로 가로로는 이동하지 않지만 프로그램은 이에 의존해서는 안 된다.
^L0x0CFF양식 피드프린터를 다음 페이지 상단으로 이동한다. 일반적으로 가로로는 이동하지 않지만 프로그램은 이에 의존해서는 안 된다. 비디오 터미널에서의 효과는 다릅니다.
^M0x0DCR캐리지 리턴커서를 열 0으로 이동한다.
^[0x1BESC이스케이프모든 이스케이프 시퀀스를 시작한다.



이러한 제어 코드는 현재 ISO 6429(ECMA-48)에 정의되어 있으며, ANSI 이스케이프 시퀀스에 의해 호출되는 C1 집합과 동일한 표준의 일부이다. ISO 2022는 ISO 6429 C0 집합을 ISO 6429 C1 집합 없이 사용할 수 있으며, 0x1B가 항상 ESC인 경우에도 마찬가지이다. 이는 전송되는 데이터 양을 줄이거나 이스케이프 시퀀스에서 사용할 수 없는 일부 기능을 수행하는 데 사용된다.

4. 2. Fe 이스케이프 시퀀스

Fe영어 이스케이프 시퀀스는 C1 제어 코드 표준에 위임된 유형이다. ANSI X3.64 / ECMA-48의 C1 제어 코드에 해당하는 이스케이프 시퀀스는 ESC 다음에 0x40에서 0x5F 범위의 바이트가 오는 형식을 따른다.

표준에 따르면 8비트 환경에서 이스케이프 시퀀스 유형(C1 제어 코드 세트의 것)에 해당하는 제어 기능은 0x80–0x9F 범위의 단일 바이트로 표현될 수 있다. 그러나 UTF-8 또는 CP-1252와 같은 최신 장치에서 사용되는 문자 인코딩에서는 해당 코드가 다른 용도로 사용되는 경우가 많으므로 일반적으로 2바이트 시퀀스만 사용된다.

일부 (C1 세트 요소) ANSI 이스케이프 시퀀스 (전체 목록은 아님)
코드C1약어이름효과
단일 시프트 2대체 문자 세트 중 하나에서 단일 문자를 선택한다. SS2는 G2 문자 세트를 선택하고 SS3는 G3 문자 세트를 선택한다.[51] 7비트 환경에서는 이 다음에 해당 세트의 문자를 지정하는 하나 이상의 GL 바이트(0x20–0x7F)가 온다. 8비트 환경에서는 대신 GR 바이트(0xA0–0xFF)가 올 수 있다.
단일 시프트 3
장치 제어 문자열ST로 종료된다. Xterm은 이 시퀀스를 사용하여 사용자 정의 키를 정의하고 Termcap/Terminfo 데이터를 요청하거나 설정한다.[51]
제어 시퀀스 도입자0x40에서 0x7E 범위의 바이트로 종료되는 대부분의 유용한 시퀀스를 시작한다.
문자열 종결자다른 제어 문자열을 종료한다.
운영 체제 명령운영 체제가 사용할 제어 문자열을 시작하며 ST로 종료된다.
문자열 시작ST로 종료되는 텍스트 문자열의 인수를 사용한다. 이러한 문자열 제어 시퀀스의 용도는 응용 프로그램 또는 개인 정보 보호 규정에 의해 정의된다. 이러한 기능은 거의 구현되지 않으며 인수는 xterm에서 무시된다.[51]
개인 정보 메시지
응용 프로그램 프로그램 명령


4. 3. CSI (Control Sequence Introducer) 시퀀스

CSI (Control Sequence Introducer) 시퀀스는 가장 널리 사용되는 ANSI 이스케이프 코드 시퀀스이다. 이 시퀀스는 `ESC [` 문자로 시작하며, 커서 이동, 화면 지우기, 텍스트 서식 설정 등 다양한 기능을 수행한다.

CSI 시퀀스의 일반적인 형식은 다음과 같다.

  • 매개변수: 0개 이상의 숫자 또는 세미콜론(`;`)으로 구분된 문자열. 매개변수가 없으면 0으로 간주된다.
  • 최종 바이트: 알파벳 또는 특수 문자.


다음은 몇 가지 주요 CSI 시퀀스이다.

일부 ANSI 제어 시퀀스(전체 목록은 아님)
코드약자이름효과
CSI A커서 위로 이동커서를 지정된 방향으로 (기본값 ) 셀만큼 이동한다. 커서가 이미 화면 가장자리에 있는 경우 이 명령은 아무런 효과가 없다.
CSI B커서 아래로 이동
CSI C커서 앞으로 이동
CSI D커서 뒤로 이동
CSI E커서 다음 줄로 이동커서를 (기본값 ) 줄 아래의 줄 시작 부분으로 이동한다. (ANSI.SYS 아님)
CSI F커서 이전 줄로 이동커서를 (기본값 ) 줄 위의 줄 시작 부분으로 이동한다. (ANSI.SYS 아님)
CSI G커서를 열 (기본값 )로 이동한다. (ANSI.SYS 아님)
CSI  ;  H커서 위치커서를 행 및 열 로 이동한다. 값은 1부터 시작하며, 생략하면 (왼쪽 상단 모서리)으로 기본 설정된다. 와 같은 시퀀스는 와 동일하며, 는 및 와 동일하다.
CSI J디스플레이 지우기화면의 일부를 지운다. 이 (또는 누락)이면 커서에서 화면 끝까지 지운다. 이 이면 커서에서 화면 시작 부분까지 지운다. 이 이면 전체 화면을 지운다(그리고 DOS ANSI.SYS에서 커서를 왼쪽 상단으로 이동한다). 이 이면 전체 화면을 지우고 스크롤백 버퍼에 저장된 모든 줄을 삭제한다(이 기능은 xterm용으로 추가되었으며 다른 터미널 응용 프로그램에서 지원한다).
CSI K줄 지우기줄의 일부를 지운다. 이 (또는 누락)이면 커서에서 줄 끝까지 지운다. 이 이면 커서에서 줄 시작 부분까지 지운다. 이 이면 전체 줄을 지운다. 커서 위치는 변경되지 않는다.
CSI S위로 스크롤전체 페이지를 (기본값 ) 줄만큼 위로 스크롤한다. 새 줄이 아래쪽에 추가된다. (ANSI.SYS 아님)
CSI T아래로 스크롤전체 페이지를 (기본값 ) 줄만큼 아래로 스크롤한다. 새 줄이 위쪽에 추가된다. (ANSI.SYS 아님)
CSI ; fCUP과 동일하지만, 편집기 기능(CUD 또는 CNL 등)이 아닌 형식 지정자 기능( 또는 등)으로 간주된다. 이로 인해 특정 터미널 모드에서 다른 처리가 발생할 수 있다.
CSI m그래픽 표현 선택텍스트의 모양을 제어한다. 글꼴 스타일, 색상 등을 변경할 수 있다. 자세한 내용은 별도 하위 섹션을 참조한다.
CSI 5iAUX 포트 켜기로컬 직렬 프린터용으로 일반적으로 사용되는 보조 직렬 포트를 활성화한다.
CSI 4iAUX 포트 끄기로컬 직렬 프린터용으로 일반적으로 사용되는 보조 직렬 포트를 비활성화한다.
CSI 6n장치 상태 보고을 전송하여 커서 위치(CPR)를 보고한다. 여기서 은 행이고 은 열이다.



일부 인기 있는 개인 시퀀스
코드약자이름효과
CSI s현재 커서 위치 저장SCO 콘솔 모드에서 커서 위치/상태를 저장한다.[10] 수직 분할 화면 모드에서는 대신 왼쪽 및 오른쪽 여백을 설정(`CSI n ; n s`) 또는 재설정하는 데 사용된다.[11]
CSI uSCO 콘솔 모드에서 커서 위치/상태를 복원한다.[12]
CSI ? 25 hVT220에서 커서를 표시한다.
CSI ? 25 l커서를 숨긴다.
CSI ? 1004 h포커스 보고를 활성화한다. 터미널 에뮬레이터가 포커스를 입력하거나 종료할 때마다 각각 및 로 보고한다.
CSI ? 1004 l포커스 보고를 비활성화한다.
CSI ? 1049 hxterm에서 대체 화면 버퍼를 활성화한다.
CSI ? 1049 lxterm에서 대체 화면 버퍼를 비활성화한다.
CSI ? 2004 h괄호 붙여넣기 모드를 켠다.[13] 괄호 붙여넣기 모드에서 터미널에 붙여넣은 텍스트는 및 로 둘러싸인다. 터미널에서 실행되는 프로그램은 해당 시퀀스로 묶인 문자를 명령으로 처리해서는 안 된다(Vim은 예를 들어 명령으로 처리하지 않는다).[14] xterm에서[15]
CSI ? 2004 l괄호 붙여넣기 모드를 끈다.


4. 3. 1. SGR (Select Graphic Rendition) 파라미터

Select Graphic Rendition영어 (SGR) 파라미터는 `CSI n m` 제어 시퀀스를 사용하여 디스플레이 속성을 설정한다. 여기서 `n`은 아래 표에 있는 SGR 파라미터 중 하나이다. 여러 속성을 동일한 시퀀스에서 세미콜론으로 구분하여 설정할 수 있다.[16] 각 디스플레이 속성은 SGR의 후속 발생이 있을 때까지 유효하며, 코드가 주어지지 않은 `CSI m`은 `CSI 0 m`(재설정/일반)으로 처리된다.

n이름참고
0재설정 또는 일반모든 속성이 꺼진다.
1굵게 또는 강한 강조흐리게와 마찬가지로, 색상 변경은 PC(SCO / CGA)의 발명품이다.[17]
2흐리게, 약한 강조, 또는 어둡게굵게와 같은 밝은 글꼴 굵기로 구현될 수 있다.[18]
3이탤릭체널리 지원되지 않는다. 때로는 반전 또는 깜빡임으로 처리된다.[17]
4밑줄Kitty, VTE, mintty, iTerm2 및 Konsole에 대한 스타일 확장이 있다.[19][20][21]
5느린 깜빡임분당 150회 미만으로 깜빡임을 설정한다.
6빠른 깜빡임MS-DOS ANSI.SYS, 분당 150회 이상; 널리 지원되지 않음
7반전 비디오 또는 반전전경색과 배경색을 바꾼다; 일관성이 없는 에뮬레이션[22]
8숨김 또는 가림널리 지원되지 않는다.
9취소선, 또는 삭제문자는 읽을 수 있지만 삭제할 것처럼 표시된다. Terminal.app에서는 지원되지 않는다.
10기본 글꼴
11–19대체 글꼴대체 글꼴을 선택한다.
20프락투어 (고딕)거의 지원되지 않음
21이중 밑줄; 또는: 굵게 아님ECMA-48에 따른 이중 밑줄, 그러나 대신 여러 터미널(예: 버전 4.17 이전의 리눅스 커널콘솔)에서 굵은 강도를 비활성화한다.[23]
22일반 강도굵지도 흐리지도 않음; 강도가 그러한 방식으로 구현되는 색상 변경.
23이탤릭체도 아니고, 블랙레터도 아님
24밑줄 없음단일 밑줄도 이중 밑줄도 아님
25깜빡이지 않음깜빡임 끄기
26비례 간격ITU T.61 및 T.416, 터미널에서 사용되는 것으로 알려지지 않음
27반전 아님
28표시숨겨지지 않음
29취소선 아님
30–37전경 색상 설정
38전경 색상 설정다음 인수는 5;n 또는 2;r;g;b이다
39기본 전경색구현 정의(표준에 따라)
40–47배경 색상 설정
48배경 색상 설정다음 인수는 5;n 또는 2;r;g;b이다
49기본 배경색구현 정의(표준에 따라)
50비례 간격 비활성화T.61 및 T.416
51테두리mintty에서 "이모지 변형 선택자"로 구현된다.[24]
52원형
53윗줄Terminal.app에서 지원되지 않음
54테두리도 원형도 아님
55윗줄 아님
58밑줄 색상 설정표준에 없음; Kitty, VTE, mintty 및 iTerm2에서 구현됨.[19][20] 다음 인수는 5;n 또는 2;r;g;b이다.
59기본 밑줄 색상표준에 없음; Kitty, VTE, mintty 및 iTerm2에서 구현됨.[19][20]
60표의 밑줄 또는 오른쪽 선거의 지원되지 않음
61표의 이중 밑줄, 또는 오른쪽의 이중 선
62표의 윗줄 또는 왼쪽 선
63표의 이중 윗줄, 또는 왼쪽의 이중 선
64표의 강조 표시
65표의 속성 없음60–64의 모든 효과를 재설정한다.
73위 첨자mintty에서만 구현됨[24]
74아래 첨자
75위 첨자도 아래 첨자도 아님
90–97밝은 전경색 설정표준에 없음; 원래 aixterm에서 구현됨[51]
100–107밝은 배경색 설정


4. 4. Fs, Fp, nF 이스케이프 시퀀스

ANSI영어 이스케이프 코드는 특수 기능 및 개인용 시퀀스를 정의하는 데 사용된다.

  • `ESC 7` (DECSC): DEC 커서 저장. 커서 위치, 인코딩 시프트 상태, 서식 속성을 저장한다.[44][51]
  • `ESC 8` (DECRC): DEC 커서 복원. 이전 `DECSC` 명령으로 저장된 커서 위치, 인코딩 시프트 상태, 서식 속성을 복원한다. 저장된 정보가 없으면 기본값으로 재설정한다.[44][51]


`ESC SP F` (ACS6, S7C1T)와 `ESC SP G` (ACS7, S8C1T)는 코드 구조를 알리고 호스트로 제어 문자를 보내는 방식을 설정한다.

VT100에서 인식하는 일부 개인용 이스케이프 시퀀스
약어이름효과
DECDHLDEC 이중 높이 문자, 상반부현재 줄이 두 배 높은 문자를 사용하도록 한다. 이 코드는 상반부를 위한 것이다.[45]
DECDHLDEC 이중 높이 문자, 하반부현재 줄이 두 배 높은 문자를 사용하도록 한다. 이 코드는 하반부를 위한 것이다.[45]
DECSWLDEC 단일 너비 줄현재 줄이 단일 너비 문자를 사용하도록 한다.[46][51]
DECDWLDEC 이중 너비 줄현재 줄이 이중 너비 문자를 사용하도록 하여, 줄의 두 번째 절반에 있는 문자를 모두 버린다.[47][51]



일부 ANSI 이스케이프 시퀀스[51]
약어이름효과
ACS6, S7C1T코드 구조 6 공지, 호스트로 7비트 C1 제어 문자 전송기능 키가 8비트 C1 코드 대신 ESC + 문자를 전송하도록 한다.
ACS7, S8C1T코드 구조 7 공지, 호스트로 8비트 C1 제어 문자 전송기능 키가 8비트 C1 코드를 전송하도록 한다.


4. 5. OSC (Operating System Command) 시퀀스

Xterm 터미널 에뮬레이터
Xterm 터미널 에뮬레이터


운영 체제별 명령 시퀀스는 Xterm에 의해 정의된 것이 많지만, 다른 터미널 에뮬레이터에서도 상당수 지원된다. 역사적인 이유로 Xterm은 표준 ST (0x9C 또는 0x1B 0x5C) 뿐만 아니라 BEL (0x07)로 명령을 종료할 수 있다.[51] 예를 들어, `ESC ]0;this is the window title BEL`을 사용하여 창 제목을 설정할 수 있다.

Xterm이 아닌 확장 기능으로는 2017년부터 사용된 하이퍼링크 `ESC ]8;;link ST`가 있으며, VTE,[39] iTerm2,[39] 및 mintty,[40] 등에서 사용된다.[41]

리눅스 콘솔은 팔레트를 변경하기 위해 `ESC ] P n rr gg bb`를 사용하는데, 애플리케이션에 하드 코딩된 경우 다른 터미널이 멈출 수 있다.[42] 그러나 `ST`를 추가하면 리눅스에서는 무시되고, 다른 터미널에서는 적절하게 무시 가능한 시퀀스를 형성한다.

5. 터미널 입력 시퀀스

키보드의 특수 키를 누르거나, 많은 xterm CSI, DCS 또는 OSC 시퀀스가 출력될 때, 사용자가 입력한 것처럼 터미널에서 컴퓨터로 전송되는 CSI, DCS, OSC 시퀀스가 생성되는 경우가 많다.

터미널에서 입력할 때 일반적인 영숫자 키보드 영역 밖의 키를 누르면 ANSI 시퀀스로 호스트에 전송될 수 있다. 커서 키와 같이 해당 기능이 있는 키는 출력 시퀀스를 미러링하기도 한다. 하지만 대부분의 키는 사용할 수 있는 해당 출력 시퀀스가 없다.

여러 인코딩 방식이 존재하며, 대부분의 터미널은 서로 다른 방식의 시퀀스를 혼합하여 사용한다. 따라서 호스트 소프트웨어는 어떤 방식을 사용하든 입력 시퀀스를 처리할 수 있어야 한다. VT 터미널은 ''일반 모드''와 ''응용 프로그램 모드''의 두 가지 입력 방식을 가지며, 응용 프로그램에 의해 전환될 수 있다.

종료 문자가 '~'인 경우, 첫 번째 숫자는 키 코드 번호이고, 두 번째 숫자는 선택적 수정자 값이다. 종료 문자가 문자이면 해당 문자는 키 코드 값이고, 선택적 숫자는 수정자 값이다.

수정자 값은 기본적으로 1이며, 1을 뺀 후에는 누르고 있는 수정자 키의 비트맵이다. 예를 들어, `[4;2~`는 Shift+End이고, `[20~`은 기능 키 F9이며, `[5C`는 Ctrl+이다.

수정자는 다음 숫자의 합이다.

눌린 키숫자코멘트
(없음)1항상 추가되며, 나머지는 선택 사항이다.
Shift1
(왼쪽) Alt2
Control4
Meta8



`[A`에서 `[D`까지는 ANSI 출력 시퀀스와 동일하다. ``는 일반적으로 수정자 키가 눌리지 않은 경우 생략되지만, 대부분의 구현에서는 F1F4에 대해 항상 ``를 내보낸다.

vt 및 xterm 시퀀스
vt 시퀀스xterm 시퀀스설명
`[1~`Home
`[2~`Insert
`[3~`Delete
`[4~``[F`End
`[5~`PgUp
`[6~`PgDn
`[7~``[H`Home
`[8~`End
`[10~`F0
`[11~``[1P`F1
`[12~``[1Q`F2
`[13~``[1R`F3
`[14~``[1S`F4
`[15~`F5
`[17~`F6
`[18~`F7
`[19~`F8
`[20~`F9
`[21~`F10
`[23~`F11
`[24~`F12
`[25~`F13
`[26~`F14
`[28~`F15
`[29~`F16
`[31~`F17
`[32~`F18
`[33~`F19
`[34~`F20
`[A`Up
`[B`Down
`[C`Right
`[D`Left
`[G`Keypad 5



Xterm은 DEC의 VT 터미널 및 에뮬레이션하는 다양한 다른 터미널에서 제공되는 다양한 기능 키 및 마우스 입력 시퀀스 방식에 대한 포괄적인 문서 페이지를 가지고 있다.[51] Thomas Dickey는 시간이 지남에 따라 많은 지원을 추가했으며,[52] 또한 다른 터미널 에뮬레이터에서 사용되는 기본 키 목록을 유지 관리하여 비교한다.[53]


  • Linux 콘솔에서 특정 기능 키는 `CSI [ ''char''` 형태의 시퀀스를 생성한다. CSI 시퀀스는 `[`에서 종료되어야 한다.
  • 이전 버전의 Terminator는 F1F4가 수정자와 함께 눌렸을 때 `SS3 1; ''modifiers'' ''char''`를 생성한다.
  • xterm은 커서 위치를 요청받으면 `CSI ''row'' ; ''column'' R`을 반환하고, F3 키가 수정자와 함께 눌리면 `CSI 1 ; ''modifiers'' R`을 반환하는데, 이는 `''row'' == 1`의 경우 충돌할 수 있다. 이는 응답에서 `CSI ? ''row'' ; ''column'' R`로 반영될 `CSI ? 6 n`과 같은 ''?'' 개인 수정자를 사용하여 피할 수 있다.
  • 많은 터미널은 Alt 키를 누른 상태에서 입력된 모든 문자에 `ESC`를 추가한다. 이는 대문자 및 기호 `@[\]^_`에 대한 모호성을 생성한다.
  • Konsole은 F1F4가 수정자와 함께 눌렸을 때 `SS3 ''modifiers'' ''char''`를 생성한다.
  • iTerm2는 향상된 CSI u 모드를 통해 추가 키 보고를 지원한다.[54]

6. 활용 예시

ANSI 이스케이프 코드는 유닉스 및 유닉스와 유사한 가상 터미널에서 구문 강조(syntax highlighting)를 제공하는 데 자주 사용된다. 예를 들어, 호환되는 터미널에서 다음 ''ls'' 명령어는 파일과 디렉토리 이름을 유형별로 색상으로 구분한다.

사용자는 이스케이프 코드를 ''표준 출력'' 또는 ''표준 에러''의 일부로 포함하여 스크립트에서 사용할 수 있다. 예를 들어, 다음 GNU ''sed'' 명령어는 "WARN"으로 시작하는 단어가 포함된 줄을 반전 비디오로 표시하고 "ERR"으로 시작하는 단어를 어두운 빨간색 배경에 밝은 노란색으로 표시하여 ''make'' 명령의 출력을 장식한다(대소문자는 무시됨).[48]

다음 Bash 함수는 사용자가 키를 누를 때까지 터미널을 깜박인다(반전 및 정상 비디오 모드 코드를 번갈아 보냄).[49]

}

이는 와 같이 긴 명령이 종료될 때 프로그래머에게 알리는 데 사용할 수 있다.[50]

이렇게 하면 최신 리눅스 시스템에서 명령과 유사하게 콘솔이 재설정된다. 그러나 이전 리눅스 시스템과 다른(비 리눅스) 유닉스 변형에서도 작동한다.

다음은 0부터 109까지의 숫자로 이루어진 표를 생성하는 C언어 프로그램 예시이다. 각 숫자는 해당 숫자를 그래픽 렌디션 코드로 사용하여 선택 그래픽 렌디션 이스케이프 시퀀스에 의해 지정된 형식으로 표시된다.

Gnome 터미널에서 예시 프로그램의 출력


```c

#include

int main(void)

{

int i, j, n;

for (i = 0; i < 11; i++) {

for (j = 0; j < 10; j++) {

n = 10 * i + j;

if (n > 108)

break;

printf("\033[%dm %3d\033[m", n, n);

}

printf("\n");

}

return 0;

}

참조

[1] 웹사이트 Heathkit Catalog 1979 http://www.pestinger[...] Heathkit Company 1979
[2] 웹사이트 Withdrawn FIPS Listed by Number https://www.nist.gov[...] 2016-12-15
[3] 웹사이트 Amiga Printer Command Definitions http://wiki.amigaos.[...] Commodore
[4] 웹사이트 Process ANSI escape sequences for Windows console programs https://github.com/a[...] Jason Hood's Home page 2005
[5] 웹사이트 colorama · PyPI https://pypi.python.[...]
[6] 웹사이트 Console Virtual Terminal Sequences - Windows Console https://docs.microso[...] 2018-05-30
[7] 웹사이트 PowerShell Help: About Special Characters https://docs.microso[...] 2023-01-12
[8] 웹사이트 Windows Console and Terminal Ecosystem Roadmap https://docs.microso[...] Microsoft 2018
[9] 서적 Using C-Kermit https://books.google[...] Digital Press
[10] 웹사이트 SCOSC—Save Current Cursor Position https://vt100.net/do[...] Digital Equipment Corporation
[11] 웹사이트 DECSLRM—Set Left and Right Margins https://vt100.net/do[...] Digital Equipment Corporation
[12] 웹사이트 SCORC—Restore Saved Cursor Position https://vt100.net/do[...] Digital Equipment Corporation
[13] 웹사이트 XTerm Control Sequences https://invisible-is[...]
[14] 웹사이트 bracketed paste mode https://cirw.in/blog[...] 2013-04
[15] 웹사이트 XTerm Control Sequences https://invisible-is[...]
[16] 웹사이트 console_codes(4) - Linux manual page http://man7.org/linu[...] 2018-03-23
[17] 웹사이트 screen(HW) http://osr507doc.sco[...] 2003-02-11
[18] 웹사이트 Bug 791596 – Thoughts about faint (SGR 2) https://bugzilla.gno[...]
[19] 웹사이트 Curly and colored underlines (#6382) · Issues · George Nachman / iterm2 https://gitlab.com/g[...] 2017-12-11
[20] 웹사이트 Extensions to the xterm protocol https://sw.kovidgoya[...]
[21] 웹사이트 Curly and colored underlines https://bugs.kde.org[...] 2022-08-27
[22] 웹사이트 console-termio-realizer http://jdebp.uk/Soft[...]
[23] 웹사이트 console_codes(4) https://man7.org/lin[...] Linux man-pages project
[24] 웹사이트 mintty/mintty: Text attributes and rendering https://github.com/m[...]
[25] 웹사이트 default shortcut on Windows remaps ANSI colors 35,36 · Issue #4266 · PowerShell/PowerShell https://github.com/P[...]
[26] 웹사이트 The IBM 5153's True CGA Palette and Color Output https://int10h.org/b[...] VileR 2022-06-11
[27] 웹사이트 Patch #192 – 2004/7/12 – XFree86 4.4.99.9 http://invisible-isl[...]
[28] 웹사이트 Patch #192 – 2004/7/12 – XFree86 4.4.99.9 http://invisible-isl[...]
[29] 웹사이트 T.416 Information technology - Open Document Architecture (ODA) and interchange format: Character content architectures https://www.itu.int/[...]
[30] 웹사이트 color-spaces.pl (a copy of 256colors2.pl from xterm dated 1999-07-11) https://quickgit.kde[...] KDE 2006-12-06
[31] 웹사이트 README.moreColors https://invent.kde.o[...] KDE 2010-04-22
[32] 웹사이트 libvte's bug report and patches: Support for 16 million colors https://bugzilla.gno[...] GNOME Bugzilla 2014-04-04
[33] 웹사이트 How to enable 24bit true color support in Gnome terminal? https://askubuntu.co[...]
[34] 간행물 curs_color(3X) - manipulate terminal colors with curses https://invisible-is[...]
[35] 웹사이트 Midnight Commander: lib/tty/color-slang.c https://fossies.org/[...]
[36] 웹사이트 NCURSES — comments on S-Lang https://invisible-is[...]
[37] 웹사이트 Features/256 Color Terminals - Fedora Project Wiki https://fedoraprojec[...]
[38] 웹사이트 Bug 733423 – Please set COLORFGBG environment variable for automatic color detection https://bugzilla.gno[...]
[39] 웹사이트 Hyperlinks (a.k.a. HTML-like anchors) in terminal emulators https://gist.github.[...]
[40] 웹사이트 mintty/mintty: Control Sequences https://github.com/m[...]
[41] 웹사이트 OSC 8 adoption in terminal emulators https://github.com/A[...]
[42] 웹사이트 console_codes — Linux console escape and control sequences https://man7.org/lin[...]
[43] 간행물 ISO-IR: ISO/IEC International Register of Coded Character Sets To Be Used With Escape Sequences https://itscj.ipsj.o[...] ITSCJ/Information Processing Society of Japan 2023-05-12
[44] 간행물 DECSC—Save Cursor https://vt100.net/do[...]
[45] 간행물 ANSI Escape sequences - VT100 / VT52 http://ascii-table.c[...] 2020-08-21
[46] 간행물 DECSWL—Single-Width, Single-Height Line https://vt100.net/do[...]
[47] 간행물 DECDWL—Double-Width, Single-Height Line https://vt100.net/do[...]
[48] 웹사이트 Chapter 9. System tips http://www.debian.or[...]
[49] 웹사이트 VT100.net: Digital VT100 User Guide http://vt100.net/doc[...] 2015-01-19
[50] 웹사이트 bash – How to get a notification when my commands are done – Ask Different http://apple.stackex[...] 2015-01-19
[51] 웹사이트 XTerm Control Sequences (ctlseqs) https://invisible-is[...]
[52] 웹사이트 XTerm FAQ: Comparing versions, by counting controls https://invisible-is[...] 2020-01-25
[53] 웹사이트 Table of function-keys for XTerm and other Terminal Emulators https://invisible-is[...] 2020-01-25
[54] 웹사이트 CSI u - Documentation - iTerm2 - macOS Terminal Replacement https://iterm2.com/d[...] 2023-08-15



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com