C/C++ 콘솔 프로그램에서 ANSI 이스케이프 시퀀스 명령어를 사용하여 콘솔 커서 이동 등 터미널을 조작할 수 있다.
1. 이스케이스 시퀀스 시작 : \x1B[ 또는 \033[를 사용하여 ANSI 이스케이프 시퀀스를 시작한다. 아래서는 \x1B[ 기준으로 설명한다.
2. 커서 이동
- 커서를 위로 이동 : \x1B[A, \x1B[A 또는 \x1B[1A 는 위로 한칸 이동하고 \x1B[2A 는 위로 두칸 이동한다.
- 커서를 아래로 이동 : \x1B[B
- 커서를 오른쪽으로 이동 : \x1B[C
- 커서를 왼쪽으로 이동 : \x1B[D
- 특정 위치로 커서 이동 : \x1B[<row>;<col>H, row는 행번호 col은 열번호로 \x1B[0;0H 또는 \x1B[1;1H 는 화면의 좌측 상단 첫번째 칸으로 이동한다.
3. 커서 숨기기/보이기
- 커서 숨기기 : \x1B[?25l
- 커서 보이기 : \x1B[?25h
4. 화면 지우기
- 현재 위치부터 끝까지 화면 지우기 : \x1B[J
- 시작부터 현재 위치까지 화면 지우기 : \x1B[1J
- 전체 화면 지우기 : \x1B[2J
5. 텍스트 색상 변경 : \x1B[38;5;<color>m, 여기서 color는 색상 코드이다.
6. 배경 색상 변경 : \x1B[48;5;m
7. 기본 색상 복원 : \x1B[0m, 기본 텍스트 및 배경 색상으로 돌아감
https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797
사용 예시.
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[30];
printf("\x1B[38;5;82m");
printf("=====================================\n");
printf("| 당신의 이름을 입력하세요. |\n");
printf("| 이름 : |\n");
printf("=====================================");
printf("\x1B[1A\x1B[24D");
fgets(buf, sizeof(buf), stdin);
buf[strcspn(buf, "\n")] = '\0';
printf("\x1B[2J\x1B[0;0H");
printf("\x1B[38;5;226m");
printf("=====================================\n");
printf("| 당신의 이름은 바로! |\n");
printf("| 이름 : %-22s |\n", buf);
printf("=====================================");
printf("\x1B[38;5;0m");
return 0;
}
근데 사실 윈도우 콘솔창에서 이동할 때는 windows.h 헤더 파일을 포함한 다음에 SetConsoleCursorPosition 함수를 사용하는 편이 낫긴하다.
void gotoXY(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
'프로그래밍 > C' 카테고리의 다른 글
strpbrk (0) | 2023.12.21 |
---|---|
strcspn (0) | 2023.12.20 |
윈도우 소켓 ] select 입출력 모델 (0) | 2023.11.26 |
Win32 API ] 이벤트 / CreateEvent, SetEvent, ResetEvent (0) | 2023.10.31 |
윈도우 소켓 ] 소켓과 연결된 원격 호스트의 IP주소와 Port번호 가져오기, getpeername() (0) | 2023.10.28 |