Linux でのキーボード スキャンコードの動作を理解するのにしばらく苦労してきました。
通常の bash シェルを開くと、矢印キーは期待どおりに機能しUPます。履歴などの前の項目が表示されます。ただし、プロセスを生成すると、矢印は期待どおりに機能しなくなります。たとえば、前のコマンドの代わりに^[[AUPを出力します。
これを実証するには、次のようにします。
bash $ ping www.google.com
ここで、UPまたはDOWNなどを押すと、プロセスの実行中に間違ってマッピングされたキー コードが表示されます。ただし、プロセスを終了すると、矢印キーは再び機能します。
CentOs、Ubuntu、Mac、さらにはさまざまなシェル (bash、sh、zsh) でもテストしましたが、どこでも同じことが起こります。また、RAW モードと XLATE モードでテストしたkbd_modeを使用して、さまざまなキーボード モードを試しました。
答えを探しているときに私が目にした最も近いものは、IPython が readline に対してビルドされていないときに IPython ユーザーが同じ動作を経験したことです。しかし、私が見る限り、これは私たちのケースとは関係ありません。
cin と cout を使用して通信し、ユーザーからの入力を取得する C++ Tcl ベースのコンソール アプリケーションを開発しています。以前に入力したコマンドの履歴にアクセスしようとすると、矢印キーに問題が発生します。これは私たちにとって大きな問題です。99% の人々が矢印文字が機能することを期待しているためです。
これをどのように克服できるかについてのアイデアは大歓迎です。