4

getch() を使用してプログラムからエスケープするために ESC を使用しようとしています。私の問題を示すために小さなプログラムを作成しました。

#include <ncurses.h>

int main(void) {

    int key = 0;

    initscr();
    noecho();
    keypad(stdscr, TRUE);

    do {

        key = getch();
        clear();
        mvprintw(0, 0, "Key = %d\n", key);
        refresh();

    } while (key != 27); 

    clear();
    refresh();
    endwin();
    return 0;

}

ユーザーが矢印キーまたはキーパッド (どちらか便利な方) を使用できるようにしようとしています。

問題はキーパッドにあります (numlock がオンになっているかどうかに関係なく)。プログラムをコンパイルして実行し、この簡単なテストでテンキーを使用しようとすると、テンキーに触れるとすぐに終了します。while (key != 27) (esc being 27) 条件を削除すると、キーが読み取られ、その番号が表示されます。テンキーキーが登録されたときにループを終了するのはなぜですか

ENTER   343
UP      120
DOWN    114
LEFT    116
RIGHT   118

どんな助けでも大歓迎です!

4

2 に答える 2

5

Dungeon Crawl Stone Soup のソースに修正が見つかりました。基本的にそれらのキーコードを設定します。

{DCSS-dir}/source/libunix.cc (333)

define_key("\033Op", 1000);
define_key("\033Oq", 1001);
define_key("\033Or", 1002);
define_key("\033Os", 1003);
define_key("\033Ot", 1004);
define_key("\033Ou", 1005);
define_key("\033Ov", 1006);
define_key("\033Ow", 1007);
define_key("\033Ox", 1008);
define_key("\033Oy", 1009);

// non-arrow keypad keys (for macros)
define_key("\033OM", 1010); // Enter
define_key("\033OP", 1011); // NumLock
define_key("\033OQ", 1012); // /
define_key("\033OR", 1013); // *
define_key("\033OS", 1014); // -
define_key("\033Oj", 1015); // *
define_key("\033Ok", 1016); // +
define_key("\033Ol", 1017); // +
define_key("\033Om", 1018); // .
define_key("\033On", 1019); // .
define_key("\033Oo", 1020); // -

// variants.  Ugly curses won't allow us to return the same code...
define_key("\033[1~", 1031); // Home
define_key("\033[4~", 1034); // End
define_key("\033[E",  1040); // center arrow
于 2014-04-20T15:19:06.193 に答える