- // 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: // Codepoint==0, then it's home (not translated)
+ buf[0] = '\x1B'; buf[1] = 'O'; buf[2] = 'H';
+ len = 3;
+ break;
+ case KEYSYM_END:
+ case KEYSYM_KP1: // You get the drill
+ buf[0] = '\x1B'; buf[1] = 'O'; buf[2] = 'F';
+ len = 3;
+ break;
+
+ case KEYSYM_INSERT:
+ case KEYSYM_KP0: // See above
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = '2'; buf[3] = '~';
+ len = 4;
+ break;
+ case KEYSYM_DELETE:
+ case KEYSYM_KPPERIOD: // Are you that dumb? Look up
+ buf[0] = '\x1B'; buf[1] = '['; buf[2] = '3'; buf[3] = '~';
+ len = 4;
+ break;
+ }
+ }
+ else if( gbVT_CtrlDown )
+ {
+ len = 1;
+ switch( term->RawScancode )
+ {
+ case KEYSYM_2:
+ buf[0] = '\0';
+ break;
+ case KEYSYM_3 ... KEYSYM_7:
+ buf[0] = 0x1b + (term->RawScancode - KEYSYM_3);
+ break;
+ case KEYSYM_8:
+ buf[0] = 0x7f;
+ break;
+ // - Ctrl-A = \1, Ctrl-Z = \x1a
+ case KEYSYM_a ... KEYSYM_z:
+ buf[0] = 0x01 + (term->RawScancode - KEYSYM_a);
+ break;
+ default:
+ goto utf_encode;
+ }
+ }
+ else
+ {
+ utf_encode:
+ // Attempt to encode in UTF-8