diff --git a/examples/SpaceCadet/SpaceCadet.ino b/examples/SpaceCadet/SpaceCadet.ino index 1a8fac79..be72a3c7 100644 --- a/examples/SpaceCadet/SpaceCadet.ino +++ b/examples/SpaceCadet/SpaceCadet.ino @@ -20,31 +20,31 @@ #include const Key keymaps[][ROWS][COLS] PROGMEM = { - [0] = KEYMAP_STACKED - ( - Key_NoKey, Key_1, Key_2, Key_3, Key_4, Key_5, Key_NoKey, - Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab, - Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G, - Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape, + [0] = KEYMAP_STACKED + ( + Key_NoKey, Key_1, Key_2, Key_3, Key_4, Key_5, Key_NoKey, + Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab, + Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G, + Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape, - Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift, - Key_skip, + Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift, + Key_skip, - Key_skip, Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, - Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, - Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, - Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, + Key_skip, Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, + Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, + Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, + Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, - Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl, - Key_skip - ), + Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl, + Key_skip + ), }; -void setup () { - Kaleidoscope.setup (); - USE_PLUGINS (&SpaceCadetShift); +void setup() { + Kaleidoscope.setup(); + USE_PLUGINS(&SpaceCadetShift); } -void loop () { - Kaleidoscope.loop (); +void loop() { + Kaleidoscope.loop(); } diff --git a/src/Kaleidoscope/SpaceCadet.cpp b/src/Kaleidoscope/SpaceCadet.cpp index 86add326..a3e81aeb 100644 --- a/src/Kaleidoscope/SpaceCadet.cpp +++ b/src/Kaleidoscope/SpaceCadet.cpp @@ -25,80 +25,80 @@ uint32_t SpaceCadetShift::startTime; uint16_t SpaceCadetShift::timeOut = 1000; Key SpaceCadetShift::leftParen, SpaceCadetShift::rightParen; -SpaceCadetShift::SpaceCadetShift () { - leftParen.raw = Key_9.raw; - rightParen.raw = Key_0.raw; +SpaceCadetShift::SpaceCadetShift() { + leftParen.raw = Key_9.raw; + rightParen.raw = Key_0.raw; } void -SpaceCadetShift::begin () { - event_handler_hook_use (this->eventHandlerHook); +SpaceCadetShift::begin() { + event_handler_hook_use(this->eventHandlerHook); } void -SpaceCadetShift::configure (Key left, Key right) { - leftParen = left; - rightParen = right; +SpaceCadetShift::configure(Key left, Key right) { + leftParen = left; + rightParen = right; } Key -SpaceCadetShift::eventHandlerHook (Key mappedKey, byte row, byte col, uint8_t keyState) { - // If nothing happened, bail out fast. - if (!key_is_pressed (keyState) && !key_was_pressed (keyState)) { - return mappedKey; - } - - // If a key has been just toggled on... - if (key_toggled_on (keyState)) { - if (mappedKey.raw == Key_LeftShift.raw) { // if it is LShift, remember it - bitWrite (parenNeeded, 0, 1); - startTime = millis (); - } else if (mappedKey.raw == Key_RightShift.raw) { // if it is RShift, remember it - bitWrite (parenNeeded, 1, 1); - startTime = millis (); - } else { // if it is something else, we do not need a paren at the end. - parenNeeded = 0; - startTime = 0; - } - - // this is all we need to do on keypress, let the next handler do its thing too. - return mappedKey; +SpaceCadetShift::eventHandlerHook(Key mappedKey, byte row, byte col, uint8_t keyState) { + // If nothing happened, bail out fast. + if (!key_is_pressed(keyState) && !key_was_pressed(keyState)) { + return mappedKey; + } + + // If a key has been just toggled on... + if (key_toggled_on(keyState)) { + if (mappedKey.raw == Key_LeftShift.raw) { // if it is LShift, remember it + bitWrite(parenNeeded, 0, 1); + startTime = millis(); + } else if (mappedKey.raw == Key_RightShift.raw) { // if it is RShift, remember it + bitWrite(parenNeeded, 1, 1); + startTime = millis(); + } else { // if it is something else, we do not need a paren at the end. + parenNeeded = 0; + startTime = 0; } - // if the state is empty, that means that either the shifts weren't pressed, - // or we used another key in the interim. in both cases, nothing special to do. - if (!parenNeeded) - return mappedKey; + // this is all we need to do on keypress, let the next handler do its thing too. + return mappedKey; + } - // if we timed out, that means we need to keep pressing shift, but won't - // need the parens in the end. - if ((millis () - startTime) >= timeOut) { - parenNeeded = 0; - return mappedKey; - } + // if the state is empty, that means that either the shifts weren't pressed, + // or we used another key in the interim. in both cases, nothing special to do. + if (!parenNeeded) + return mappedKey; - // if we have a state, but the key in question is not either of the shifts, - // return. This can happen when another key is released, and that should not - // interrupt us. - if (mappedKey.raw != Key_LeftShift.raw && - mappedKey.raw != Key_RightShift.raw) - return mappedKey; - - // if a key toggled off (and that must be one of the shifts at this point), - // send the parens too (if we were interrupted, we bailed out earlier). - if (key_toggled_off (keyState)) { - Key paren = leftParen; - if (bitRead (parenNeeded, 1)) - paren = rightParen; - - handle_keyswitch_event (mappedKey, row, col, IS_PRESSED | INJECTED); - handle_keyswitch_event (paren, row, col, IS_PRESSED | INJECTED); - Keyboard.sendReport (); - - parenNeeded = 0; - } + // if we timed out, that means we need to keep pressing shift, but won't + // need the parens in the end. + if ((millis() - startTime) >= timeOut) { + parenNeeded = 0; + return mappedKey; + } + // if we have a state, but the key in question is not either of the shifts, + // return. This can happen when another key is released, and that should not + // interrupt us. + if (mappedKey.raw != Key_LeftShift.raw && + mappedKey.raw != Key_RightShift.raw) return mappedKey; + + // if a key toggled off (and that must be one of the shifts at this point), + // send the parens too (if we were interrupted, we bailed out earlier). + if (key_toggled_off(keyState)) { + Key paren = leftParen; + if (bitRead(parenNeeded, 1)) + paren = rightParen; + + handle_keyswitch_event(mappedKey, row, col, IS_PRESSED | INJECTED); + handle_keyswitch_event(paren, row, col, IS_PRESSED | INJECTED); + Keyboard.sendReport(); + + parenNeeded = 0; + } + + return mappedKey; } }; diff --git a/src/Kaleidoscope/SpaceCadet.h b/src/Kaleidoscope/SpaceCadet.h index 0b66aef4..b6c6ffaa 100644 --- a/src/Kaleidoscope/SpaceCadet.h +++ b/src/Kaleidoscope/SpaceCadet.h @@ -22,20 +22,20 @@ namespace KaleidoscopePlugins { class SpaceCadetShift : public KaleidoscopePlugin { - public: - SpaceCadetShift (void); + public: + SpaceCadetShift(void); - void begin (void) final; + void begin(void) final; - static void configure (Key left, Key right); - static uint16_t timeOut; + static void configure(Key left, Key right); + static uint16_t timeOut; - private: - static uint8_t parenNeeded; - static uint32_t startTime; - static Key leftParen, rightParen; + private: + static uint8_t parenNeeded; + static uint32_t startTime; + static Key leftParen, rightParen; - static Key eventHandlerHook (Key mappedKey, byte row, byte col, uint8_t keyState); + static Key eventHandlerHook(Key mappedKey, byte row, byte col, uint8_t keyState); }; };