- // 0: No translation, don't send to user
- case 0: break;
- case KEY_LEFT:
- buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'D';
- len = 3;
- break;
- case KEY_RIGHT:
- buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'C';
- len = 3;
- break;
- case KEY_UP:
- buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'A';
- len = 3;
- break;
- case KEY_DOWN:
- buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'B';
- len = 3;
- break;
-
- case KEY_PGUP:
- buf[0] = '\x1B'; buf[1] = '['; buf[2] = '5'; buf[3] = '~';
- len = 4;
- break;
- case KEY_PGDOWN:
- buf[0] = '\x1B'; buf[1] = '['; buf[2] = '6'; buf[3] = '~';
- len = 4;
- break;
-
- // Attempt to encode in UTF-8
- default:
+ // Non-printable keys
+ switch(term->RawScancode)
+ {
+ case KEYSYM_LEFTARROW:
+ case KEYSYM_KP4:
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'D';
+ len = 3;
+ break;
+ case KEYSYM_RIGHTARROW:
+ case KEYSYM_KP6:
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'C';
+ len = 3;
+ break;
+ case KEYSYM_UPARROW:
+ case KEYSYM_KP8:
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'A';
+ len = 3;
+ break;
+ case KEYSYM_DOWNARROW:
+ case KEYSYM_KP2:
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = 'B';
+ len = 3;
+ break;
+
+ case KEYSYM_PGUP:
+ case KEYSYM_KP9: // If Codepoint=0, It's page up
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = '5'; buf[3] = '~';
+ len = 4;
+ break;
+ case KEYSYM_PGDN:
+ case KEYSYM_KP3: // If Codepoint=0, It's page down
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = '6'; buf[3] = '~';
+ len = 4;
+ break;
+
+ case KEYSYM_HOME:
+ case KEYSYM_KP7:
+ buf[0] = '\x1B'; buf[1] = 'O'; buf[2] = 'H';
+ len = 3;
+ break;
+ case KEYSYM_END:
+ case KEYSYM_KP1:
+ buf[0] = '\x1B'; buf[1] = 'O'; buf[2] = 'F';
+ len = 3;
+ break;
+
+ case KEYSYM_INSERT:
+ case KEYSYM_KP0:
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = '2'; buf[3] = '~';
+ len = 4;
+ break;
+ case KEYSYM_DELETE:
+ case KEYSYM_KPPERIOD:
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = '3'; buf[3] = '~';
+ len = 4;
+ break;
+ }
+ }
+ else
+ {
+ // Attempt to encode in UTF-8