私は米国労働省に勤務しています。私は、失業保険が今後数年間にどのように機能するのかを予測するのに役立つ州のためのスクリーンを開発しています。バックスペースをcurses画面で使用するには
これらの画面でバックスペースキーを使用する際に問題が発生しましたが、いくつかの制限があります。ユーザーは の数値をフィールドに入力するので、入力した内容をユーザーに表示する必要があります。これにはecho()を使用する必要があり、noecho()は使用できません。
もう1つの問題は、ユーザーが国のすべての州にまたがっていて、異なる端末を持つことで、端末のterminfoが異なることです。
11月2日、私は次のコードを取得できました。翌朝Google Chromeを更新するために午前中に要求されたときに、翌日の作業が停止しました。その更新によって明らかに私のterminfoが変更されました。私は今取得
WINDOW *win;
main()
{
int key,i,x,y,newStrlen,accumFlag;
char newString[8];
initscr();
cbreak();
nonl();
win=newwin(0,0,0,0);
keypad(win, TRUE);
echo();
key=wgetch(win);
if (key == 127) /* check for the backspace key */
{
if (i > 0)
{
mvwprintw(win,y,x," ");
wmove(win,y,x-1);
newStrlen = strlen(newString);
newString[newStrlen-1] = '\0';
i -= 1;
accumFlag -= 1;
x = x - 1;
wrefresh(win);
}
}
}
「^?」:このコードは、モジュール内のコードの300+ラインの一部であることを
注、私は仕事にバックスペースキーを得るために重要なコードが含まれて私がバックスペースキーを押したとき。
if (key == KEY_BACKSPACE)
if ((key == 127) || (key == 8) || (key == '\b'))
if ((key == '^?') || (key == '^H') || (key == '\b'))
など、さまざまなif testsを試してみましたが、何も問題はありません。私はこの2つの特別な条件がこの問題を複雑にしていることを認識していますが、
もちろん、 'noecho()'を使うことができます。文字を手動で出力するだけです。これは実際には、画面上のきめの細かい制御が必要な多くの場合(つまり、フィールドサイズの制限、_backspace handling_など)、どのように行われているのですか? – Ctx