Apa itu : Perpustakaan yang memfasilitasi TUI kompleks pada emulator terminal modern, mendukung warna -warna cerah, multimedia, benang, dan unicode hingga tingkat maksimum yang mungkin. Hal -hal dapat dilakukan dengan notcurses yang tidak bisa dilakukan dengan ncurses. Lebih lanjut secepat kotoran. Apa itu bukan : implementasi X/Open Curses yang kompatibel dengan sumber, atau penggantian untuk ncurses pada sistem yang ada.
Untuk informasi lebih lanjut, lihat Dankwiki dan Halaman Manusia. Selain itu, ada output doxygen. Untuk berlangganan milis, kirim email ke [email protected] (konten email tidak masalah). Saya menulis buku panduan yang koheren, yang tersedia untuk diunduh gratis (atau pembelian paperback).
Saya belum menambahkan banyak contoh yang terdokumentasi, tetapi SRC/ POC/ dan SRC/ POCPP/ masing -masing berisi banyak program C dan C ++. notcurses-demo mencakup sebagian besar fungsi NotCurses.
Jika Anda menjalankan aplikasi NotCurses di Docker, silakan berkonsultasi dengan "Catatan Lingkungan" di bawah ini.



NotCurses meninggalkan API Kutukan X/Open yang dibundel sebagai bagian dari spesifikasi UNIX tunggal. Untuk beberapa latar belakang yang diperlukan, Konsultasikan dengan FAQ NCURES Thomas E. Dickey yang luar biasa dan otoritatif. Dengan demikian, NotCurses bukan penggantian kutukan drop-in.
Jika memungkinkan, NotCurses memanfaatkan perpustakaan Terminfo yang dikirimkan dengan ncurses, sangat diuntungkan dari portabilitas dan ketelitiannya.
NotCurses membuka fungsionalitas canggih untuk pengguna interaktif di workstation, ponsel, laptop, dan tablet, mungkin dengan mengorbankan misalnya beberapa terminal industri dan ritel. Pada dasarnya, kutukan mengasumsikan minimum dan memungkinkan Anda (dengan upaya) untuk melangkah, sedangkan NotCurses mengasumsikan maksimum dan mundur (dengan sendirinya) bila perlu. Pendekatan terakhir mungkin pecah pada beberapa perangkat keras yang lebih lama, tetapi pendekatan yang sebelumnya menghasilkan perangkat lunak baru yang tampak seperti perangkat keras lama.
Mengapa menggunakan perpustakaan non-standar ini?
Keamanan utas, dan penggunaan yang efisien dalam program paralel, telah menjadi pertimbangan desain sejak awal.
Permukaan yang lebih tertib dari yang dikodifikasi oleh X/Open: Identifier yang diekspor diawali untuk menghindari tabrakan namespace yang umum. Di mana kode header static inline digunakan. Ini memfasilitasi optimasi kompiler, dan mengurangi waktu loader. NotCurses dapat dibangun tanpa fungsionalitas multimedia, membutuhkan serangkaian dependensi yang jauh lebih rendah.
Semua API secara asli mendukung set karakter universal (Unicode). API nccell didasarkan pada konsep kluster grapheme Unicode yang diperluas.
Fitur visual termasuk gambar, font, video, teks kontras tinggi, sprite, dan daerah transparan. Semua API secara asli mendukung warna 24-bit, dikuantisasi jika diperlukan untuk terminal.
Dukungan portabel untuk grafik bitmapped, menggunakan Sixel, Kitty, dan bahkan Linux Framebuffer Console.
Dukungan untuk protokol keyboard yang tidak ambigu.
"Mode TUI" memfasilitasi aplikasi berkinerja tinggi, tidak bergulir, dan layar penuh. "Mode CLI" mendukung output pengguliran untuk utilitas shell, tetapi dengan kekuatan penuh NotCurses.
Ini dilisensikan Apache2 secara keseluruhan, sebagai lawan dari drama dalam beberapa tindakan yang merupakan lisensi ncurses (yang terakhir dirangkum sebagai "penyajian ulang mit-x11").
Sebagian besar di atas dapat didapat dengan ncurses, tetapi bukan apa yang dirancang untuk NCURES. Di sisi lain, jika Anda menargetkan aplikasi industri atau kritis, atau ingin mendapat manfaat dari keandalan dan portabilitas yang telah teruji oleh waktu, Anda harus menggunakan perpustakaan yang baik itu.
Versi minimum umumnya menunjukkan versi tertua yang pernah saya uji; Mungkin saja menggunakan versi yang lebih tua. Beri tahu saya keberhasilan!
Informasi lebih lanjut tentang pembangunan dan instalasi tersedia di Install.md.
Jika Anda ingin menggunakan bahasa selain C untuk bekerja dengan NotCurses, banyak pembungkus tersedia. Beberapa termasuk dalam repositori ini, sementara yang lain eksternal.
| Bahasa | Timah | Gudang |
|---|---|---|
| Ada | Jeremy Grosser | Jeremygrosser/NotCursesada |
| C ++ | Marek Habersack, Nick Black | intern |
| Anak panah | Nelson Fernandez | KASCOTE/DART_NOTCURES |
| Julia | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| Nim | Michael S. Bradley, Jr. | Michaelsbradleyjr/nim-notcurses |
| Python | Nick Black | intern |
| Python | IGO95862 | intern |
| Karat | José Luis Cruz | Dankamongmen/Libnotcurses-Sys |
| Zig | Jakub Dundalek | Dundalek/NotCurses-Zig-Example |
Sembilan yang dapat dieksekusi dipasang sebagai bagian dari NotCurses:
ncls : ls yang menampilkan multimedia di terminalncneofetch : ripoff neofetchncplayer : Renders Visual Media (gambar/video)nctetris : klon tetrisnotcurses-demo : Beberapa kode demonstrasinotcurses-info : Deteksi dan Cetak Kemampuan Terminal/Diagnostiknotcurses-input : Decode dan Cetak Keypressesnotcurses-tester : Pengujian Unittfman : browser manual mewah Untuk menjalankan notcurses-demo dari checkout, berikan direktori data melalui argumen -p . Demo yang membutuhkan file data akan dibatalkan. Penundaan dasar yang digunakan dalam notcurses-demo dapat diubah dengan -d , menerima pengganda titik mengambang. Nilai kurang dari 1 akan mempercepat demo, sedangkan nilai yang lebih besar dari 1 akan memperlambatnya.
notcurses-tester juga mensyaratkan bahwa data , diisi dengan file data yang diperlukan, ditentukan dengan -p . Itu dapat dijalankan dengan sendirinya, atau melalui make test .
Dengan -DUSE_PANDOC=on (default), satu set lengkap halaman manusia dan xhtml akan dibangun dari doc/man . Dokumentasi Markdown berikut disertakan secara langsung:
TERM variabel lingkungan dan berbagai emulator terminal.Jika Anda (dapat dimengerti) ingin menghindari tumpukan Pandoc besar, tetapi tetap menikmati halaman manual, saya menerbitkan tarball dengan pria/xhtml yang dihasilkan bersama dengan setiap rilis. Unduh, dan instal isinya sesuai keinginan Anda.
Jika variabel TERM Anda salah, atau definisi terminfo sudah ketinggalan zaman, Anda akan memiliki waktu yang sangat buruk. Gunakan hanya nilai TERM yang sesuai untuk terminal Anda. Jika variabel ini tidak terdefinisi, atau tidak dapat memuat entri terminfo yang ditentukan, ia akan menolak untuk memulai, dan Anda tidak akan pergi ke luar angkasa hari ini.
NotCurses menanyakan terminal saat startup, memungkinkan beberapa fitur canggih berdasarkan terminal yang ditentukan (dan bahkan versi). Namun, kemampuan dasar diambil dari terminfo. Jadi, jika Anda memiliki, katakanlah, Kitty, tetapi TERM=vt100 , Anda akan dapat menggambar grafik bitmap RGBA (meskipun hal -hal seperti itu hanya mimpi untuk VT100), tetapi tidak dapat menggunakan layar alternatif (meskipun didukung oleh setiap versi kucing). Jadi TERM dan database Terminfo terkini tetap penting.
Pastikan variabel lingkungan LANG Anda diatur ke lokasi yang dikodekan UTF8, dan bahwa lokal ini telah dihasilkan. Ini biasanya berarti "[language]_[Countrycode].UTF-8" , yaitu en_US.UTF-8 . Bagian pertama ( en_US ) seharusnya ada sebagai direktori atau symlink di /usr/share/locales . Ini biasanya membutuhkan pengeditan /etc/locale.gen dan menjalankan locale-gen . Pada sistem Debian, ini dapat dilakukan dengan dpkg-reconfigure locales , dan memungkinkan lokal yang diinginkan. Lokal default disimpan di suatu tempat seperti /etc/default/locale .
Jika terminal Anda memiliki opsi tentang interpretasi default dari "karakter lebar ambigu" (ini sebenarnya adalah istilah teknis dari Unicode), pastikan itu diatur ke lebar , tidak sempit (jika itu tidak berhasil, pastikan itu diatur untuk mempersempit , heh).
Jika terminal Anda mendukung warna 3x8bit RGB melalui setaf dan setbf (sebagian besar terminal modern), tetapi mengekspor baik kemampuan RGB maupun Tc Terminfo, Anda tidak dapat mengekspor variabel lingkungan COLORTERM sebagai truecolor atau 24bit . Perhatikan bahwa beberapa terminal menerima spesifikasi 24-bit, tetapi memetakannya menjadi lebih sedikit warna. RGB diaktifkan tanpa syarat setiap kali sebagian besar terminal modern diidentifikasi.
Lebar mesin terbang, dan memang apakah mesin terbang dapat ditampilkan sama sekali, sebagian tergantung pada konfigurasi font. Idealnya, konfigurasi font Anda memiliki mesin terbang untuk setiap Unicode EGC, dan masing -masing lebar mesin terbang cocok dengan hasil wcswidth() POSIX Function untuk EGC. Jika ini bukan masalahnya, Anda mungkin akan menjadi kosong atau � (U+FFFD, karakter penggantian) untuk karakter yang hilang, dan karakter berikutnya pada garis mungkin salah tempat.
Perlu diketahui bahwa beberapa terminal menggambar karakter blok secara langsung, daripada memuatnya dari font. Ini umumnya diinginkan. Kuadran dan sextant bukanlah tempat untuk menunjukkan keahlian desain Anda. Untuk memeriksa rendering karakter gambar Anda, jalankan notcurses-info . Output yang diinginkan seharusnya terlihat seperti ini:
Jika segala sesuatunya rusak atau tampak tidak bersemangat, silakan berkonsultasi dengan bagian Catatan Lingkungan! Anda memerlukan definisi TERM dan LANG yang benar, dan mungkin menginginkan COLORTERM .
NCOPTION_CLI_MODE (alias untuk beberapa bendera nyata; lihat notcurses_init(1) untuk informasi lebih lanjut). Anda masih harus diterjemahkan secara eksplisit.-DUSE_MULTIMEDIA=none .notcurses_core_init() atau ncdirect_core_init() sebagai pengganti notcurses_init() / ncdirect_init() , dan tautan dengan -lnotcurses-core . Aplikasi Anda kemungkinan akan dimulai beberapa milidetik lebih cepat; Lebih penting lagi, itu akan menghubungkan dengan instalasi NOTCURES minimal.notcurses-demo (dan mungkin beberapa program lainnya). Gunakan -DUSE_CXX=off .TERM yang benar, banyak terminal perangkat keras didukung. Secara umum, jika entri database Terminfo menunjukkan keterlambatan wajib, NotCurses saat ini tidak akan mendukung terminal itu dengan benar. Diketahui bahwa NotCurses dapat mengendarai VT320 dan VT340, termasuk grafik Sixel pada yang terakhir.NCBLIT_PIXEL telah diminta. Demikian juga, sextants ( NCBLIT_3x2 ) tidak akan digunakan tanpa dukungan unicode 13, dll. ncvisual_blit() akan menggunakan blitter terbaik yang tersedia, kecuali NCVISUAL_OPTION_NODEGRADE disediakan (dalam hal ini akan gagal).screen .screen tidak mendukung warna RGB (setidaknya pada 4.08.00); Jika Anda memiliki COLORTERM yang ditentukan, Anda akan memiliki waktu yang buruk. Jika Anda memiliki screen yang dikompilasi dengan --enable-colors256 , cobalah mengekspor TERM=screen-256color sebagai lawan dari TERM=screen .mosh .NC_ENTER NCTYPE_RELEASE , dan setiap penekanan kunci biasanya akan menghasilkan setidaknya dua input.NCKEY_RESIZE sampai saya menekan beberapa tombol lainnya.SIGWINCH di beberapa utas, dan utas itu menerima sinyal alih -alih utas yang disebut notcurses_getc_blocking() . Akibatnya, poll() tidak terganggu. Hubungi pthread_sigmask() sebelum memunculkan utas apa pun.NotCurses Destructor dijalankan ketika saya kembali dari main() ?NotCurses Anda tersingkir ke main() ).ncplane_move_yx() , pindahkan di bawah bidang buram dengan ncplane_move_below() , atau pindahkan off-pile dengan ncplane_reparent() .ncplane_box_yx() ? Apakah Anda membenci ortogonalitas, Anda Dullard?ncplane_box() dan teman sudah memiliki terlalu banyak argumen, Anda monster.graphics/qr-code-generator .cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include . Ini disahkan oleh bsd.port.mkLANG Anda kurang ditentukan atau didefinisikan secara tidak benar, atau lokasi yang diperlukan tidak ada pada mesin Anda (mungkin juga Anda secara eksplisit memasok NCOPTION_INHIBIT_SETLOCALE , tetapi tidak pernah disebut setlocale(3) , dalam hal ini tidak melakukannya).ncplane saat menggunakan nccell . Mengapa yang terakhir tidak memegang pointer untuk yang pertama?nccell harus tetap sekecil mungkin, dan Anda hampir selalu memiliki ncplane yang berguna jika Anda memiliki referensi ke nccell yang valid.valgrind /Asan, dan itu menunjukkan kebocoran memori dari libtinfo.so , ada apa dengan itu?notcurses-demo , tetapi nomor meja saya tidak cocok dengan nomor spanduk NotCurses, Anda charlatan.notcurses-demo membuat beberapa frame di luar demo yang sebenarnya.notcurses_stop() / ncdirect_stop() di semua jalur keluar, termasuk sinyal fatal (perhatikan bahwa, secara default, NotCurses menginstal penangan untuk sebagian besar sinyal fatal untuk melakukan hal ini).ncdirect_readline() masih ada, dan sekarang benar -benar berfungsi bahkan tanpa Libreadline, meskipun tentu saja bukan libreadline. Bagaimanapun, Anda mungkin akan lebih baik menggunakan mode CLI dengan ncreader .pkg-config --static --libs notcurses (atau --libs notcurses-core ) untuk menemukannya.mintty dengan -P on argumen, atau ekspor MSYS=enable_pcon sebelum meluncurkannya.COLORTERM=24bit di mana -mana?SendEnv COLORTERM ke .ssh/config , dan AcceptEnv COLORTERM ke sshd_config di server jarak jauh. Ya, ini mungkin akan membutuhkan root di server jarak jauh. Jangan salahkan aku, kawan; Saya tidak melakukannya.ncvisual dari memori RGBA menggunakan ncvisual_from_rgba() .NCSTYLE_REVERSE ?ncchannels_reverse() untuk membalikkan warna depan dan latar belakang dengan benar.ncsubproc .notcurses_refresh() setelah notcurses_init() berhasil kembali.“Seni rupa kami dikembangkan, tipe dan penggunaannya ditetapkan, pada saat -saat sangat berbeda dari masa kini, oleh orang -orang yang kekuatan tindakan atas segala sesuatu tidak penting dibandingkan dengan kami. Tetapi pertumbuhan yang luar biasa dari teknik kami, kemampuan beradaptasi dan ketepatan yang telah mereka capai, ide -ide dan kebiasaan yang mereka ciptakan, menjadikannya kepastian bahwa perubahan mendalam akan terjadi dalam kerajinan kuno yang indah . " —Paul Valéry