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"