ΠΡΡΠ»Π° Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ notcurses v1.4.x «the saga continues! wu-tang! wu-tang!»
Notcurses ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° TUI Π΄Π»Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠ². ΠΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ – Π½Π΅ ΠΏΡΠΎΠΊΠ»ΡΡΠΈΡ (not curses). ΠΠ½Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Π‘, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ C++-safe headers. ΠΠΎΡΡΡΠΏΠ½Ρ ΠΎΠ±ΡΡΡΠΊΠΈ Π΄Π»Ρ Rust, C++ ΠΈ Python.
Π§ΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅: Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΏΡΠΎΡΠ°ΡΡΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ TUI Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠ°Ρ , ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ°Ρ ΡΡΠΊΠΈΠ΅ ΡΠ²Π΅ΡΠ° ΠΈ Unicode. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ curses, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ notcurses (ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ).
Π§Π΅ΠΌ ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ: ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ X/Open curses ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ncurses Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ .
Notcurses ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡ API X/Open Curses, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Single UNIX Specification. ΠΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π°Π²Π½ΠΎ ΡΡΡΠ°ΡΠ΅Π»Π° ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°, ΠΊΠ°ΠΊ Π½Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ 24-Π±ΠΈΡΠ½ΡΠΉ ΡΠ²Π΅Ρ. ΠΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²Π°Ρ, notcurses Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ curses. ΠΠ½Π° ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΡΡΠ°ΡΠΈΠ²Π½Π°, ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π° Π½Π° ΠΌΠ΅Π½ΡΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ³Π΄Π° ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, notcurses ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ terminfo, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ncurses, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ Π±ΠΎΠ»ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·Ρ ΠΈΠ· Π΅Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ.
Notcurses ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠΈΡ
ΡΡΠ°Π½ΡΠΈΡΡ
, ΡΠ΅Π»Π΅ΡΠΎΠ½Π°Ρ
, Π½ΠΎΡΡΠ±ΡΠΊΠ°Ρ
ΠΈ ΠΏΠ»Π°Π½ΡΠ΅ΡΠ°Ρ
.
ΠΠ°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ?
-
ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΠΌ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
-
ΠΠΎΠ»Π΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΠΎΠ΅ API ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ X/Open:
-
ΠΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΠ΅Π½.
-
ΠΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π’Π°ΠΌ, Π³Π΄Π΅ ΡΡΠΎ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΡΠΎΡΠ½ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². ΠΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
-
-
ΠΡΠ΅ API ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (Unicode). API Π΄Π»Ρ ΡΡΠ΅Π΅ΠΊ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Unicode’s Extended Grapheme Cluster.
-
ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΠΈΡΡΡ, Π²ΠΈΠ΄Π΅ΠΎ, Π²ΡΡΠΎΠΊΠΎΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ, ΡΠΏΡΠ°ΠΉΡΡ ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ. ΠΡΠ΅ API Π½Π°ΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ 24-Π±ΠΈΡΠ½ΡΠΉ ΡΠ²Π΅Ρ, ΠΊΠ²Π°Π½ΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
-
ΠΠΈΡΠ΅Π½Π·ΠΈΡ Apache2, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΡΠ°ΠΌΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π°ΠΊΡΠ°Ρ , ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ ncurses (ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ΅Π·ΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ «ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ MIT-X11»).
Π‘ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° 1.1.0 Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
-
ΠΠΈΠ΄ΠΆΠ΅Ρ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊ ΡΡΡΠΎΠΊΠ°ΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ
-
ΠΠΈΠ΄ΠΆΠ΅Ρ subprocess Π΄Π»Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠΌ ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΎΠ±ΡΠ°ΡΠ½ΠΎ.
-
Π Linux 5.3+ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ clone3+pidfd Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π±Π΅Π· race condition.
-
ΠΠΈΠ΄ΠΆΠ΅Ρ Fdplane Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡ (Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΡΡΠΎΠ΅Π½ ΠΏΠΎΠ΄ΠΏΡΠΎΡΠ΅ΡΡ). ΠΠ±Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ Π²ΡΠ·ΠΎΠ²Π°ΠΌ ΡΡΠΈΠ»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ.
-
ΠΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠ΅ΠΉ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ². ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ Π±Π»ΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ RGBA/BGRx.
-
ΠΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ (ΠΈΠ»ΠΈ Π½Π° ΠΎΠ±Π΅ΠΈΡ ) ΠΈΠ· Π²Π΅ΡΡ Π½ΠΈΡ ΠΈ Π½ΠΈΠΆΠ½ΠΈΡ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠ΅ΠΉ.
-
ΠΠΎΠ»ΡΡΠΈΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Direct.
-
Polyfills, Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΡ ΠΈ Π²ΡΡΠΎΠΊΠΎΠΊΠΎΠ½ΡΡΠ°ΡΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ.
-
ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠ΅ΡΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
-
ΠΠ±Π΅ΡΡΠΊΠΈ C++ ΠΎΡ Marek Habersack ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΠΎΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ).
-
Python ΠΈ Rust FFI ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Ρ.
ΠΠΈΠ΄Π΅ΠΎ Π΄Π΅ΠΌΠΎ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ Π°Π²ΡΠΎΡΠ°
ΠΠ½ΠΈΠ³Π° «Hacking The Planet! with Notcurses» ΠΎΡ Π°Π²ΡΠΎΡΠ°
ΠΡΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru