13

私は独学で ncurses を学ぼうとしてきましたが、今のところ気に入っています。しかし、私は pico や nano のような小さな小さなテキスト エディターを作成しようとしています。これまでのところ、かなりうまく設定できています。キーをマップする関数を作成しました。私が何をしても、 からの応答が得られませんKEY_ENTER。押すたびに、現在の行の先頭に移動します。raw(); を使用してみました。KEY_ENTER運がない代わりに13を使用します。他のすべてのキーは期待どおりに反応します。アドバイスをいただければ幸いです。私はそれを永遠に機能させようとしてこれを見つめてきました。ありがとう!

#include <stdlib.h>
#include <ncurses.h>

// gcc keymaps.c -lncurses -o keymaps
int main(){
    int ch;

    initscr();
    cbreak();
    noecho();

    keypad(stdscr,TRUE);

    while (ch = getch()) {
      switch(ch){
         case KEY_UP:
              addstr("Up\n");
              break;
          case KEY_LEFT:
              addstr("Left\n");
              break;
          case KEY_RIGHT:
              addstr("Right\n");
              break;
          case KEY_BACKSPACE:
              addstr("Backspace\n");
              break;
          case KEY_ENTER:
              addstr("You pressed Enter\n");
          default:
            printw ("%u\n", ch);
            break;
      }
    }
}
    
4

4 に答える 4

10

ASCII値として10を試してください... ncursesでうまくいきました。また、あなたが入れたこのコードは構文が間違っているため、実際のコードを更新してください。

于 2015-08-09T04:57:03.903 に答える
2

PDCurses のドキュメントから:

#define KEY_ENTER 0x157 /* enter or send (unreliable) */

nonl()の後に電話してみてくださいraw()

nl ルーチンと nonl ルーチンは、基になるディスプレイ デバイスが入力時にリターン キーを改行に変換するかどうか、および出力時に改行をリターンと改行に変換するかどうかを制御します (どちらの場合も、呼び出し addch('\n') は同等の処理を行います)。仮想画面上での改行と改行)。最初は、これらの翻訳が発生します。nonl を使用してそれらを無効にすると、curses は改行機能をより有効に利用できるようになり、カーソルの動きが速くなります。また、curses はリターン キーを検出できるようになります。

于 2012-06-16T23:30:33.267 に答える
1

最近同じ問題が発生したので、ASCII改行である10 または\nKEY_ENTERに置き換えて修正しました。KEY_ENTER

#include <ncurses.h>
int main() {
    initscr();  /* init ncurses */
    keypad(stdscr, TRUE);   /* get keyboard input */
    addstr("Press enter to exit.\n");
    while (10 != getch()) {}    /* 10 == enter */
    endwin();   /* end ncurses */
    return 0;
}
于 2016-07-05T12:39:54.107 に答える