2009-07-25 38 views
15

Khi cố gắng lấy đầu vào từ các phím mũi tên qua các lời nguyền (ncurses) nó sẽ không bị bắt như KEY_UP v.v. Tôi đã sử dụng chức năng bàn phím với đối số đúng nhưng getch vẫn trả về chuỗi thoát. Làm thế nào để tôi sàng lọc thông qua các giá trị trả về bởi getch() và lấy các phím mũi tên đặc biệt?Curses nhận các phím mũi tên

Trả lời

13

Tôi đã lưu trữ getch() gọi là char's khi chúng được cho là int's. Hoạt động hoàn hảo sau khi chuyển đổi.

5

Thiết bị đầu cuối tiêu chuẩn (giống như VT100) gửi một chuỗi ký tự khi nhấn các phím mũi tên. Bạn chỉ cần theo dõi xem các chuỗi này có được nhấn theo thứ tự hay không. Dưới đây là các char để xem cho:

Down Arrow 0x1B 0x5B 0x42 
Left Arrow 0x1B 0x5B 0x44 
Right Arrow 0x1B 0x5B 0x43 
Up Arrow 0x1B 0x5B 0x41 
+1

Có thoát khỏi mã bạn có thể nhập như một tổ hợp phím hoặc dãy sử dụng Ctrl cho những? –

+0

Không cần; bạn có thể nhập trực tiếp. 0x1B = esc, 0x5B = [, và 0x41 - 0x44 = A - D. Loại esc [D trong terminal của bạn, và con trỏ di chuyển sang trái. –

+12

Cách tiếp cận này khá nhiều hoàn toàn đánh bại toàn bộ mục đích làm việc với thư viện nguyền rủa ở nơi đầu tiên :-) –

11

tôi thấy cùng một vấn đề trên Mac OS X. Nhưng nó đã được giải quyết bằng cách thêm những điều sau đây:

keypad(stdscr, TRUE); 
+2

Tuy nhiên, OP đã tuyên bố rằng điều này đã không làm việc cho anh ta. – augurar

Các vấn đề liên quan