Display Curses Keys Responds to curses keys and mouse events, displaying the key code and description.
23 {
24 WINDOW *win;
25
26 char Title[] = "TEST CURSES KEYS";
27 int lines = 10;
28 int cols = 55;
30 int c;
33 MEVENT event;
34 char *s;
35 int maxy, maxx;
36
37 getmaxyx(stdscr, maxy, maxx);
38 int begy = (maxy - lines) / 3;
39 int begx = (maxx - cols) / 2;
40 mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION | BUTTON_SHIFT |
41 BUTTON_CTRL | BUTTON_ALT,
42 NULL);
43 if (
box_new(lines, cols, begy, begx, Title)) {
47 exit(EXIT_FAILURE);
48 }
49
53 mvwaddstr(win, lines - 1, 0, " <ALT>END to exit ");
54 wbkgrndset(win, &
CC_NT);
55
56 mvwaddstr(win, 1, 4, "Press a key or activate the mouse:");
57 c = '\0';
58 halfdelay(1);
59 while (!c) {
60 kstr[0] = '\0';
61 wmove(win, 1, 39);
62 do {
63 update_panels();
64 doupdate();
65 c = wgetch(win);
69 if (c == 'q' || c == KEY_F(9))
70 exit(EXIT_FAILURE);
71 continue;
72 }
73 } while (c == ERR);
74 s = keybound(c, 0);
75 switch (c) {
76 case '\0':
77 break;
78 case KEY_CODE_YES:
79 strnz__cpy(kstr,
"KEY_CODE_YES A wchar_t contains a key code",
81 break;
82 case KEY_BREAK:
84 break;
85 case KEY_DOWN:
87 break;
88 case KEY_UP:
90 break;
91 case KEY_LEFT:
93 break;
94 case KEY_RIGHT:
96 break;
97 case KEY_HOME:
99 break;
100 case KEY_BACKSPACE:
102 break;
103 case KEY_F(1):
105 break;
106 case KEY_F(2):
108 break;
109 case KEY_F(3):
111 break;
112 case KEY_F(4):
114 break;
115 case KEY_F(5):
117 break;
118 case KEY_F(6):
120 break;
121 case KEY_F(7):
123 break;
124 case KEY_F(8):
126 break;
127 case KEY_F(9):
129 break;
130 case KEY_F(10):
132 break;
133 case KEY_F(11):
135 break;
136 case KEY_F(12):
138 break;
139 case KEY_DL:
141 break;
142 case KEY_IL:
144 break;
145 case KEY_DC:
147 break;
148 case KEY_IC:
150 break;
151 case KEY_EIC:
152 strnz__cpy(kstr,
"KEY_EIC sent by rmir or smir in insert mode",
154 break;
155 case KEY_CLEAR:
156 strnz__cpy(kstr,
"KEY_CLEAR clear - screen or erase key",
158 break;
159 case KEY_EOS:
160 strnz__cpy(kstr,
"KEY_EOS clear - to - end - of - screen key",
162 break;
163 case KEY_EOL:
164 strnz__cpy(kstr,
"KEY_EOL clear - to - end - of - line key",
166 break;
167 case KEY_SF:
169 break;
170 case KEY_SR:
172 break;
173 case KEY_NPAGE:
175 break;
176 case KEY_PPAGE:
178 break;
179 case KEY_STAB:
181 break;
182 case KEY_CTAB:
184 break;
185 case KEY_CATAB:
187 break;
188 case '\n':
190 break;
191 case KEY_ENTER:
193 break;
194 case KEY_SRESET:
195 strnz__cpy(kstr,
"KEY_SRESET Soft(partial) reset(unreliable)",
197 break;
198 case KEY_RESET:
199 strnz__cpy(kstr,
"KEY_RESET Reset or hard reset(unreliable)",
201 break;
202 case KEY_PRINT:
204 break;
205 case KEY_LL:
207 break;
208 case KEY_A1:
210 break;
211 case KEY_A3:
213 break;
214 case KEY_B2:
216 break;
217 case KEY_C1:
219 break;
220 case KEY_C3:
222 break;
223 case KEY_BTAB:
225 break;
226 case KEY_BEG:
228 break;
229 case KEY_CANCEL:
231 break;
232 case KEY_CLOSE:
234 break;
235 case KEY_COMMAND:
237 break;
238 case KEY_COPY:
240 break;
241 case KEY_CREATE:
243 break;
244 case KEY_END:
246 break;
247 case KEY_EXIT:
249 break;
250 case KEY_FIND:
252 break;
253 case KEY_HELP:
255 break;
256 case KEY_MARK:
258 break;
259 case KEY_MESSAGE:
261 break;
262 case KEY_MOVE:
264 break;
265 case KEY_NEXT:
267 break;
268 case KEY_OPEN:
270 break;
271 case KEY_OPTIONS:
273 break;
274 case KEY_PREVIOUS:
276 break;
277 case KEY_REDO:
279 break;
280 case KEY_REFERENCE:
282 break;
283 case KEY_REFRESH:
285 break;
286 case KEY_REPLACE:
288 break;
289 case KEY_RESTART:
291 break;
292 case KEY_RESUME:
294 break;
295 case KEY_SAVE:
297 break;
298 case KEY_SBEG:
300 break;
301 case KEY_SCANCEL:
303 break;
304 case KEY_SCOMMAND:
306 break;
307 case KEY_SCOPY:
309 break;
310 case KEY_SCREATE:
312 break;
313 case KEY_SDC:
314 strnz__cpy(kstr,
"KEY_SDC shifted delete - character key",
316 break;
317 case KEY_SDL:
319 break;
320 case KEY_SELECT:
322 break;
323 case KEY_SEND:
325 break;
326 case KEY_SEOL:
328 "KEY_SEOL shifted clear - to - end - of - line key",
330 break;
331 case KEY_SEXIT:
333 break;
334 case KEY_SFIND:
336 break;
337 case KEY_SHELP:
339 break;
340 case KEY_SHOME:
342 break;
343 case KEY_SIC:
344 strnz__cpy(kstr,
"KEY_SIC shifted insert - character key",
346 break;
347 case KEY_SLEFT:
349 break;
350 case KEY_SMESSAGE:
352 break;
353 case KEY_SMOVE:
355 break;
356 case KEY_SNEXT:
358 break;
359 case KEY_SOPTIONS:
361 break;
362 case KEY_SPREVIOUS:
364 break;
365 case KEY_SPRINT:
367 break;
368 case KEY_SREDO:
370 break;
371 case KEY_SREPLACE:
373 break;
374 case KEY_SRIGHT:
375 strnz__cpy(kstr,
"KEY_SRIGHT shifted right - arrow key",
377 break;
378 case KEY_SRSUME:
380 break;
381 case KEY_SSAVE:
383 break;
384 case KEY_SSUSPEND:
386 break;
387 case KEY_SUNDO:
389 break;
390 case KEY_SUSPEND:
392 break;
393 case KEY_UNDO:
395 break;
398 break;
401 break;
404 break;
407 break;
410 break;
413 break;
416 break;
419 break;
422 break;
425 break;
428 break;
431 break;
434 break;
437 break;
440 break;
443 break;
446 break;
449 break;
452 break;
455 break;
458 break;
461 break;
462 case KEY_MOUSE:
463 action[0] = '\0';
464 if (getmouse(&event) == OK) {
465 switch (event.bstate) {
466 case BUTTON1_PRESSED:
468 break;
469 case BUTTON1_RELEASED:
471 break;
472 case BUTTON1_CLICKED:
474 break;
475 case BUTTON1_DOUBLE_CLICKED:
477 break;
478 case BUTTON2_PRESSED:
480 break;
481 case BUTTON2_RELEASED:
483 break;
484 case BUTTON2_CLICKED:
486 break;
487 case BUTTON2_DOUBLE_CLICKED:
489 break;
490 case BUTTON3_PRESSED:
492 break;
493 case BUTTON3_RELEASED:
495 break;
496 case BUTTON3_CLICKED:
498 break;
499 case BUTTON3_DOUBLE_CLICKED:
501 break;
502 case BUTTON4_PRESSED:
504 break;
505 case BUTTON4_RELEASED:
507 break;
508 case BUTTON4_CLICKED:
510 break;
511 case BUTTON4_DOUBLE_CLICKED:
513 break;
514 case BUTTON5_PRESSED:
516 break;
517 default:
518 break;
519 }
520 mvwaddstr(win, 6, 3, " Action:");
521 mvwaddstr(win, 6, 16, action);
522 wclrtoeol(win);
523
525 if (event.bstate & BUTTON_SHIFT)
527 if (event.bstate & BUTTON_CTRL)
529 if (event.bstate & BUTTON_ALT)
531 mvwaddstr(win, 3, 4, tmp);
532 wclrtoeol(win);
533 if (wenclose(win, event.y, event.x)) {
534 sprintf(tmp, " Inside Win: y: %3d, x: %3d",
535 event.y - begy, event.x - begx);
536 } else {
537 sprintf(tmp, " Outside Win: y: %3d, x: %3d",
538 event.y - begy, event.x - begx);
539 }
540 mvwaddstr(win, 4, 4, tmp);
541 wclrtoeol(win);
542 wmove(win, 5, 0);
543 wclrtoeol(win);
544 wmove(win, 7, 0);
545 wclrtoeol(win);
546 }
547 break;
548 default:
549 break;
550 }
551 if (c != KEY_MOUSE) {
552
553 sprintf(tmp, " Octal: %3o", c);
554 mvwaddstr(win, 3, 4, tmp);
555 wclrtoeol(win);
556
557 sprintf(tmp, " Decimal: %3d", c);
558 mvwaddstr(win, 4, 4, tmp);
559 wclrtoeol(win);
560
561 sprintf(tmp, " Hex: %3x", c);
562 mvwaddstr(win, 5, 4, tmp);
563 wclrtoeol(win);
564
565 if (kstr[0]) {
566 sprintf(tmp, "Description: %s", kstr);
567 } else {
568 sprintf(tmp, " ASCII: %c", c);
569 }
570 mvwaddstr(win, 6, 3, tmp);
571 wclrtoeol(win);
572 mvwaddstr(win, 7, 2, "Key bound To: ");
573 wclrtoeol(win);
574 mvwaddstr(win, 7, 16, s ? s : "Not Bound");
575
576 update_panels();
577 doupdate();
578 }
580 usleep(100000);
581 break;
582 }
583 c = '\0';
584 }
586 return 0;
587}
volatile sig_atomic_t sig_received
bool handle_signal(sig_atomic_t)
void win_del()
Delete the current window and its associated box window.
int box_new(int, int, int, int, char *)
Create a new window with optional box and title.
int Perror(char *)
Display a simple error message window or print to stderr.
int display_error(char *, char *, char *, char *)
Display an error message window or print to stderr.
size_t strnz__cpy(char *, const char *, size_t)
safer alternative to strncpy
size_t strnz__cat(char *, const char *, size_t)
safer alternative to strncat