Escape Codes의 역사

개발을 위해 컴퓨터에 리눅스를 설치할 때 반드시 설치하는 프로그램이 있다. sl이라는 프로그램이다. 이게 무슨 프로그램이냐면 커맨드 창에서 sl을 치면 기차를 보여주는 프로그램이다. 실용성 있는 프로그램은 아니고, 터미널에서 많이 사용되는 ls 명령어의 오타를 냈을 때 화면에 기차를 보여줘 생각할 시간을 주는 프로그램이다. 이를 통해 오타를 낼 정도로 마음이 급한 상황에서 다른 실수를 하지 않고 조금은 침착해지라는 의미에서 항상 설치한다.

출처: https://github.com/mtoyoda/sl

터미널은 실행한 프로그램이 내보내는 두 출력 stdoutstderr를 받아 화면에 보여주는 프로그램이다. stdoutstderr은 순차적인 출력이다. 보통의 출력은 왼쪽 위에서 오른쪽 아래로 흘러간다. sl처럼 이미 쓰인 화면에 새로운 글자를 그리기 위해서는 특별한 방법이 필요하다. 이 특별한 방법은 escape codes라고 한다.

escape codes는 터미널에 정의된 일종의 약속이다. 이 약속은 현재는 ISO 6429에서 정의하는 표준을 따른다. 하지만 과거에는 통일된 규정이 없이 터미널 모델마다 다른 규정을 가지고 있었다. 과거의 컴퓨터를 모르면 터미널 모델마다 다르다는 것이 이해되지 않을 수도 있다. 이를 알기 위해서는 컴퓨터의 역사를 알아야 한다.

지금은 터미널이라고 하면 CLI를 위한 애플리케이션을 의미한다. 하지만 과거 터미널은 문자 그대로 컴퓨터의 최종 단말기였다. 이 단말기는 메인프레임 컴퓨터에 연결돼 메인프레임 컴퓨터의 입출력을 담당했다. 현대의 터미널 앱이 터미널 에뮬레이터라고 불리는 이유가 이 터미널을 에뮬레이트 하는 것이기 때문이다. 과거 터미널은 ADM-3A, 지금도 유명한 IBM 사의 IBM 2260IBM 3270, 후에 HP에 인수되는 DEC 사의 VT 시리즈 등 다양한 회사에서 개발됐고, 이들은 각각 고유의 표준을 가지고 터미널을 조정했다.

출처: https://en.wikipedia.org/wiki/IBM_2260

독립적으로 구현됐던 코드들은 호환되지 않았고, 이들을 통일하기 위한 작업이 1970년대에 진행됐다. 첫 표준은 1976년 출시 된 ECMA-48이었다. 하지만 현대의 escape codes에 가장 큰 영향을 끼친 건 1978년 DEC에서 출시한 VT100이라는 터미널이다. VT100Control Sequence Intdoducer(a.k.a. CSI)를 도입하여 다양한 명령어를 도입했다. 여기에는 커서의 이동, 스크롤 등 현대 터미널 에뮬레이터에도 쓰이는 중요한 기능이 포함된다. VT100의 구현을 기반으로 1979년 ANSI에서 ANSI X3.64 표준을 발표했고, ECMA-48ANSI X3.64를 기반으로 1983년 ISO에서 ISO 6429를 발표. 1992년 몇 가지 코드를 추가해 지금까지 표준으로 사용되고 있다. 따라서 현대의 터미널 에뮬레이터들은 모두 ISO 6429를 따라 구현됐다고 보면 된다.

댓글

댓글 쓰기

이 블로그의 인기 게시물

[C++] enum class - 안전하고 쓰기 쉬운 enum

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

RAII는 무엇인가

[Python] cache 데코레이터로 최적화하기

[Web] SpeechSynthesis - TTS API