1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
#include "tmate.h"
#define LEGACY_KEYC_NONE 0xfff
#define LEGACY_KEYC_BASE 0x1000
#define LEGACY_KEYC_ESCAPE 0x2000
#define LEGACY_KEYC_CTRL 0x4000
#define LEGACY_KEYC_SHIFT 0x8000
#define LEGACY_KEYC_PREFIX 0x10000
enum legacy_key_code {
LEGACY_KEYC_MOUSE = LEGACY_KEYC_BASE,
LEGACY_KEYC_BSPACE,
LEGACY_KEYC_F1,
LEGACY_KEYC_F2,
LEGACY_KEYC_F3,
LEGACY_KEYC_F4,
LEGACY_KEYC_F5,
LEGACY_KEYC_F6,
LEGACY_KEYC_F7,
LEGACY_KEYC_F8,
LEGACY_KEYC_F9,
LEGACY_KEYC_F10,
LEGACY_KEYC_F11,
LEGACY_KEYC_F12,
LEGACY_KEYC_F13,
LEGACY_KEYC_F14,
LEGACY_KEYC_F15,
LEGACY_KEYC_F16,
LEGACY_KEYC_F17,
LEGACY_KEYC_F18,
LEGACY_KEYC_F19,
LEGACY_KEYC_F20,
LEGACY_KEYC_IC,
LEGACY_KEYC_DC,
LEGACY_KEYC_HOME,
LEGACY_KEYC_END,
LEGACY_KEYC_NPAGE,
LEGACY_KEYC_PPAGE,
LEGACY_KEYC_BTAB,
LEGACY_KEYC_UP,
LEGACY_KEYC_DOWN,
LEGACY_KEYC_LEFT,
LEGACY_KEYC_RIGHT,
LEGACY_KEYC_KP_SLASH,
LEGACY_KEYC_KP_STAR,
LEGACY_KEYC_KP_MINUS,
LEGACY_KEYC_KP_SEVEN,
LEGACY_KEYC_KP_EIGHT,
LEGACY_KEYC_KP_NINE,
LEGACY_KEYC_KP_PLUS,
LEGACY_KEYC_KP_FOUR,
LEGACY_KEYC_KP_FIVE,
LEGACY_KEYC_KP_SIX,
LEGACY_KEYC_KP_ONE,
LEGACY_KEYC_KP_TWO,
LEGACY_KEYC_KP_THREE,
LEGACY_KEYC_KP_ENTER,
LEGACY_KEYC_KP_ZERO,
LEGACY_KEYC_KP_PERIOD,
LEGACY_KEYC_FOCUS_IN,
LEGACY_KEYC_FOCUS_OUT,
};
void tmate_translate_legacy_key(int pane_id, key_code key)
{
key_code justkey = key & KEYC_MASK_KEY;
int lflags = 0;
int lkey;
if (key & KEYC_ESCAPE) lflags |= LEGACY_KEYC_ESCAPE;
if (key & KEYC_CTRL) lflags |= LEGACY_KEYC_CTRL;
if (key & KEYC_SHIFT) lflags |= LEGACY_KEYC_SHIFT;
switch(justkey) {
case KEYC_BSPACE: lkey = LEGACY_KEYC_BSPACE; break;
case KEYC_F1: lkey = LEGACY_KEYC_F1; break;
case KEYC_F2: lkey = LEGACY_KEYC_F2; break;
case KEYC_F3: lkey = LEGACY_KEYC_F3; break;
case KEYC_F4: lkey = LEGACY_KEYC_F4; break;
case KEYC_F5: lkey = LEGACY_KEYC_F5; break;
case KEYC_F6: lkey = LEGACY_KEYC_F6; break;
case KEYC_F7: lkey = LEGACY_KEYC_F7; break;
case KEYC_F8: lkey = LEGACY_KEYC_F8; break;
case KEYC_F9: lkey = LEGACY_KEYC_F9; break;
case KEYC_F10: lkey = LEGACY_KEYC_F10; break;
case KEYC_F11: lkey = LEGACY_KEYC_F11; break;
case KEYC_F12: lkey = LEGACY_KEYC_F12; break;
case KEYC_IC: lkey = LEGACY_KEYC_IC; break;
case KEYC_DC: lkey = LEGACY_KEYC_DC; break;
case KEYC_HOME: lkey = LEGACY_KEYC_HOME; break;
case KEYC_END: lkey = LEGACY_KEYC_END; break;
case KEYC_NPAGE: lkey = LEGACY_KEYC_NPAGE; break;
case KEYC_PPAGE: lkey = LEGACY_KEYC_PPAGE; break;
case KEYC_BTAB: lkey = LEGACY_KEYC_BTAB; break;
case KEYC_UP: lkey = LEGACY_KEYC_UP; break;
case KEYC_DOWN: lkey = LEGACY_KEYC_DOWN; break;
case KEYC_LEFT: lkey = LEGACY_KEYC_LEFT; break;
case KEYC_RIGHT: lkey = LEGACY_KEYC_RIGHT; break;
case KEYC_KP_SLASH: lkey = LEGACY_KEYC_KP_SLASH; break;
case KEYC_KP_STAR: lkey = LEGACY_KEYC_KP_STAR; break;
case KEYC_KP_MINUS: lkey = LEGACY_KEYC_KP_MINUS; break;
case KEYC_KP_SEVEN: lkey = LEGACY_KEYC_KP_SEVEN; break;
case KEYC_KP_EIGHT: lkey = LEGACY_KEYC_KP_EIGHT; break;
case KEYC_KP_NINE: lkey = LEGACY_KEYC_KP_NINE; break;
case KEYC_KP_PLUS: lkey = LEGACY_KEYC_KP_PLUS; break;
case KEYC_KP_FOUR: lkey = LEGACY_KEYC_KP_FOUR; break;
case KEYC_KP_FIVE: lkey = LEGACY_KEYC_KP_FIVE; break;
case KEYC_KP_SIX: lkey = LEGACY_KEYC_KP_SIX; break;
case KEYC_KP_ONE: lkey = LEGACY_KEYC_KP_ONE; break;
case KEYC_KP_TWO: lkey = LEGACY_KEYC_KP_TWO; break;
case KEYC_KP_THREE: lkey = LEGACY_KEYC_KP_THREE; break;
case KEYC_KP_ENTER: lkey = LEGACY_KEYC_KP_ENTER; break;
case KEYC_KP_ZERO: lkey = LEGACY_KEYC_KP_ZERO; break;
case KEYC_KP_PERIOD: lkey = LEGACY_KEYC_KP_PERIOD; break;
case KEYC_FOCUS_IN: lkey = LEGACY_KEYC_FOCUS_IN; break;
case KEYC_FOCUS_OUT: lkey = LEGACY_KEYC_FOCUS_OUT; break;
default:
if (justkey >= KEYC_BASE) {
/* Unknown key */
return;
}
if (justkey > 0x7f) {
/* UTF8 */
int i;
struct utf8_data ud;
if (utf8_split(justkey, &ud) != UTF8_DONE)
return;
for (i = 0; i < ud.size; i++) {
tmate_client_legacy_pane_key(pane_id, lflags | ud.data[i]);
lflags = 0;
}
return;
}
lkey = justkey;
}
tmate_client_legacy_pane_key(pane_id, lflags | lkey);
}
|