์ฝ˜์†”์„ ํ†ตํ•ด ๋””๋ฒ„๊น…์„ ํ• ๋•Œ ์กฐ๊ธˆ ๋” ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด UI๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค. ์ด๋•Œ VT100์ด๋ž€๊ฑธ ์ด์šฉํ•˜์—ฌ ์ฝ˜์†”์„ ์ œ์–ดํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

https://yoda.wiki/wiki/ANSI_escape_code

 

ANSI ์ด์Šค์ผ€์ดํ”„ ์ฝ”๋“œ - ์š”๋‹ค์œ„ํ‚ค

ANSI ์ด์Šค์ผ€์ดํ”„ ์ฝ”๋“œ ANSI escape code ๋น„๋””์˜ค ํ…์ŠคํŠธ ๋‹จ๋ง๊ธฐ์˜ ๋””์Šคํ”Œ๋ ˆ์ด ์˜ต์…˜์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ใ€ŒANSI ์ฝ”๋“œใ€๋Š” ์—ฌ๊ธฐ์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋ฉ๋‹ˆ๋‹ค.๊ทธ ์™ธ์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š”, ANSI(๋ช…๋ฃŒํ™”)๋ฅผ ์ฐธ์กฐํ•ด ์ฃผ์„ธ

yoda.wiki

ESC ๋ช…๋ น

ESC

 

1) ํ™”๋ฉด ํด๋ฆฌ์–ด

๋จผ์ € ์ฝ˜์†” ํ™”๋ฉด ์ง€์šฐ๊ธฐ๋ฅผ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

์œ„์™€ ๊ฐ™์ด printf๋ฅผ ์น˜๋ฉด ์ฝ˜์†” ํ™”๋ฉด์ด ๊นจ๋—ํ•ด์ง„๋‹ค. 2๋Š” ์ „์ฒดํ™”๋ฉด, J๋Š” ์ง€์šฐ๊ธฐ, 27์€ ESC ์ด์Šค์ผ€์ดํ”„ ์ฝ”๋“œ์ด๋‹ค.

 

์‚ฌ์ด์— ๋ณ€์ˆ˜๋กœ ์›Œ๋“œ๋ฅผ ๋„ฃ์–ด๋ณด๋ ค ํ–ˆ์œผ๋‚˜ ์‹คํŒจ, ๊นจ์ง„๋‹ค.

printf("%c[41m %c %c[0m", 27, word, 27);

 

2) ์ขŒํ‘œ ์žก๊ธฐ

์ƒํƒœ ๊ฐ’๋“ค์˜ ์œ„์น˜๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์ œ์ž๋ฆฌ์—์„œ ์–Œ์ „ํžˆ ๊ฐ’๋งŒ ๋ณ€๋™๋˜๋Š” ๋ชจ์Šต์œผ๋กœ ์žˆ์–ด์•ผ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ํŽธํ•˜๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด ์ขŒํ‘œ๋ฅผ ๋จผ์ € ์žก์€ ๋‹ค์Œ์— ํ‘œ๊ธฐํ•  ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์ œ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

	printf("%c[45;5f", 27);
	printf("page_num : %d    \r\n", page_num);
	printf("%c[46;5f", 27);
	printf("list_num : %d    \r\n", list_num);

์œ„์—์„œ printf("%c[45;5f", 27);๋ฅผ ๋ณด๊ฒ ๋‹ค. ์—ฌ๊ธฐ์„œ 45๋Š” y์ถ• ์ขŒํ‘œ๋ฅผ ๋œปํ•œ๋‹ค ์œ„์—์„œ 45๋ฒˆ์งธ ์ค„์ด๋ผ๋Š” ๋œป์ด๋‹ค. 5๋Š”  x์ถ• ์ขŒํ‘œ์ด๋‹ค. ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 5์นธ์งธ ์œ„์น˜๋ฅผ ๋œปํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."