Π’Ρ‹ΡˆΠ»Π° notcurses v1.4.1Β β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для соврСмСнных тСкстовых интСрфСйсов


Π’Ρ‹ΡˆΠ»Π° notcurses v1.4.1 — Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для соврСмСнных тСкстовых интСрфСйсов

Π’Ρ‹ΡˆΠ»Π° новая вСрсия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ