それが何であるか:鮮やかな色、マルチメディア、スレッド、ユニコードを可能な限り最大の程度までサポートする、最新の端子エミュレーターの複雑なTUIを促進するライブラリ。物事は、単にNCURSESではできないNotCursesで行うことができます。さらに、たわごとのように速いです。そうでないこと:ソース互換X/Open Curseの実装、または既存のシステム上のNCURSEの代替品。
詳細については、DankwikiとThe Man Pagesを参照してください。さらに、ドキシゲン出力があります。メーリングリストを購読するには、[email protected]にメールを送信します(電子メールの内容は重要ではありません)。コヒーレントガイドブックを書きました。これは、無料でダウンロード(またはペーパーバック購入)に利用できます。
私はまだ多くの文書化された例を追加していませんが、SRC/ POC/およびSRC/ POCPP/はそれぞれ多くの小さなCおよびC ++プログラムを含んでいます。 notcurses-demo notcursesの機能のほとんどをカバーしています。
DockerでNotCursesアプリケーションを実行している場合は、以下の「環境メモ」を参照してください。



NotCursesは、単一のUNIX仕様の一部としてバンドルされたX/Open Curses APIを放棄します。必要な背景については、Thomas E. Dickeyの優れた権威あるNCURSES FAQに相談してください。そのため、NotCursesはドロップインの呪いではありません。
可能な限り、NotCursesはNCURSESで出荷されたTerminfoライブラリを利用し、その携帯性と徹底から大きな恩恵を受けます。
Notcursesは、たとえば、いくつかの産業ターミナルや小売ターミナルなどを犠牲にして、ワークステーション、電話、ラップトップ、タブレットでインタラクティブなユーザーの高度な機能を開きます。基本的に、呪いは最小値を想定し、(努力を払って)ステップアップすることを可能にしますが、notcursesは最大値を想定し、必要に応じて(それ自体で)踏みます。後者のアプローチはおそらくいくつかの古いハードウェアで壊れますが、以前のアプローチは古いハードウェアのように見える新しいソフトウェアをもたらします。
なぜこの標準以外のライブラリを使用するのですか?
スレッドの安全性と並行プログラムでの効率的な使用は、最初から設計上の考慮事項でした。
x/open:エクスポートされた識別子によって成文化された表面よりも秩序ある表面は、一般的な名前空間の衝突を避けるためにプレフィックスされます。妥当なstatic inlineヘッダーのみのコードが使用されている場合。これにより、コンパイラの最適化が容易になり、ローダー時間が短縮されます。 NotCursesは、マルチメディア機能なしで構築でき、依存関係の大幅なセットが必要です。
すべてのAPIは、ユニバーサル文字セット(Unicode)をネイティブにサポートしています。 nccell APIは、Unicodeの拡張グラフメムクラスターの概念に基づいています。
画像、フォント、ビデオ、高コントラストテキスト、スプライト、透明な領域などの視覚的な機能。すべてのAPIは、端末に必要に応じて量子化された24ビット色をネイティブにサポートします。
Sixel、Kitty、さらにはLinux Framebufferコンソールを使用した、ビットマップグラフィックスのポータブルサポート。
明確なキーボードプロトコルのサポート。
「TUIモード」は、高性能、非スクロール、フルスクリーンアプリケーションを容易にします。 「CLIモード」は、シェルユーティリティのスクロール出力をサポートしますが、NotCursesの全力を備えています。
NCURSESライセンスであるいくつかの行為のドラマとは対照的に、それはApache2ライセンスです(後者は「MIT-X11の修正」として要約されています)。
上記の多くはncursesで持つことができますが、それらはncursesが設計されたものではありません。一方、産業用または重要なアプリケーションをターゲットにしている場合、または時間テストされた信頼性と携帯性から利益を得たい場合は、必ずその素晴らしいライブラリを使用する必要があります。
最小バージョンは通常、私がテストした最も古いバージョンを示しています。まだ古いバージョンを使用することが可能かもしれません。成功を教えてください!
建物とインストールの詳細については、install.mdで入手できます。
C以外の言語を使用してNotCursesを使用したい場合は、多数のラッパーが利用可能です。このリポジトリにはいくつかが含まれていますが、他のものは外部です。
| 言語 | リード | リポジトリ |
|---|---|---|
| エイダ | ジェレミー・グロッサー | Jeremygrosser/notcursesada |
| C ++ | マレク・ハーバーサック、ニック・ブラック | 内部 |
| ダート | ネルソンフェルナンデス | kascote/dart_notcurses |
| ジュリア | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| nim | マイケル・S・ブラッドリー・ジュニア | Michaelsbradleyjr/nim-notcurses |
| Python | ニック・ブラック | 内部 |
| Python | IGO95862 | 内部 |
| さび | ホセ・ルイス・クルス | ダンカモンマン/libnotcurses-sys |
| ジグ | Jakub Dundalek | dundalek/notcurses-zig-example |
NotCursesの一部として9つの実行可能ファイルがインストールされます。
ncls :ターミナルにマルチメディアを表示するlsncneofetch :neofetch Ripoffncplayer :Visual Media(画像/ビデオ)をレンダリングnctetris :テトリスクローンnotcurses-demo :いくつかのデモコードnotcurses-info :端末機能/診断を検出および印刷しますnotcurses-input :キープレスをデコードして印刷しますnotcurses-tester :単位テストtfman :スワンクマニュアルブラウザチェックアウトからnotcurses-demoを実行するには、 -p引数を介してdataディレクトリを提供します。データファイルを必要とするデモは、それ以外の場合は中止されます。 notcurses-demoで使用されるベース遅延は、 -dで変更でき、浮動小数点乗数を受け入れることができます。 1未満の値はデモをスピードアップしますが、1を超える値は減速します。
同様に、 notcurses-testerでは、必要なデータファイルが入力されたdataが-pで指定されることを必要とします。単独で実行するか、 make testことで実行できます。
-DUSE_PANDOC=on (default)を使用すると、Manページの完全なセットとxhtmlがdoc/manから構築されます。次のマークダウンドキュメントが直接含まれています。
TERM環境変数およびさまざまな端子エミュレーター。あなたが(当然のことながら)大きなPandocスタックを避けたいが、それでもマニュアルページを楽しんでいる場合は、各リリースとともにGoned Man/XHTMLを備えたターボールを公開します。それをダウンロードし、フィット感のあるコンテンツをインストールします。
TERM変数が間違っている場合、またはそのterminfoの定義が時代遅れである場合、非常に悪い時間を過ごすことになります。端末に適したTERMのみを使用します。この変数が定義されていない場合、またはnotcursesが指定されたTerminfoエントリをロードできない場合、開始を拒否し、今日スペースには行きません。
NotCursesは、起動時に端末を照会し、決定された端末(および均一なバージョン)に基づいていくつかの高度な機能を有効にします。ただし、基本的な機能はTerminfoから取得されます。したがって、たとえば、キティを持っているが、 TERM=vt100持っている場合、RGBAビットマップグラフィックスを描画できるようになります(そのようなことはVT100の夢に過ぎません)が、代替画面を使用できません(すべてのキティバージョンでサポートされていますが)。したがって、 TERMと最新のTerminfoデータベースが依然として重要です。
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からの技術用語です)、狭いものではなく広く設定されていることを確認します(うまくいかない場合は、狭くなるように設定されていることを確認してください)。
端末がsetafおよびsetbf (ほとんどの最新の端末)を介して3x8bit RGBカラーをサポートしているが、 RGBやTc端子機能もエクスポートしていない場合、 COLORTERM環境変数をtruecolorまたは24bitとしてエクスポートできます。一部の端子は24ビットの仕様を受け入れますが、それをより少ない色にマッピングすることに注意してください。 RGBは、ほとんどの最新の端子が特定されるたびに無条件に有効になります。
グリフの幅、そして実際、グリフをまったく表示できるかどうかは、一部はフォント構成に依存しています。理想的には、フォント構成にはすべてのユニコードEGCにグリフがあり、各グリフの幅はEGCのPOSIX関数のwcswidth()の結果と一致します。そうでない場合は、不足している文字の空白または(u+fffd、交換用の文字)が得られる可能性があり、ライン上の後続の文字が置き忘れられる可能性があります。
いくつかの端子がフォントからロードするのではなく、ブロック文字を直接描画することを知る価値があります。これは一般的に望ましいです。象限と六重量は、デザインの妙技を示す場所ではありません。環境の描画文字のレンダリングを検査するには、 notcurses-infoを実行します。目的の出力は次のようになります:
物事が壊れたり、そうでなければ不活発に見える場合は、環境ノートセクションを参照してください!正しいTERMとLANG定義が必要であり、 COLORTERM必要な場合があります。
NCOPTION_CLI_MODEフラグを使用します(いくつかの実際のフラグのエイリアス。詳細については、 notcurses_init(1)を参照してください)。それでも明示的にレンダリングする必要があります。-DUSE_MULTIMEDIA=noneでビルドします。notcurses_init() notcurses_core_init() ncdirect_core_init() ncdirect_init() )を使用し、 -lnotcurses-coreとのリンクを使用します。アプリケーションは、数ミリ秒をより速く開始する可能性があります。さらに重要なことは、最小限のNotCursesインストールに対してリンクすることです。notcurses-demo (および他のいくつかのプログラム)を構築できます。 -DUSE_CXX=off使用します。TERM値では、多くのハードウェア端子がサポートされています。一般に、Terminfoデータベースエントリが必須の遅延を示している場合、NotCursesは現在その端末を適切にサポートしていません。 NotCursesは、後者のSixelグラフィックを含むVT320およびVT340を駆動できることが知られています。NCBLIT_PIXELが要求されていても、端末がそれらのサポートを積極的に示していない限り、notcursesはビットマッププロトコルを使用しません。同様に、sextants( NCBLIT_3x2 )は、unicode 13のサポートなどなしでは使用されませんncvisual_blit() 、 NCVISUAL_OPTION_NODEGRADEが提供されない限り、利用可能な最高のブリッターを使用します(この場合は失敗します)。screenの絶対的ながらくたのように見えます。screen RGBの色をサポートしていません(少なくとも4.08.00)。 COLORTERMが定義されている場合、悪い時間があります。 --enable-colors256でコンパイルされたscreenがある場合は、ターム= TERM=screenではなく、 TERM=screen-256colorをエクスポートしてみてください。moshの絶対的ながらくたのように見えます。NC_ENTER NCTYPE_RELEASEイベントをすぐに取得することを意味し、各キープレスは通常、少なくとも2つの入力をもたらします。NCKEY_RESIZEが表示されません。SIGWINCHをマスクすることにほとんど確実に失敗しました。そのスレッドは、 notcurses_getc_blocking()と呼ばれるスレッドの代わりに信号を受信しています。その結果、 poll()は中断されません。スレッドを産む前にpthread_sigmask()に電話してください。main()から戻るときにNotCurses Destructorが実行されるようにするにはどうすればよいですか?NotCursesがmain()にscopedされていると仮定します)。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可能な限り小さくし続ける必要があり、とにかく有効なnccellへの参照がある場合、ほとんどの場合ncplane手元に置いています。valgrind /Asanの下でNotCursesプログラムを実行しましたが、それはlibtinfo.soからメモリリークを示しています、それはどうしたのですか?notcurses-demoを走りましたが、私のテーブル番号はnotcursesバナー番号と一致しません、あなたはcharlatanです。notcurses-demo実際のデモを超えていくつかのフレームをレンダリングします。notcurses_stop() / ncdirect_stop()を呼び出すことを確認してください(デフォルトでは、ほとんどの致命的な信号にハンドラーをインストールして、まさにこれを行うことに注意してください)。ncdirect_readline()は依然として存在しますが、現在はlibreadlineがなくても実際に機能しますが、もちろんLibreadlineではありません。いずれにせよ、おそらくncreaderでCLIモードを使用する方が良いでしょう。pkg-config --static --libs notcurses (または--libs notcurses-core )を使用してそれらを発見します。-P onを使用してminttyを起動するか、起動する前にMSYS=enable_pconをエクスポートします。COLORTERM=24bit手動でエクスポートすることを避けることはできますか?SendEnv COLORTERMを.ssh/configに追加し、Remote Serverのsshd_configにAcceptEnv COLORTERMを追加します。はい、これにはおそらくリモートサーバーのルートが必要です。私を責めないでください、男。私はそれをしませんでした。ncvisual_from_rgba()を使用してRGBAメモリからncvisualをロードできます。NCSTYLE_REVERSEがないのはなぜですか?ncchannels_reverse()を使用して、前後の色を正しく反転させることができます。ncsubprocウィジェットを使用して、サブプロセスを平面にストリーミングできます。notcurses_refresh() notcurses_init() )を呼び出します。「私たちの美術は開発され、その種類と用途は、現在とは非常に異なる時代に、物事に対する行動の力が私たちと比較して取るに足らない男性によって確立されました。しかし、私たちのテクニックの驚くべき成長、彼らが達成した適応性と精度、彼らが作成しているアイデアと習慣は、美しい変化が美しい人の古代の工芸に差し迫っていることを確実にします。」 - ポール・ヴァレリー