実行時に独自のコマンド プロンプトを表示するコンソール アプリケーションを作成しました。残念ながら、コマンド履歴のためにアップ/ダウンを解釈する必要があるため、単純に std::cin を呼び出して入力を待つことはできませんでした。
代わりに、エコーをオフにしてコンソールを非標準モードにし、「読み取り」コマンドを使用して各文字を1つずつ取得し、印刷可能な文字の場合はエコーバックし、開始文字の場合は解析/解釈を試みる必要がありましたエスケープコードの。
私が遭遇する問題は、一般化された/一般的な方法でさまざまなエスケープされたコードを読み取って解析するのが難しいことです。サイズ/位置クエリへの応答を読み取ったり解析したりする必要がある場合、さらに問題が発生します。
端末から読み取るためのより良い方法はありますか? 特別な端末コードを読み取り/解析できる特別な機能はありますか? ncurses は実行可能なオプションではありません (画面をクリアし、filter() を使用するだけでもやり過ぎのようです)、他のアプリケーションはこれらの依存関係を取り込む必要なく、常にこれを行います...何が間違っていますか?
これは、非常に制限された(そしてより高度なコードでは壊れている)読み取りを行う私の現在の「getch」関数の抜粋です。
int getch_ex()
{
int buf = 0;
size_t count = read(0, &buf, 1);
if ((count > 0) && (buf == ESCAPE_CODE))
{
size_t count = read(0, &buf, 1); // [
if ((count > 0) && (buf == '['))
{
count = read(0, &buf, 2);
}
}
return (buf);
}
プロンプト (grub、python など) を持つ他の端末アプリケーションはどのようにこれを達成しますか?
私の主なターゲットは Linux と OS X です。