Display Curses Keys Responds to curses keys and mouse events, displaying the key code and description.
23 {
25 WINDOW *box;
26 char Title[] = "TEST CURSES KEYS";
30 int c;
33 MEVENT event;
34 char *s;
35 int maxy, maxx;
36
37 getmaxyx(stdscr, maxy, maxx);
40
41 mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION | BUTTON_SHIFT |
42 BUTTON_CTRL | BUTTON_ALT,
43 NULL);
48 return 0;
49 }
53 wattron(
win, WA_REVERSE);
54 mvwaddstr(
win,
lines - 1, 0,
" <ALT>END to exit ");
55 wattroff(
win, WA_REVERSE);
56 wnoutrefresh(box);
57 mvwaddstr(
win, 1, 4,
"Press a key or activate the mouse:");
58 c = '\0';
59 halfdelay(1);
60 while (!c) {
61 kstr[0] = '\0';
63 do {
68 if (c == 'q' || c == KEY_F(9))
69 exit(EXIT_FAILURE);
70 continue;
71 }
72 } while (c == ERR);
73 s = keybound(c, 0);
74 switch (c) {
75 case '\0':
76 break;
77 case KEY_CODE_YES:
78 strnz__cpy(kstr,
"KEY_CODE_YES A wchar_t contains a key code",
80 break;
81 case KEY_BREAK:
83 break;
84 case KEY_DOWN:
86 break;
87 case KEY_UP:
89 break;
90 case KEY_LEFT:
92 break;
93 case KEY_RIGHT:
95 break;
96 case KEY_HOME:
98 break;
99 case KEY_BACKSPACE:
101 break;
102 case KEY_F(1):
104 break;
105 case KEY_F(2):
107 break;
108 case KEY_F(3):
110 break;
111 case KEY_F(4):
113 break;
114 case KEY_F(5):
116 break;
117 case KEY_F(6):
119 break;
120 case KEY_F(7):
122 break;
123 case KEY_F(8):
125 break;
126 case KEY_F(9):
128 break;
129 case KEY_F(10):
131 break;
132 case KEY_F(11):
134 break;
135 case KEY_F(12):
137 break;
138 case KEY_DL:
140 break;
141 case KEY_IL:
143 break;
144 case KEY_DC:
146 break;
147 case KEY_IC:
149 break;
150 case KEY_EIC:
151 strnz__cpy(kstr,
"KEY_EIC sent by rmir or smir in insert mode",
153 break;
154 case KEY_CLEAR:
155 strnz__cpy(kstr,
"KEY_CLEAR clear - screen or erase key",
157 break;
158 case KEY_EOS:
159 strnz__cpy(kstr,
"KEY_EOS clear - to - end - of - screen key",
161 break;
162 case KEY_EOL:
163 strnz__cpy(kstr,
"KEY_EOL clear - to - end - of - line key",
165 break;
166 case KEY_SF:
168 break;
169 case KEY_SR:
171 break;
172 case KEY_NPAGE:
174 break;
175 case KEY_PPAGE:
177 break;
178 case KEY_STAB:
180 break;
181 case KEY_CTAB:
183 break;
184 case KEY_CATAB:
186 break;
187 case '\n':
189 break;
190 case KEY_ENTER:
192 break;
193 case KEY_SRESET:
194 strnz__cpy(kstr,
"KEY_SRESET Soft(partial) reset(unreliable)",
196 break;
197 case KEY_RESET:
198 strnz__cpy(kstr,
"KEY_RESET Reset or hard reset(unreliable)",
200 break;
201 case KEY_PRINT:
203 break;
204 case KEY_LL:
206 break;
207 case KEY_A1:
209 break;
210 case KEY_A3:
212 break;
213 case KEY_B2:
215 break;
216 case KEY_C1:
218 break;
219 case KEY_C3:
221 break;
222 case KEY_BTAB:
224 break;
225 case KEY_BEG:
227 break;
228 case KEY_CANCEL:
230 break;
231 case KEY_CLOSE:
233 break;
234 case KEY_COMMAND:
236 break;
237 case KEY_COPY:
239 break;
240 case KEY_CREATE:
242 break;
243 case KEY_END:
245 break;
246 case KEY_EXIT:
248 break;
249 case KEY_FIND:
251 break;
252 case KEY_HELP:
254 break;
255 case KEY_MARK:
257 break;
258 case KEY_MESSAGE:
260 break;
261 case KEY_MOVE:
263 break;
264 case KEY_NEXT:
266 break;
267 case KEY_OPEN:
269 break;
270 case KEY_OPTIONS:
272 break;
273 case KEY_PREVIOUS:
275 break;
276 case KEY_REDO:
278 break;
279 case KEY_REFERENCE:
281 break;
282 case KEY_REFRESH:
284 break;
285 case KEY_REPLACE:
287 break;
288 case KEY_RESTART:
290 break;
291 case KEY_RESUME:
293 break;
294 case KEY_SAVE:
296 break;
297 case KEY_SBEG:
299 break;
300 case KEY_SCANCEL:
302 break;
303 case KEY_SCOMMAND:
305 break;
306 case KEY_SCOPY:
308 break;
309 case KEY_SCREATE:
311 break;
312 case KEY_SDC:
313 strnz__cpy(kstr,
"KEY_SDC shifted delete - character key",
315 break;
316 case KEY_SDL:
318 break;
319 case KEY_SELECT:
321 break;
322 case KEY_SEND:
324 break;
325 case KEY_SEOL:
327 "KEY_SEOL shifted clear - to - end - of - line key",
329 break;
330 case KEY_SEXIT:
332 break;
333 case KEY_SFIND:
335 break;
336 case KEY_SHELP:
338 break;
339 case KEY_SHOME:
341 break;
342 case KEY_SIC:
343 strnz__cpy(kstr,
"KEY_SIC shifted insert - character key",
345 break;
346 case KEY_SLEFT:
348 break;
349 case KEY_SMESSAGE:
351 break;
352 case KEY_SMOVE:
354 break;
355 case KEY_SNEXT:
357 break;
358 case KEY_SOPTIONS:
360 break;
361 case KEY_SPREVIOUS:
363 break;
364 case KEY_SPRINT:
366 break;
367 case KEY_SREDO:
369 break;
370 case KEY_SREPLACE:
372 break;
373 case KEY_SRIGHT:
374 strnz__cpy(kstr,
"KEY_SRIGHT shifted right - arrow key",
376 break;
377 case KEY_SRSUME:
379 break;
380 case KEY_SSAVE:
382 break;
383 case KEY_SSUSPEND:
385 break;
386 case KEY_SUNDO:
388 break;
389 case KEY_SUSPEND:
391 break;
392 case KEY_UNDO:
394 break;
397 break;
400 break;
403 break;
406 break;
409 break;
412 break;
415 break;
418 break;
421 break;
424 break;
427 break;
430 break;
433 break;
436 break;
439 break;
442 break;
445 break;
448 break;
451 break;
454 break;
457 break;
460 break;
461 case KEY_MOUSE:
462 action[0] = '\0';
463 if (getmouse(&event) == OK) {
464 switch (event.bstate) {
465 case BUTTON1_PRESSED:
467 break;
468 case BUTTON1_RELEASED:
470 break;
471 case BUTTON1_CLICKED:
473 break;
474 case BUTTON1_DOUBLE_CLICKED:
476 break;
477 case BUTTON2_PRESSED:
479 break;
480 case BUTTON2_RELEASED:
482 break;
483 case BUTTON2_CLICKED:
485 break;
486 case BUTTON2_DOUBLE_CLICKED:
488 break;
489 case BUTTON3_PRESSED:
491 break;
492 case BUTTON3_RELEASED:
494 break;
495 case BUTTON3_CLICKED:
497 break;
498 case BUTTON3_DOUBLE_CLICKED:
500 break;
501 case BUTTON4_PRESSED:
503 break;
504 case BUTTON4_RELEASED:
506 break;
507 case BUTTON4_CLICKED:
509 break;
510 case BUTTON4_DOUBLE_CLICKED:
512 break;
513 case BUTTON5_PRESSED:
515 break;
516 default:
517 break;
518 }
519 mvwaddstr(
win, 6, 3,
" Action:");
520 mvwaddstr(
win, 6, 16, action);
522
524 if (event.bstate & BUTTON_SHIFT)
526 if (event.bstate & BUTTON_CTRL)
528 if (event.bstate & BUTTON_ALT)
530 mvwaddstr(
win, 3, 4, tmp);
532 if (wenclose(
win, event.y, event.x)) {
533 sprintf(tmp, " Inside Win: y: %3d, x: %3d",
535 } else {
536 sprintf(tmp, " Outside Win: y: %3d, x: %3d",
538 }
539 mvwaddstr(
win, 4, 4, tmp);
545 }
546 break;
547 default:
548 break;
549 }
550 if (c != KEY_MOUSE) {
551
552 sprintf(tmp, " Octal: %3o", c);
553 mvwaddstr(
win, 3, 4, tmp);
555
556 sprintf(tmp, " Decimal: %3d", c);
557 mvwaddstr(
win, 4, 4, tmp);
559
560 sprintf(tmp, " Hex: %3x", c);
561 mvwaddstr(
win, 5, 4, tmp);
563
564 if (kstr[0]) {
565 sprintf(tmp, "Description: %s", kstr);
566 } else {
567 sprintf(tmp, " ASCII: %c", c);
568 }
569 mvwaddstr(
win, 6, 3, tmp);
571 mvwaddstr(
win, 7, 2,
"Key bound To: ");
573 mvwaddstr(
win, 7, 16, s ? s :
"Not Bound");
575 }
577 usleep(100000);
578 break;
579 }
580 c = '\0';
581 }
584 clear();
585 refresh();
587 return 0;
588}
volatile sig_atomic_t sig_received
bool handle_signal(sig_atomic_t)
int win_new(int, int, int, int, char *, int)
Create a new window with optional box and title.
WINDOW * win_del()
Delete the current window and its associated box window.
int Perror(char *)
Display a simple error message window or print to stderr.
int display_error(char *em0, char *em1, char *em2, char *em3)
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