본문 바로가기

카테고리 없음

리눅스에서 터미널 출력시 색상 변환

유닉스/리눅스 머신에서 터미널에 문자 출력시 Colorful하게

문자를 출력하는법. 물론 외부 라이브러리는 안쓰구여..
피씨통신의 춘추전국시대였던 1990년대 초반에 대화방에서 ansi를
이용하여 현란한 기교를 부려본 경험이 있으신님들은 이미 아시고
계시리라 믿습니다만, 혹시 모르시는 님들을 위해서...

일딴, 아래의 쏘스를 컴팔해서 실행해 보시면 더 이상의 설명이
필요없이 한눈에 알아먹을수가 있으니...성질급한 님들은 바루
시행해 보셔요...
자세한 설명은 소스를 먼저 보구나서 하겠습니다..

========================[color_test.c]========================

#include

int main(void)
{
int i, j;

printf("n << Color Code Table >> nn");

for(i=40; i <= 47; i++) {
printf("x1b[0m[%d] ", i);
for(j=30; j <= 37; j++) {
printf("x1b[%dmx1b[%dm[%d] ",i ,j ,j);
}
printf("n");
}

/* 칼라해제 */
printf("x1b[0mn");

printf("Example> printf("\x1b[41m\x1b[33m[BgColor=41, FgColor=33]\x1b[0m\n"); n");
printf("Result> x1b[41mx1b[33m[BgColor=41, FgColor=33]x1b[0mn");
printf("n");
printf("Example> printf("\x1b[44m\x1b[32m칼라로 나타내고 싶은 메시지\x1b[0m\n"); n");
printf("Result> x1b[44mx1b[32m칼라로 나타내고 싶은 메시지x1b[0mn");

printf("n");

exit(0);
}

===================================================================

실행을 해보셨으면 알겠지만, 칼라 테이블이 쫙~~~ 나옵니다..
여기서 맨 왼쪽의 숫자들은 배경색을 지정할때 사용되고
테이블내의 숫자들은 글자색을 지정할때 사용됩니다.
기본적으루 배경색을 지정하지 않으면 그냥 터미널에 설정된
배경색에 따릅니다..

printf()의 따옴표내 출력문자들을 보면 크게 4부분으로 나눌수 있습니다.

x1b[44m <---- 배경색 지정(44는 파랑)

x1b[32m <---- 글자색 지정(32는 초록)

칼라로 나타내고 싶은 메시지

x1b[0m <---- 칼라해제


이렇게 칼라로 찍을때 주의할 점은...마지막에 꼭 색상지정을
해제해야지 안그러면 이후 터미널에 출력되는 모든 문자가 그
칼라값의 영향을 받아서 출력이 됩니다..
해제는 마지막에 "x1b[0m" 요걸 출력해주면 됩니다.
일딴, 칼라로 출력하는법은 알겠는데... 요걸 어디다 써먹으면
좋을지 궁금하신 분들이 있을것 같은데요...
저는 로그메시지를 찍을때 사용합니다.. 특히 디버깅모드로
로그를 남기도록 해둔 상태에서 몇몇 중요한 값들을 찍을때
칼라로 찍으면 한눈에 알아볼수가 있으니 편합니다..

아참...그리고 위의 칼라 말구도...화면을 컨트롤 할 수 있는
코드가 찾아보면 더 있습니다...가령 문자를 깜박이게 한다든가..
요런건 직접 찾아보세여~~
위 코드를 많이 사용하면 소스가 지저분하게 보이게 되는데요..
그땐 define문을 이용하거나...더 쌈빡하게 하려면 Wrapper함수를
만들어서 사용하시면 소스도 깔끔해 지겠죠?

P.S : 단, 시스템 환경변수의 $TERM값에 의해 칼라가 나타나지 않을수 있습니다.

이럴땐 TERM환경변수의 값을 다른것으로 변경해 보세요.