ダイアログボックス(ncurses)の最小用語機能のリストはありますか?
ncursesダイアログライブラリ(どこでも利用可能)を使用しようとしています。ソースミラーはこちら)、ダイアログボックスを使用するか、stdin / out / errがcharブロックデバイス、ttys、およびどのtermcapsに接続されているかによって、stderrとプロンプトで印刷するかどうかをコードで動的に決定します。私は less で正しくレンダリングできるかどうかを検出するのにかなり信頼できるコードを盗み、termcaps ce、cd、cland cm、または を探して、そうhoでなければll愚かなモードに切り替えます。ただし、lessの要件はダイアログボックスより低くなる可能性があります(多く?)(少なくともyesnoボックスのみが必要です)。ダイアログやncursesに大文字を確認せずに端末に問題を処理できるかどうか尋ねる方法がなく、大文字がないとinitscrが失敗することに少し驚きました。 Emacsシェルのダイアログボックス(ansi-termではなく、obvsではうまく機能します)は意味のないテキストだけを吐き出し、愚かな端末(通常のxtermと同じ)なので、ここで進む機能は明らかにありません。alsrexport TERM=dumb 私はほとんどの場合UNIXプログラマーではありません。これを行う信頼できる標準的な方法はありますか?私を変に考えるのは、これが確認しやすいことではないということです。 明らかに、ダイアログを介してコードを書いて、それが呼び出すすべてのncursesエントリを記録しようとするかもしれませんが、それは痛いので、どこかで端末の機能要件の明確なリストを見つけることができないことを願っています。 修正する:だから私は「yesno」ダイアログをどれだけうまく得ることができるかをテストするために独自のカスタムterminfoエントリを作成することにしました。サイズが非常に小さいので、テストの数を減らす方が良いです。これを行う方法を理解するのは難しいです。したがって、THE FUTUREの他の人が簡単に要約した内容は次のとおりです。 以下はtermcap定義です。問題を特定する必要があります。 terminfo定義を使用していくつかの手順をスキップすることができますが、lessなどの古いソフトウェアはtermcapバージョンを使用しているため、そのスペースで作業する方が簡単です。 dialog --title Hi --yesno There 0 0現在ターミナル(またはncurses)で実行されているncursesアプリケーションがあるとし、TERM envvarが何であるかを調べてください。私は画面とemacs ansi-termで作業しているので、もちろんテストscreen中です。eterm-colordumb 作業したいバージョンのダンプを使用します(新しいバージョンが作業バージョンのサブセットになりたいのでテストを実行しています)。infocmp eterm > eterm2.infoこれにより、そのバージョンで使用したい情報が提供されます。 キャップに変えてinfotocap eterm2.info > eterm2.cap 内部を見て、次のように警告なしにほとんど実行されない最小限の制限ファイルであるかのように切り取ります。 # hacked eterm for testing dialog
eterm2|gnu emacs term.el terminal emulation:\
:am:mi:xn:\
:co#80:li#24:\
:ce=\E[K:cd=\E[J:cl=\E[H\E[J:\
:ho=\E[H:\
:cm=\E[%i%d;%dH:\
:al=\E[L:
最初は名前もeterm2に変更しました。 再び情報に変換captoinfo eterm2.cap > eterm2.info mkdir infodbこのテスト情報がコンパイルされるローカルディレクトリを作成します。 export TERMINFO=$(pwd)/infodbtermcap / terminfoで見つけることができる場所を教えてください。 tic -Dローカルディレクトリを最初に出力する必要があります。 tic -s eterm2.infoこのディレクトリにコンパイルしてください export TERM=eterm2新しいハッカー端末の設定 ncurses アプリケーションを実行します。それ以外の場合は、dialog --title Hi --yesno There 0 0単に白黒で表示する必要があります。 他のコマンドを再度追加して変更を確認できますが、完了したらすべてがrm -rf infodb正しく実行されていることを確認してくださいexport TERMINFO=。export TERM=