qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

quantum_keycodes.h (9852B)


      1 /* Copyright 2016-2017 Jack Humbert
      2  *
      3  * This program is free software: you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License as published by
      5  * the Free Software Foundation, either version 2 of the License, or
      6  * (at your option) any later version.
      7  *
      8  * This program is distributed in the hope that it will be useful,
      9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11  * GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  */
     16 
     17 #pragma once
     18 
     19 //  Pull in dd keycodes to maintain header compatibility
     20 #include "keycodes.h"
     21 
     22 // US ANSI shifted keycode aliases
     23 #include "keymap_us.h"
     24 
     25 // TODO: sub-ranges?
     26 // clang-format off
     27 #define QK_LCTL                0x0100
     28 #define QK_LSFT                0x0200
     29 #define QK_LALT                0x0400
     30 #define QK_LGUI                0x0800
     31 #define QK_RMODS_MIN           0x1000
     32 #define QK_RCTL                0x1100
     33 #define QK_RSFT                0x1200
     34 #define QK_RALT                0x1400
     35 #define QK_RGUI                0x1800
     36 
     37 #define SAFE_RANGE             QK_USER
     38 // clang-format on
     39 
     40 // Generic decoding for the whole QK_MODS range
     41 #define QK_MODS_GET_MODS(kc) (((kc) >> 8) & 0x1F)
     42 #define QK_MODS_GET_BASIC_KEYCODE(kc) ((kc) & 0xFF)
     43 
     44 // Modified keycodes
     45 #define LCTL(kc) (QK_LCTL | (kc))
     46 #define LSFT(kc) (QK_LSFT | (kc))
     47 #define LALT(kc) (QK_LALT | (kc))
     48 #define LGUI(kc) (QK_LGUI | (kc))
     49 
     50 #define LOPT(kc) LALT(kc)
     51 #define LCMD(kc) LGUI(kc)
     52 #define LWIN(kc) LGUI(kc)
     53 
     54 #define C(kc) LCTL(kc)
     55 #define S(kc) LSFT(kc)
     56 #define A(kc) LALT(kc)
     57 #define G(kc) LGUI(kc)
     58 
     59 #define LCS(kc) (QK_LCTL | QK_LSFT | (kc))
     60 #define LCA(kc) (QK_LCTL | QK_LALT | (kc))
     61 #define LCG(kc) (QK_LCTL | QK_LGUI | (kc))
     62 #define LSA(kc) (QK_LSFT | QK_LALT | (kc))
     63 #define LSG(kc) (QK_LSFT | QK_LGUI | (kc))
     64 #define LAG(kc) (QK_LALT | QK_LGUI | (kc))
     65 #define LCSG(kc) (QK_LCTL | QK_LSFT | QK_LGUI | (kc))
     66 #define LCAG(kc) (QK_LCTL | QK_LALT | QK_LGUI | (kc))
     67 #define LSAG(kc) (QK_LSFT | QK_LALT | QK_LGUI | (kc))
     68 
     69 #define RCTL(kc) (QK_RCTL | (kc))
     70 #define RSFT(kc) (QK_RSFT | (kc))
     71 #define RALT(kc) (QK_RALT | (kc))
     72 #define RGUI(kc) (QK_RGUI | (kc))
     73 
     74 #define ALGR(kc) RALT(kc)
     75 #define ROPT(kc) RALT(kc)
     76 #define RCMD(kc) RGUI(kc)
     77 #define RWIN(kc) RGUI(kc)
     78 
     79 #define RCA(kc) (QK_RCTL | QK_RALT | (kc))
     80 #define RCS(kc) (QK_RCTL | QK_RSFT | (kc))
     81 #define RCG(kc) (QK_RCTL | QK_RGUI | (kc))
     82 #define RSA(kc) (QK_RSFT | QK_RALT | (kc))
     83 #define RSG(kc) (QK_RSFT | QK_RGUI | (kc))
     84 #define RAG(kc) (QK_RALT | QK_RGUI | (kc))
     85 #define RCSG(kc) (QK_RCTL | QK_RSFT | QK_RGUI | (kc))
     86 #define RCAG(kc) (QK_RCTL | QK_RALT | QK_RGUI | (kc))
     87 #define RSAG(kc) (QK_RSFT | QK_RALT | QK_RGUI | (kc))
     88 
     89 #define HYPR(kc) (QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI | (kc))
     90 #define MEH(kc) (QK_LCTL | QK_LSFT | QK_LALT | (kc))
     91 
     92 // GOTO layer - 32 layer max
     93 #define TO(layer) (QK_TO | ((layer) & 0x1F))
     94 #define QK_TO_GET_LAYER(kc) ((kc) & 0x1F)
     95 
     96 // Momentary switch layer - 32 layer max
     97 #define MO(layer) (QK_MOMENTARY | ((layer) & 0x1F))
     98 #define QK_MOMENTARY_GET_LAYER(kc) ((kc) & 0x1F)
     99 
    100 // Set default layer - 32 layer max
    101 #define DF(layer) (QK_DEF_LAYER | ((layer) & 0x1F))
    102 #define QK_DEF_LAYER_GET_LAYER(kc) ((kc) & 0x1F)
    103 
    104 // Set persistent default layer - 32 layer max
    105 #define PDF(layer) (QK_PERSISTENT_DEF_LAYER | ((layer) & 0x1F))
    106 #define QK_PERSISTENT_DEF_LAYER_GET_LAYER(kc) ((kc) & 0x1F)
    107 
    108 // Toggle to layer - 32 layer max
    109 #define TG(layer) (QK_TOGGLE_LAYER | ((layer) & 0x1F))
    110 #define QK_TOGGLE_LAYER_GET_LAYER(kc) ((kc) & 0x1F)
    111 
    112 // One-shot layer - 32 layer max
    113 #define OSL(layer) (QK_ONE_SHOT_LAYER | ((layer) & 0x1F))
    114 #define QK_ONE_SHOT_LAYER_GET_LAYER(kc) ((kc) & 0x1F)
    115 
    116 // L-ayer M-od: Momentary switch layer with modifiers active - 16 layer max
    117 #define LM(layer, mod) (QK_LAYER_MOD | (((layer) & 0xF) << 5) | ((mod) & 0x1F))
    118 #define QK_LAYER_MOD_GET_LAYER(kc) (((kc) >> 5) & 0xF)
    119 #define QK_LAYER_MOD_GET_MODS(kc) ((kc) & 0x1F)
    120 
    121 // One-shot mod
    122 #define OSM(mod) (QK_ONE_SHOT_MOD | ((mod) & 0x1F))
    123 #define QK_ONE_SHOT_MOD_GET_MODS(kc) ((kc) & 0x1F)
    124 
    125 #define OS_LCTL OSM(MOD_LCTL)
    126 #define OS_LSFT OSM(MOD_LSFT)
    127 #define OS_LALT OSM(MOD_LALT)
    128 #define OS_LGUI OSM(MOD_LGUI)
    129 
    130 #define OS_LCS OSM(MOD_LCTL | MOD_LSFT)
    131 #define OS_LCA OSM(MOD_LCTL | MOD_LALT)
    132 #define OS_LCG OSM(MOD_LCTL | MOD_LGUI)
    133 #define OS_LSA OSM(MOD_LSFT | MOD_LALT)
    134 #define OS_LSG OSM(MOD_LSFT | MOD_LGUI)
    135 #define OS_LAG OSM(MOD_LALT | MOD_LGUI)
    136 
    137 #define OS_LCSG OSM(MOD_LCTL | MOD_LSFT | MOD_LGUI)
    138 #define OS_LCAG OSM(MOD_LCTL | MOD_LALT | MOD_LGUI)
    139 #define OS_LSAG OSM(MOD_LSFT | MOD_LALT | MOD_LGUI)
    140 
    141 #define OS_RCTL OSM(MOD_RCTL)
    142 #define OS_RSFT OSM(MOD_RSFT)
    143 #define OS_RALT OSM(MOD_RALT)
    144 #define OS_RGUI OSM(MOD_RGUI)
    145 
    146 #define OS_RCS OSM(MOD_RCTL | MOD_RSFT)
    147 #define OS_RCA OSM(MOD_RCTL | MOD_RALT)
    148 #define OS_RCG OSM(MOD_RCTL | MOD_RGUI)
    149 #define OS_RSA OSM(MOD_RSFT | MOD_RALT)
    150 #define OS_RSG OSM(MOD_RSFT | MOD_RGUI)
    151 #define OS_RAG OSM(MOD_RALT | MOD_RGUI)
    152 
    153 #define OS_RCSG OSM(MOD_RCTL | MOD_RSFT | MOD_RGUI)
    154 #define OS_RCAG OSM(MOD_RCTL | MOD_RALT | MOD_RGUI)
    155 #define OS_RSAG OSM(MOD_RSFT | MOD_RALT | MOD_RGUI)
    156 
    157 #define OS_MEH OSM(MOD_LCTL | MOD_LSFT | MOD_LALT)
    158 #define OS_HYPR OSM(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI)
    159 
    160 // Layer tap-toggle - 32 layer max
    161 #define TT(layer) (QK_LAYER_TAP_TOGGLE | ((layer) & 0x1F))
    162 #define QK_LAYER_TAP_TOGGLE_GET_LAYER(kc) ((kc) & 0x1F)
    163 
    164 // L-ayer, T-ap - 256 keycode max, 16 layer max
    165 #define LT(layer, kc) (QK_LAYER_TAP | (((layer) & 0xF) << 8) | ((kc) & 0xFF))
    166 #define QK_LAYER_TAP_GET_LAYER(kc) (((kc) >> 8) & 0xF)
    167 #define QK_LAYER_TAP_GET_TAP_KEYCODE(kc) ((kc) & 0xFF)
    168 
    169 // M-od, T-ap - 256 keycode max
    170 #define MT(mod, kc) (QK_MOD_TAP | (((mod) & 0x1F) << 8) | ((kc) & 0xFF))
    171 #define QK_MOD_TAP_GET_MODS(kc) (((kc) >> 8) & 0x1F)
    172 #define QK_MOD_TAP_GET_TAP_KEYCODE(kc) ((kc) & 0xFF)
    173 
    174 // Mod-Tap shortcuts
    175 #define LCTL_T(kc) MT(MOD_LCTL, kc)
    176 #define LSFT_T(kc) MT(MOD_LSFT, kc)
    177 #define LALT_T(kc) MT(MOD_LALT, kc)
    178 #define LGUI_T(kc) MT(MOD_LGUI, kc)
    179 
    180 #define CTL_T(kc) LCTL_T(kc)
    181 #define SFT_T(kc) LSFT_T(kc)
    182 #define ALT_T(kc) LALT_T(kc)
    183 #define GUI_T(kc) LGUI_T(kc)
    184 
    185 #define LOPT_T(kc) LALT_T(kc)
    186 #define LCMD_T(kc) LGUI_T(kc)
    187 #define LWIN_T(kc) LGUI_T(kc)
    188 
    189 #define OPT_T(kc) LOPT_T(kc)
    190 #define CMD_T(kc) LCMD_T(kc)
    191 #define WIN_T(kc) LWIN_T(kc)
    192 
    193 #define LCS_T(kc) MT(MOD_LCTL | MOD_LSFT, kc)
    194 #define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc)
    195 #define LCG_T(kc) MT(MOD_LCTL | MOD_LGUI, kc)
    196 #define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc)
    197 #define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc)
    198 #define LAG_T(kc) MT(MOD_LALT | MOD_LGUI, kc)
    199 #define LCSG_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LGUI, kc)
    200 #define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc)
    201 #define LSAG_T(kc) MT(MOD_LSFT | MOD_LALT | MOD_LGUI, kc)
    202 
    203 #define RCTL_T(kc) MT(MOD_RCTL, kc)
    204 #define RSFT_T(kc) MT(MOD_RSFT, kc)
    205 #define RALT_T(kc) MT(MOD_RALT, kc)
    206 #define RGUI_T(kc) MT(MOD_RGUI, kc)
    207 
    208 #define ROPT_T(kc) RALT_T(kc)
    209 #define ALGR_T(kc) RALT_T(kc)
    210 #define RCMD_T(kc) RGUI_T(kc)
    211 #define RWIN_T(kc) RGUI_T(kc)
    212 
    213 #define RCS_T(kc) MT(MOD_RCTL | MOD_RSFT, kc)
    214 #define RCA_T(kc) MT(MOD_RCTL | MOD_RALT, kc)
    215 #define RCG_T(kc) MT(MOD_RCTL | MOD_RGUI, kc)
    216 #define RSA_T(kc) MT(MOD_RSFT | MOD_RALT, kc)
    217 #define RSG_T(kc) MT(MOD_RSFT | MOD_RGUI, kc)
    218 #define RAG_T(kc) MT(MOD_RALT | MOD_RGUI, kc)
    219 #define RCSG_T(kc) MT(MOD_RCTL | MOD_RSFT | MOD_RGUI, kc)
    220 #define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc)
    221 #define RSAG_T(kc) MT(MOD_RSFT | MOD_RALT | MOD_RGUI, kc)
    222 
    223 #define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc)
    224 #define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc)
    225 
    226 // Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
    227 #define KC_HYPR HYPR(KC_NO)
    228 #define KC_MEH MEH(KC_NO)
    229 
    230 // Unicode aliases
    231 // UNICODE_ENABLE - Allows Unicode input up to 0x7FFF
    232 #define UC(c) (QK_UNICODE | (c))
    233 #define QK_UNICODE_GET_CODE_POINT(kc) ((kc) & 0x7FFF)
    234 
    235 // UNICODEMAP_ENABLE - Allows Unicode input up to 0x10FFFF, requires unicode_map
    236 #define UM(i) (QK_UNICODEMAP | ((i) & 0x3FFF))
    237 #define QK_UNICODEMAP_GET_INDEX(kc) ((kc) & 0x3FFF)
    238 
    239 #define UP(i, j) (QK_UNICODEMAP_PAIR | ((i) & 0x7F) | (((j) & 0x7F) << 7)) // 127 max i and j
    240 #define QK_UNICODEMAP_PAIR_GET_UNSHIFTED_INDEX(kc) ((kc) & 0x7F)
    241 #define QK_UNICODEMAP_PAIR_GET_SHIFTED_INDEX(kc) (((kc) >> 7) & 0x7F)
    242 
    243 // Swap Hands
    244 #define SH_T(kc) (QK_SWAP_HANDS | ((kc) & 0xFF))
    245 #define QK_SWAP_HANDS_GET_TAP_KEYCODE(kc) ((kc) & 0xFF)
    246 
    247 // Tap dance
    248 #define TD(i) (QK_TAP_DANCE | ((i) & 0xFF))
    249 #define QK_TAP_DANCE_GET_INDEX(kc) ((kc) & 0xFF)
    250 
    251 // MIDI aliases
    252 #define MIDI_TONE_MIN QK_MIDI_NOTE_C_0
    253 #define MIDI_TONE_MAX QK_MIDI_NOTE_B_5
    254 #define MIDI_OCTAVE_MIN QK_MIDI_OCTAVE_N2
    255 #define MIDI_OCTAVE_MAX QK_MIDI_OCTAVE_7
    256 #define MIDI_TRANSPOSE_MIN QK_MIDI_TRANSPOSE_N6
    257 #define MIDI_TRANSPOSE_MAX QK_MIDI_TRANSPOSE_6
    258 #define MIDI_VELOCITY_MIN QK_MIDI_VELOCITY_0
    259 #define MIDI_VELOCITY_MAX QK_MIDI_VELOCITY_10
    260 #define MIDI_CHANNEL_MIN QK_MIDI_CHANNEL_1
    261 #define MIDI_CHANNEL_MAX QK_MIDI_CHANNEL_16
    262 
    263 // TODO: somehow migrate sequencer to DD?
    264 #include "sequencer.h"
    265 
    266 #define SEQUENCER_STEP_MIN (QK_SEQUENCER + 0xF)
    267 #define SEQUENCER_STEP_MAX (SEQUENCER_STEP_MIN + SEQUENCER_STEPS)
    268 
    269 #define SEQUENCER_RESOLUTION_MIN (SEQUENCER_STEP_MAX + 1)
    270 #define SEQUENCER_RESOLUTION_MAX (SEQUENCER_RESOLUTION_MIN + SEQUENCER_RESOLUTIONS)
    271 
    272 #define SEQUENCER_TRACK_MIN (SEQUENCER_RESOLUTION_MAX + 1)
    273 #define SEQUENCER_TRACK_MAX (SEQUENCER_TRACK_MIN + SEQUENCER_TRACKS)
    274 
    275 #define SQ_S(n) (n < SEQUENCER_STEPS ? SEQUENCER_STEP_MIN + n : KC_NO)
    276 #define SQ_R(n) (n < SEQUENCER_RESOLUTIONS ? SEQUENCER_RESOLUTION_MIN + n : KC_NO)
    277 #define SQ_T(n) (n < SEQUENCER_TRACKS ? SEQUENCER_TRACK_MIN + n : KC_NO)
    278 
    279 #include "quantum_keycodes_legacy.h"