如何使用 ncurses 修复箭头键的延迟?

How do I fix the delay on arrow keys with ncurses?

我正在尝试使用箭头键移动光标,但使用这些键时有一个键的延迟。我读到它首先发送转义序列,所以这可能就是为什么,有什么办法可以解决它吗?


int main() {

        int ch,x=0,y=0;
        initscr();
        noecho();
        cbreak();

        keypad(stdscr, TRUE);

        refresh();

        while(true)  { /*main loop*/
                ch=getch();
                switch (ch) {
                        case KEY_UP:
                                y--;
                                move(y,x);
                                break;
                        case KEY_DOWN:
                                move(y,x);
                                y++;
                                break;
                        case KEY_RIGHT:
                                move(y,x);
                                x++;
                                break;
                        case KEY_LEFT:
                                move(y,x);
                                x--;
                                break;
                        case 27:
                                goto clean;
                        default:
                                addch(ch);
                                break;
                }
        }

clean:
        endwin();
        return 0;
}

谢谢!

如评论中所述,示例程序的问题在于,在某些情况下,它会在 移动光标后调整坐标 ,与 [=10= 的情况不一致], 调整坐标 before 移动光标.

为了保持一致,将 move(y,x) 调用 放在 y++x++x-- 语句之后。