2017-12-02 16 views
0

ncursesにテキストエディターを作成しています。プログラムはrawモードで初期化されます。印刷不可能な文字を回避するためにncursesでターミナルですでに印刷されている文字を削除する

void console(ch) 
{ 
    if(ch == 8) //8 = backspace according to asciitables.com 
    { 
     printw("\b"); 
     printw(" "); 
    } 
    else 
    { 
     addch(ch); 
    } 
} 

:だから私は

削除についてなど、非印字可能な文字を印刷回避、手動で削除のような多くのことを行う必要があり

void console(ch) 
    { 
     bool safe = TRUE; 
     int avoid[] = { 1,2,3,4,5,6,7,8}; 
     for(int i=0;i<4;i++) 
    { 
     while(ch==avoid[i]) 
     { 
      safe = false; 
     } 
    } 
    if(safe) 
    { 
     printw("%c",ch); //Prints the key's characters on the screen. 
    } 
    else 
    { 
     break; 
    } 
} 

削除では、端末で以前に印刷された文字を削除し、空白スペースを挿入して、カーソルを前の文字の場所に戻したいと思っていました。しかし、それは動作しません。

印刷できない文字を避けるには、印刷できない文字を避け、印刷可能な文字だけを印刷したいと考えました。しかし、それはうまくいかないようです。

私が間違っている箇所を誰かが指摘してくれたら非常に役に立ちます。もし誰かがncursesライブラリにこれに関する特定の機能があるかどうか教えてもらえると便利です。私はncursesにはかなり新しいです。

+0

"stdout"ではなく、端末に印刷しています。特にcursesベースのプログラムを作成している場合は、stdoutを端末とコンバートしないでください。 –

+0

それを変更しました。しかし、どこが間違っているのか教えてください。 –

+0

どのように正確に動作しませんか? 'printw(" \ b ")'がうまくいけば、 'printw(" \ b \ b ");'をスペースで上書きし、カーソルを1つだけバックアップしたままにしておきます。 –

答えて

0

「印刷不可」の文字を検出する最も簡単な方法は、unctrlの結果を調べることです。文字が印刷可能な場合、結果は1文字です。それ以外の場合は、2つ以上の文字:

char *check = unctrl(ch); 
int safe = (check != 0 && strlen(check) == 1); 

(詳細はmanual page)ところで

addchは、印刷文字にprintwよりも適切である(しかし、そのパラメータがintに収まるchtype、ないcharであることに注意してください)。繰り返しになりますが、マニュアルページはプログラムを準備するのに役立ちます。

+0

ありがとうございます。それが本当に私を助けました。ありがとう。 –

関連する問題