它是:一個庫,促進現代終端模擬器上的複合物TUIS,以最大程度地支持生動的色彩,多媒體,線和Unicode。可以用Ncurses無法完成的NotCurs來完成事情。此外,這是狗屎的速度。不是:與源兼容的X/Open Curss實現,也不是對現有系統上的Ncurses的替換。
有關更多信息,請參見Dankwiki和The Man Pages。另外,還有doxygen輸出。要訂閱郵件列表,請發送電子郵件至[email protected](電子郵件內容無關緊要)。我寫了一本連貫的指南,可以免費下載(或平裝購買)。
我還沒有添加許多記錄的示例,但是SRC/ POC/和SRC/ POCPP/分別包含許多小型C和C ++程序。 notcurses-demo涵蓋了NotCurses的大多數功能。
如果您在Docker中運行NotCurs,請諮詢下面的“環境筆記”。



NotCurses放棄了X/OPEN的curss API捆綁為單個Unix規範的一部分。有關某些必要的背景,請諮詢Thomas E. Dickey的出色和權威的Ncurses常見問題。因此,NotCurses並不是臨時詛咒的替代品。
盡可能地,NotCurses利用了帶有Ncurses的終端庫,從其可移植性和徹底性中受益匪淺。
NotCurses在工作站,電話,筆記本電腦和平板電腦上為交互式用戶打開了高級功能,可能是以工業和零售終端為代價的。從根本上講,詛咒假設最低限度,並允許您(努力)加強,而NotCurses則在必要時(本身)假設最大和逐步下降。後一種方法可能會破壞一些較舊的硬件,但前者的方法使新軟件看起來像舊硬件。
為什麼要使用這個非標準庫?
從一開始,線程安全性且在並行程序中有效使用。
比X/Open編碼的更有序的表面:將導出的標識符置於前綴,以避免常用名稱空間碰撞。在合理的情況下,使用static inline標準代碼。這有助於編譯器的優化,並減少加載時間。可以在沒有其多媒體功能的情況下構建NotCurses,這需要明顯較小的依賴項。
所有API本地支持通用字符集(UNICODE)。 nccell API基於Unicode的擴展石墨群概念。
視覺功能,包括圖像,字體,視頻,高對比度文本,精靈和透明區域。所有API本地支持的24位顏色,根據端子的必要性進行量化。
使用Sixel,Kitty甚至Linux Framebuffer控制台對位圖圖形的便攜式支持。
支持明確的鍵盤協議。
“ TUI模式”有助於高性能,非滾動,全屏應用。 “ CLI模式”支持Shell實用程序的滾動輸出,但具有NotCurses的全部功能。
它的全部許可是APACHE2的全部許可,而不是在幾個ACT中的戲劇(即Ncurses許可證)(後者總結為“ MIT-X11的重述”)。
以上大部分可以使用Ncurses,但它們不是Ncurses設計的目的。另一方面,如果您是針對工業或關鍵應用程序,或者希望從經過時間考驗的可靠性和可移植性中受益,則應一定要使用該精美的庫。
最低版本通常表示我測試過的最古老的版本;很可能可以使用較舊的版本。讓我知道任何成功!
有關構建和安裝的更多信息,請提供install.md中的信息。
如果您希望使用C與NotCurses一起使用以外的其他語言,則可以使用許多包裝紙。該存儲庫中包括一些,而其他則包括外部。
| 語言 | 鉛 | 存儲庫 |
|---|---|---|
| 艾達 | 傑里米·格羅斯(Jeremy Grosser) | JeremyGrosser/NotCursesada |
| C ++ | Marek Habersack,尼克·布萊克 | 內部的 |
| 鏢 | 納爾遜·費爾南德斯(Nelson Fernandez) | kascote/dart_notcurses |
| 朱莉婭 | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| 尼姆 | 小邁克爾·布拉德利(Michael S. Bradley) | Michaelsbradleyjr/Nim-Notcurses |
| Python | 尼克·布萊克 | 內部的 |
| Python | IGO95862 | 內部的 |
| 銹 | 何塞·路易斯·克魯茲(JoséLuisCruz) | dankamongmen/libnotcurses-sys |
| ZIG | Jakub Dundalek | Dundalek/notcurses-Zig-example |
將九個可執行文件安裝為NotCurses的一部分:
ncls :在終端中顯示多媒體的lsncneofetch :neofetch Ripoffncplayer :渲染視覺媒體(圖像/視頻)nctetris :俄羅斯俄羅斯克隆notcurses-demo :一些演示代碼notcurses-info :檢測和打印終端功能/診斷notcurses-input :解碼和打印關鍵notcurses-tester :單位測試tfman :彎曲的手動瀏覽器要從結帳中運行notcurses-demo ,請通過-p參數提供data目錄。需要數據文件的演示將中止。可以使用-d更改notcurses-demo中使用的基本延遲,接受浮點乘數。小於1的值將加快演示,而大於1的值將減慢其速度。
同樣notcurses-tester要求使用-p指定帶有必要數據文件的data 。它可以單獨運行,也可以通過make test 。
使用-DUSE_PANDOC=on (默認),將通過doc/man構建完整的人頁和XHTML。以下降價文檔直接包括:
TERM環境變量和各種終端模擬器。如果您(可以理解的是)想避免使用大型pandoc堆棧,但仍然喜歡手動頁面,我將發布帶有生成的男人/xhtml的tarball以及每個發行版。下載它,並按照您認為合適的方式安裝內容。
如果您的TERM變量是錯誤的,或者該終端定義是過時的,那麼您的時間將非常糟糕。僅使用適合終端的TERM值。如果此變量未定義,或者NotCurses無法加載指定的終點站條目,則它將拒絕啟動,並且您今天不會去太空。
NotCurses在啟動時查詢終端,從而基於確定的終端(甚至版本)啟用一些高級功能。但是,基本功能取自Terminfo。因此,如果您有小貓,但是TERM=vt100 ,您將能夠繪製RGBA位圖圖形(儘管這些東西對VT100來說只是一個夢想),但無法使用替代屏幕(儘管每個小貓版本都支持它)。因此, TERM和最新的終端數據庫仍然很重要。
確保將LANG環境變量設置為UTF8編碼的語言環境,並生成該語言環境。這通常意味著"[language]_[Countrycode].UTF-8" ,即en_US.UTF-8 。第一部分( en_US )應該作為/usr/share/locales中的目錄或符號鏈接存在。這通常需要編輯/etc/locale.gen和運行的locale-gen 。在Debian Systems上,可以通過dpkg-reconfigure locales來實現,並啟用所需的語言環境。默認的語言環境存儲在/etc/default/locale之類的地方。
如果您的終端可以選擇“模棱兩可的字符”(實際上是Unicode的技術術語)的默認解釋,請確保將其設置為寬而不是狹窄(如果不起作用,請確保將其設置為狹窄,heh)。
如果您的終端通過setaf和setbf (大多數現代終端)支持3x8bit RGB顏色,但是既不導出RGB和Tc終端功能,則可以將COLORTERM Environment變量導出為truecolor或24bit 。請注意,有些終端接受24位規範,但將其映射到更少的顏色。每當確定大多數現代終端時,RGB都是無條件啟用的。
字形寬度,以及是否完全可以顯示字形,部分取決於字體配置。理想情況下,您的字體配置具有每個Unicode EGC的字形,並且每個字形的寬度與POSIX函數的wcswidth()結果匹配EGC。如果不是這種情況,您可能會因缺少字符而獲得空白或�(U+FFFD,替換字符),並且行上的後續字符可能會放錯位置。
值得知道幾個終端直接繪製塊字符,而不是從字體上加載它們。這通常是可取的。象限和六分子並不是展示您的設計品格的地方。要檢查您的環境對繪圖字符的渲染,請運行notcurses-info 。所需的輸出看起來應該像這樣:
如果事情破裂或看起來不足,請諮詢環境筆記部分!您需要正確的TERM和LANG定義,並且可能需要COLORTERM 。
NCOPTION_CLI_MODE標誌(幾個真實標誌的別名;有關更多信息,請參見notcurses_init(1) 。您仍然必須明確渲染。-DUSE_MULTIMEDIA=none 。notcurses_core_init()或ncdirect_core_init()代替notcurses_init() / ncdirect_init() ,並與-lnotcurses-core鏈接。您的應用程序可能會更快地啟動幾毫秒;更重要的是,它將針對最小的NotCurses安裝鏈接。notcurses-demo (也許還有其他一些程序)。使用-DUSE_CXX=off 。TERM值,支持許多硬件終端。通常,如果Terminfo數據庫條目表示強制性延遲,則NotCurses當前不會正確支持該終端。眾所周知,NotCurses可以驅動VT320和VT340,包括後者的六元圖。NCBLIT_PIXEL 。同樣,如果沒有Unicode 13支持等,則六月( NCBLIT_3x2 )將不會使用。NCVISUAL_BLIT ncvisual_blit()將使用可用的最佳空白,除非提供NCVISUAL_OPTION_NODEGRADE (在這種情況下會失敗)。screen上的廢話。screen不支持RGB顏色(至少截至4.08.00);如果您定義了COLORTERM ,那麼您會有糟糕的時光。如果您的screen與--enable-colors256編輯,請嘗試導出TERM=screen-256color而不是TERM=screen 。mosh中看起來像是絕對的廢話。NC_ENTER NCTYPE_RELEASE事件,並且每個按鍵通常將至少導致至少兩個輸入。NCKEY_RESIZE 。SIGWINCH ,並且該線程正在接收信號,而不是稱為notcurses_getc_blocking()的線程。結果, poll()不會中斷。在產生任何線程之前,請致電pthread_sigmask() 。main()返回時,如何確保運行NotCurses destructor?NotCurses示意為main() )。ncplane_move_yx()將其移開屏幕,將其移動到帶有ncplane_move_below()的不透明平面下方,或使用ncplane_reparent()將其移動。ncplane_box_yx() ?你討厭正交,你呆板嗎?ncplane_box()和朋友已經有太多論點,你是怪物。graphics/qr-code-generator ,但我並沒有在BSD上找到QRCodegen。cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include 。這是由bsd.port.mk通過的。LANG環境變量未定義或錯誤地定義,或者您的機器上不存在必要的位置(您也可能明確提供NCOPTION_INHIBIT_SETLOCALE ,但從未稱為setlocale(3) ,在這種情況下不這樣做)。nccell時,我幾乎總是需要ncplane 。後者為什麼不為前者提供指針?nccell還需要保持盡可能小,如果您無論如何都需要提及有效的ncplane nccell則幾乎總是便利的。valgrind /asan下運行了我的NotCurses程序,它顯示了libtinfo.so的內存洩漏。因此,這是怎麼回事?notcurses-demo ,但是我的表號碼與charlatan的notcurs橫幅號碼不符。notcurses-demo呈現出實際演示以外的幾個框架。notcurses_stop() / ncdirect_stop() (默認情況下,默認情況下,notCurses安裝處理程序以使大多數致命信號完全執行此操作)。ncdirect_readline()仍然存在,現在即使沒有庫,現在實際上也可以工作,儘管它當然不是庫。無論如何,使用ncreader使用CLI模式可能會更好。pkg-config --static --libs notcurses (或--libs notcurses-core )來發現它們。-P on啟動mintty在參數上,或在啟動它之前導出MSYS=enable_pcon 。COLORTERM=24bit嗎?SendEnv COLORTERM添加到.ssh/config ,然後在遠程服務器上的sshd_config AcceptEnv COLORTERM 。是的,這可能需要在遠程服務器上root。不要怪我,伙計;我沒有這樣做。ncvisual_from_rgba()從RGBA內存中加載ncvisual 。NCSTYLE_REVERSE ?ncchannels_reverse()正確地倒轉前後顏色。ncsubproc小部件的平面上。notcurses_refresh() notcurses_init() 。“我們的美術是開發的,它們的類型和用途在與當前的時機大不相同的人中,他們的行動力量與我們的行動力量無關緊要。但是,我們的技術的驚人成長,他們所獲得的適應性和精度,他們創造的思想和習慣,可以肯定的是,深刻的變化在美麗的古老工藝中即將來臨。” - PaulValéry