notcurses v1.4.1์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค - ์ตœ์‹  ํ…์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


notcurses v1.4.1์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค - ์ตœ์‹  ํ…์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

notcurses v1.4.x ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ƒˆ ๋ฒ„์ „์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. โ€œ์ „์„ค์€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค! ์šฐํƒ•! ์šฐํƒฑ!โ€

Notcurses๋Š” ์ตœ์‹  ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์œ„ํ•œ TUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ €์ฃผ๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. C++ ์•ˆ์ „ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ C๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ž˜ํผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋…น, C + + ะธ Python.

์ •์˜: ์ตœ์‹  ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๋ณต์žกํ•œ TUI๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๋ฐ์€ ์ƒ‰์ƒ๊ณผ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Curse์— ์œ„์ž„๋œ ๋งŽ์€ ์ž‘์—…์€ notcurses๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ ๋ฐ˜๋Œ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€).

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ: X/Open ์ €์ฃผ์˜ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๊ตฌํ˜„ ๋˜๋Š” ๊ธฐ์กด ์‹œ์Šคํ…œ์˜ ncurses๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

Notcurses๋Š” ๋‹จ์ผ UNIX ์‚ฌ์–‘์˜ ์ผ๋ถ€๋กœ ์ œ๊ณต๋˜๋Š” X/Open Curses API๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ์–‘์€ ์˜ค๋ž˜ ์ „๋ถ€ํ„ฐ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ฑ์‹ฑ๋˜์ง€ ์•Š์€ 24๋น„ํŠธ ์ƒ‰์ƒ๊ณผ ๊ฐ™์€ ํ„ฐ๋ฏธ๋„ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ notcurses๋Š” ์ €์ฃผ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํœด๋Œ€์„ฑ์ด ๋–จ์–ด์ง€๋ฉฐ ํ™•์‹คํžˆ ๋” ์ ์€ ์ˆ˜์˜ ํ•˜๋“œ์›จ์–ด์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•  ๋•Œ๋งˆ๋‹ค notcurses๋Š” ncurses์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” terminfo ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์‹์„ฑ์—์„œ ํฐ ์ด์ ์„ ์–ป์Šต๋‹ˆ๋‹ค.
Notcurses๋Š” ์›Œํฌ์Šคํ…Œ์ด์…˜, ํœด๋Œ€ํฐ, ๋…ธํŠธ๋ถ ๋ฐ ํƒœ๋ธ”๋ฆฟ์—์„œ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๋น„ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ์˜ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ๊ณผ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„ ๊ณ ๋ ค์‚ฌํ•ญ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

  • X/Open์— ๋น„ํ•ด ํ˜•์‹์ด ๋” ์ž˜ ๊ตฌ์„ฑ๋œ API:

    • ๋‚ด๋ณด๋‚ธ ์‹๋ณ„์ž์—๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค.

    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ์ฒด ํŒŒ์ผ์€ ์ตœ์†Œํ•œ์˜ ๋ฌธ์ž ์ง‘ํ•ฉ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ •์  ์ฝ”๋“œ๋Š” ์ค„ ํ—ค๋”์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ตœ์ ํ™”ํ•˜๊ณ  ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  API๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ”์šฉ ๋ฌธ์ž ์ง‘ํ•ฉ(์œ ๋‹ˆ์ฝ”๋“œ)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์…€ API๋Š” ๋‹ค์Œ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ์˜ ํ™•์žฅ ๋ฌธ์ž์†Œ ํด๋Ÿฌ์Šคํ„ฐ.

  • ์ด๋ฏธ์ง€, ๊ธ€๊ผด, ๋น„๋””์˜ค, ๊ณ ๋Œ€๋น„ ํ…์ŠคํŠธ, ์Šคํ”„๋ผ์ดํŠธ ๋ฐ ํˆฌ๋ช… ์˜์—ญ์„ ํฌํ•จํ•œ ์‹œ๊ฐ์  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  API๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ„ฐ๋ฏธ๋„์—์„œ ํ•„์š”์— ๋”ฐ๋ผ ์–‘์žํ™”๋˜๋Š” 24๋น„ํŠธ ์ƒ‰์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • Apache2 ๋ผ์ด์„ผ์Šค์™€ ๋‹ฌ๋ฆฌ ๋“œ๋ผ๋งˆ ncurses ๋ผ์ด์„ผ์Šค์ธ ์—ฌ๋Ÿฌ ํ–‰์œ„์—์„œ (ํ›„์ž๋Š” "MIT-X11์˜ ์žฌ๊ตฌ์„ฑ"์œผ๋กœ ์š”์•ฝ๋ฉ๋‹ˆ๋‹ค).

์ด์ „์˜ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์ธ 1.1.0 ์ดํ›„๋กœ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ:

  • ์ฝ๊ธฐ ๋ฌธ์ž์—ด์— ์—ฐ๊ฒฐ๋œ ์ž์œ  ํ˜•์‹ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์ฝ๊ธฐ ์œ„์ ฏ

  • ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ด€๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ธฐ ์œ„ํ•œ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ์œ„์ ฏ์ž…๋‹ˆ๋‹ค.

  • Linux 5.3+์—์„œ๋Š” ์ƒˆ๋กœ์šด clone3+pidfd ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ์Ÿ ์กฐ๊ฑด ์—†์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ์ž„์˜์˜ ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ํ”Œ๋ ˆ์ธ(ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋นŒ๋“œ๋œ ํ”Œ๋ ˆ์ธ)์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๊ธฐ ์œ„ํ•œ Fdplane ์œ„์ ฏ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ฝœ๋ฐฑ์„ ํ†ตํ•ด ํ…์ŠคํŠธ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ‰๋ฉด ํšŒ์ „ ๋ฐ ์‹œ๊ฐ ํšจ๊ณผ. ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‹œ๊ฐํ™”๋ฅผ ๋กœ๋“œํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„ RGBA/BGRx ๋ธ”๋ฆฌํŒ….

  • ๋ฉ”๋‰ด๋Š” ์ƒ๋‹จ ๋ฐ ํ•˜๋‹จ ํ‰๋ฉด ์ค‘ ํ•˜๋‚˜(๋˜๋Š” ๋‘˜ ๋‹ค)์— ๋ฐฐ์น˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง์ ‘ ๋ชจ๋“œ๊ฐ€ ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํด๋ฆฌํ•„, ๊ทธ๋ผ๋””์–ธํŠธ ๋ฐ ๊ณ ๋Œ€๋น„ ํ…์ŠคํŠธ.

  • ์˜ˆ๋กœ ํ…ŒํŠธ๋ฆฌ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Marek Habersack์˜ C++ ๋ž˜ํผ์—๋Š” ์ด์ œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ๊ฒฝ์šฐ).

  • Python ๋ฐ Rust FFI๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ž‘์„ฑ์ž์˜ ์˜๊ฒฌ์ด ํฌํ•จ๋œ ๋น„๋””์˜ค ๋ฐ๋ชจ
์ฑ…โ€œํ•ดํ‚น ๋” ํ”Œ๋ž˜๋‹›! ์ €์ž์˜ Notcourses์™€ ํ•จ๊ป˜

์ถœ์ฒ˜ : linux.org.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€