diff options
Diffstat (limited to 'quantum/keycode_config.c')
| -rw-r--r-- | quantum/keycode_config.c | 118 | 
1 files changed, 118 insertions, 0 deletions
| diff --git a/quantum/keycode_config.c b/quantum/keycode_config.c new file mode 100644 index 0000000000..eb39c8fe00 --- /dev/null +++ b/quantum/keycode_config.c @@ -0,0 +1,118 @@ +/* Copyright 2016 Jack Humbert + * + * 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, either version 2 of the License, or + * (at your option) any later version. + * + * 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/>. + */ + +#include "keycode_config.h" + +extern keymap_config_t keymap_config; + +uint16_t keycode_config(uint16_t keycode) { + +    switch (keycode) { +        case KC_CAPSLOCK: +        case KC_LOCKING_CAPS: +            if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) { +                return KC_LCTL; +            } +            return keycode; +        case KC_LCTL: +            if (keymap_config.swap_control_capslock) { +                return KC_CAPSLOCK; +            } +            return KC_LCTL; +        case KC_LALT: +            if (keymap_config.swap_lalt_lgui) { +                if (keymap_config.no_gui) { +                    return KC_NO; +                } +                return KC_LGUI; +            } +            return KC_LALT; +        case KC_LGUI: +            if (keymap_config.swap_lalt_lgui) { +                return KC_LALT; +            } +            if (keymap_config.no_gui) { +                return KC_NO; +            } +            return KC_LGUI; +        case KC_RALT: +            if (keymap_config.swap_ralt_rgui) { +                if (keymap_config.no_gui) { +                    return KC_NO; +                } +                return KC_RGUI; +            } +            return KC_RALT; +        case KC_RGUI: +            if (keymap_config.swap_ralt_rgui) { +                return KC_RALT; +            } +            if (keymap_config.no_gui) { +                return KC_NO; +            } +            return KC_RGUI; +        case KC_GRAVE: +            if (keymap_config.swap_grave_esc) { +                return KC_ESC; +            } +            return KC_GRAVE; +        case KC_ESC: +            if (keymap_config.swap_grave_esc) { +                return KC_GRAVE; +            } +            return KC_ESC; +        case KC_BSLASH: +            if (keymap_config.swap_backslash_backspace) { +                return KC_BSPACE; +            } +            return KC_BSLASH; +        case KC_BSPACE: +            if (keymap_config.swap_backslash_backspace) { +                return KC_BSLASH; +            } +            return KC_BSPACE; +        default: +            return keycode; +    } +} + +uint8_t mod_config(uint8_t mod) { +    keymap_config.raw = eeconfig_read_keymap(); +    if (keymap_config.swap_lalt_lgui) { +        if ((mod & MOD_RGUI) == MOD_LGUI) { +            mod &= ~MOD_LGUI; +            mod |= MOD_LALT; +        } else if ((mod & MOD_RALT) == MOD_LALT) { +            mod &= ~MOD_LALT; +            mod |= MOD_LGUI; +        } +    } +    if (keymap_config.swap_ralt_rgui) { +        if ((mod & MOD_RGUI) == MOD_RGUI) { +            mod &= ~MOD_RGUI; +            mod |= MOD_RALT; +        } else if ((mod & MOD_RALT) == MOD_RALT) { +            mod &= ~MOD_RALT; +            mod |= MOD_RGUI; +        } +    } +    if (keymap_config.no_gui) { +        mod &= ~MOD_LGUI; +        mod &= ~MOD_RGUI; +    } + +    return mod; +}
\ No newline at end of file | 
