diff --git a/smol_gkos.ino b/smol_gkos.ino index ddab07e..2de8d00 100644 --- a/smol_gkos.ino +++ b/smol_gkos.ino @@ -6,6 +6,7 @@ // using my own masks here since the inbuilt ones conflict with arrow keys etc. #define MASK_SHIFT 0x100 #define MASK_ALTGR 0x200 +#define MASK_CTRL 0x400 const byte PIN_A = 33; const byte PIN_B = 32; @@ -63,8 +64,8 @@ const byte chord_buttons[24] = { // keypresses for chords in sets of 4 // index 0 is the chord on its own, 1-3 correspond to chord_buttons const int chord_targets[32] = { - KEY_BACKSPACE, KEY_LEFT, KEY_LEFT, KEY_HOME, - KEY_SPACE, KEY_RIGHT, KEY_RIGHT, KEY_END, + KEY_BACKSPACE, KEY_LEFT + MASK_CTRL, KEY_LEFT, KEY_HOME, + KEY_SPACE, KEY_RIGHT + MASK_CTRL, KEY_RIGHT, KEY_END, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, @@ -73,8 +74,8 @@ const int chord_targets[32] = { 0, 0, 0, 0 }; const int chord_targets_symbol[32] = { - KEY_BACKSPACE, KEY_LEFT, KEY_LEFT, KEY_HOME, - KEY_SPACE, KEY_RIGHT, KEY_RIGHT, KEY_END, + 0, 0, 0, 0, + 0, 0, 0, 0, KEY_0, KEY_7, KEY_8, KEY_9, // # @ ½ & KEY_BACKSLASH, KEY_QUOTE + MASK_SHIFT, KEY_5 + MASK_ALTGR, KEY_7 + MASK_SHIFT, @@ -383,7 +384,8 @@ void key_released(byte key) { key_pressed_total == chords[chord]) { target = chord_targets[chord * 4]; if (mod_symbol || mod_symbol_lock) - target = chord_targets_symbol[chord * 4]; + if (chord_targets_symbol[chord * 4] != 0) + target = chord_targets_symbol[chord * 4]; press_key(target); return; @@ -393,7 +395,8 @@ void key_released(byte key) { if (key == chord_buttons[chord * 3 + b]) { target = chord_targets[chord * 4 + 1 + b]; if (mod_symbol || mod_symbol_lock) - target = chord_targets_symbol[chord * 4 + 1 + b]; + if (chord_targets_symbol[chord * 4 + 1 + b] != 0) + target = chord_targets_symbol[chord * 4 + 1 + b]; // erase key from total so you can hold the chord down for // multiple chorded keypresses @@ -427,6 +430,10 @@ void press_key(int key) { mod_altgr = true; key &= ~(MASK_ALTGR); } + if (key & MASK_CTRL) { + mod_control = true; + key &= ~(MASK_CTRL); + } // modifiers if (mod_shift || mod_shift_lock)