/* -*- mode: c++ -*- * AppSwitcher -- A Kaleidoscope Example * Copyright (C) 2016-2018 Keyboardio, Inc. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, version 3. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ #define KALEIDOSCOPE_HOSTOS_GUESSER 1 #include <Kaleidoscope-HostOS.h> #include "Macros.h" namespace H = kaleidoscope::hostos; static bool appSwitchActive = false; const macro_t *macroAppSwitch(uint8_t keyState) { appSwitchActive = true; // Key was just pressed, or is being held if (keyIsPressed(keyState)) { if (HostOS.os() == H::OSX) return MACRO(Dr(Key_LeftGui), D(Tab)); else return MACRO(Dr(Key_LeftAlt), D(Tab)); } // Key was just released if (keyToggledOff(keyState)) { if (HostOS.os() == H::OSX) return MACRO(U(Tab), Dr(Key_LeftGui)); else return MACRO(U(Tab), Dr(Key_LeftAlt)); } // otherwise we do nothing return MACRO_NONE; } const macro_t *macroAppCancel(uint8_t keyState) { if (keyToggledOn(keyState)) appSwitchActive = false; return MACRO_NONE; } void macroAppSwitchLoop() { Key mod = Key_LeftAlt; if (HostOS.os() == H::OSX) mod = Key_LeftGui; // if appSwitchActive is true, we continue holding Alt. if (appSwitchActive) { handleKeyswitchEvent(mod, UnknownKeyswitchLocation, IS_PRESSED); } }