ANSI VT100

2009/02/26 14:15

어디서 퍼왔는지는 모르겠지만... 가끔씩 쉘 스크립트 짤때 유용함. ^^


#
# ANSI Escape sequence ( Color )
#

  원하는대로 글자의 속성을 바꾸는 일은 "ESC sequence"를 통해 하게됩니다.
즉, ESC code (ascii code 27) 다음에 일련의 명령어를 적어넣어 터미널을 제어하는
것이죠.
그렇다면, 제어문자 ESC code를 어떻게 에디터에 입력하는가와, 어떤 명령어가
있는가만 알면 되겠죠.
그러나 잘못사용하면 여러 사람에게 피해를 줄 수 있으니 주의하셔야 합니다.
반드시 마지막 부분의 주의사항까지 읽어주시기 바랍니다.

1.1 si editor에서.
key를 연속으로 두번 누른다.
또는 CTRL+[ 를 연속으로 두번 누른다.
또는  와 CTRL+[를 섞어서 쳐도 됩니다(둘은 동일합니다).

1.2 vi editor에서 (insert mode에서).
CTRL+v를 누른다 (control문자 입력).
그 다음, CTRL+[를 누르거나,  key를 누른다.
              
앞으로, ESC라고 쓴 것은 ESC code를 말하며 이것은 위의 방법으로 입력된
제어문자를 말합니다. 절대로 'E', 'S', 'C' 타이핑해서 입력하는 것이 아닙니다.

        m2. Attribute  -  ESC[nm
                          ESC = ESC code              
                          n   = number

2.1 글자 속성

number  예제           실제 입력하는 코드
   0     off         =  ESC[0mnormalESC[0m
   1     bold        =  ESC[1mboldESC[0m
   4     underscore  =  ESC[4munderscoreESC[0m
   5     blink       =  ESC[5mblinkESC[0m
   7     reverse     =  ESC[7mreverseESC[0m
   8     concealed   =  ESC[8mconcealedESC[0m

Note] si에선 ESC code가 입력되면 '*'표시가 나오고,
vi에선          "          '^['표시가 나옵니다.
위에 보면 끝마다 ESC[0m으로 속성을 off한 것이 보이죠?
글의 속성을 바꿔주었으면, 나중엔 원래대로 되돌려놓으세요.
안그러면, 이후에 보는 글자가 그 속성대로 나오니까요.

2.2 전경색 (Foreground Color)

number   예제           실제 입력한 코드
  30  black   =  ESC[30mblackESC[0m           9%)
  31  red     =  ESC[31mredESC[0m
  32  green   =  ESC[32mgreenESC[0m
  33  yellow  =  ESC[33myellowESC[0m
  34  blue    =  ESC[34mblueESC[0m
  35  magenta =  ESC[35mmagentaESC[0m
  36  cyan    =  ESC[36mcyanESC[0m
  37  white   =  ESC[37mwhiteESC[0m

2.3. 배경색 (Background Color)

number       예제        실제로 입력한 코드

40  black  =  ESC[40mblackESC[0m
41  red    =  ESC[41mredESC[0m
42  green  =  ESC[42mgreenESC[0m
43  yellow =  ESC[43myellowESC[0m
44  blue   =  ESC[44mblueESC[0m
45  magenta=  ESC[45mmagentaESC[0m
46  cyan   =  ESC[46mcyanESC[0m
47  white  =  ESC[47mwhiteESC[0m

                                                              
주의할 점

문자의 속성을 바꾸었으면 언젠가는 한번 정상상태로 되돌려야 합니다.

즉, ESC[4m어쩌구 저쩌구 라고 했으면

나중에 normal attribute로 돌려주어야 합니다, ESC[0m으로요.

그렇지 않으면, setting된 속성이 그대로 남아 계속 영향을 미칩니다.
위에서 밑줄이 ESC[0m하기 전까지 계속되는 것을 볼수 있지요?

3. 커서 이동

화면의 좌측상단의 좌표가 (1, 1)입니다.

ESC[pr;pcH    -   좌표 (pr, pc)로 이동할때
ESC[pr;pcf    -   "

ESC[pnA       -   pn줄 만큼 위로
ESC[pnB       -   pn줄 만큼 아래로
ESC[pcC       -   pc칸 만큼 오른쪽으로               
ESC[pcD       -   pc칸 만큼 왼쪽으로

ESC[s         -   현재의 터미널 정보, 커서위치 저장
ESC[u         -   저장된 정보로 세팅, 저장된 위치로 이동                 

4. 지우기

ESC[2J    -   화면 전체 지우기
ESC[1J    -   화면처음부터 커서 위치까지 지우기

ESC[2K    -   줄 전체지우기
ESC[1K    -   줄 처음부터 커서위치까지 지우기
ESC[K     -   커서다음부터 줄 끝까지 지우기          

5. 그 외

5.1. 잘 안되는기능 (제 터미널만 그럴 수 있습니다.)

글자 두배로 키우는 기능  <---  ESC#3, ESC#4
글자 깜빡거리는 기능     <---  ESC[5m           

5.2. 글자의 속성은 조합이 가능합니다.

예) 조합된 속성  

               = ESC[4mESC[31mESC[43m조합된 속성ESC[0m
                     ^      ^      ^                ^
                     |      |      |                |
                     |      |    배경색:노랑      원래대로
                     |   전경색:빨강
                    밑줄
               = ESC[4;31;43m조합된 속성ESC[0m (이렇게 짧게 줄여 쓸 수 있습니다)

5.3. 그 외에 화면모드 세팅, prompt 세팅, keypad 세팅 등 있으며,
자세한 것은 Flag보드에 Kidssysop님의 "ANSIcode (Texxt)"를 보십시오.

5.4. 애니메이션은 글자의 속성과 커서이동등을 함께 이용합니다.
위에보면 Kidssysop님이 퍼온 aninmation 몇 개와,
어느 한 분과, 제가 끼적거려 놓은 것이 있으므로 코드갈무리로
코드를 보시면 대강 어떻게 하는지 알수 있을 겁니다.
또는 Web Browser로 이 글을 읽어도 제어문자가 다 보일 겁니다.
좀 지저분하게 보이겠죠 :)

6. 절대 주의사항

앞서 ESC[0m으로 하면 normal attribute가 된다고 하였습니다.
그리고 여기서 서술한 것은 모두 vt100기준입니다.
따라서 vt100 호환 터미널이 아니면 화면이 깨질 수도 있습니다.
다른 사람에게 피해를 줄 수 있는 것입니다.

이러한 피해를 줄일 수 있도록 신경을 써야 합니다.
그럼 그 방법에 대해서 말씀드리겠습니다.

먼저, 제어문자를 사용하기전에 ESC[s 로 터미널 세팅을 저장합니다.
그리고 할 것 다 하고 난 다음에 ESC[u 로 리셋시킵니다.

제 시그너쳐를 예로 들겠습니다. 편의상 ESC 표시는 다 빼겠습니다.

[s[31m _   __[B[7D/ `-'  ([12C[33miii[2B[3D!!![23D[2A[31m
|[32m ( #  [37;45m||||||||||||[0m[34m[***][B[24D[31m\_.-.__(
[2A[26C[36m음악과 함께 [1;4m가통이[0m
[B[40D[1m고정관념은 싫다. 나에겐 나의 방식이.[0m[u   

맨 처음에 [s 를 하고 맨 마지막에 [u 를 한 것이 보이죠?
별로 힘도 들지 않습니다.


7. 참고자료

Return을 누르십시오.[Text]," FlagOfKids, 1994.
?  , "? 에뮬레이터 구현 ?," 마소지, 5월호, 1995.
그외 이미 ESC sequence를 사용하는 사람들의 글 소스코드

위의 명령어를 쉘 상에서 바로 실행하면 즉시 반영된다.

"Linux" 카테고리의 다른 글

TAG , ,

Trackback

Trackback Address :: http://www.lovelgw.com/Blog/trackback/16