私はこれをCコードで使用しています:
system("stty -echo -icanon");
これは宿題の一部ですが、この特定の部分は、課題の要件を超えて私が取り組んでいるものです。
シェルを実装していて、最初にたくさんのコードが与えられています。コードはncurses(できれば使用します)を使用せず、それを変更するには、提供されたコードの多くを書き直す必要があります。
HOMEまたはキーを押すENDと、大文字のO(Openの場合はo)が表示され、次にHOMEandENDキーが表示されます。私はgetchar()
キャラクターを取得するために使用しています。
これを行うのはこれらの2つのキーだけのようですが、よくわかりません。提供されたシステム関数呼び出しだけが異なる場合、私は100%ではありません(stdout
非ブロッキングにも設定していますが、それは問題ではありません)。
本当に混乱していて、ENDキーとHOMEキーをよく使うので実装したいと思います。
あまり情報がないのでごめんなさい。system
-echoと-icanonがsttyにどのような影響を与えるかを実際に理解するには、十分な知識がありません。マニュアルページを見ましたが、それでもわかりません。
編集
アレックスブラウンの答えから、私はエスケープ文字を取得していることを確認しました。私は次のようなものを持っています(悪い擬似コードで):
while (TRUE)
ch = getchar()
switch (ch)
case HOME:
case END:
don't print anything...
break
default:
printf(ch);
break
したがって、エスケープシーケンスからOを出力しますが、[(0x48
forHOMEと0x46
for END)は出力しません。まだ本当のキーコードを取得する方法に困惑しています...