2017-03-28 15:20:36 -07:00
/* Copyright 2016-2017 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/>.
*/
2020-12-26 15:53:12 +11:00
# pragma once
2016-12-29 18:28:48 +11:00
2022-11-05 10:30:09 +00:00
// Pull in dd keycodes to maintain header compatibility
# include "keycodes.h"
2020-11-28 12:02:18 -08:00
2022-11-05 10:30:09 +00:00
// US ANSI shifted keycode aliases
# include "keymap_us.h"
2020-11-28 12:02:18 -08:00
2022-11-05 10:30:09 +00:00
// TODO: sub-ranges?
// clang-format off
# define QK_LCTL 0x0100
# define QK_LSFT 0x0200
# define QK_LALT 0x0400
# define QK_LGUI 0x0800
# define QK_RMODS_MIN 0x1000
# define QK_RCTL 0x1100
# define QK_RSFT 0x1200
# define QK_RALT 0x1400
# define QK_RGUI 0x1800
2023-02-23 09:19:00 +11:00
2023-02-22 22:49:07 +00:00
# define SAFE_RANGE QK_USER
2022-11-05 10:30:09 +00:00
// clang-format on
2016-12-29 18:28:48 +11:00
2022-11-07 00:39:05 +03:00
// Generic decoding for the whole QK_MODS range
# define QK_MODS_GET_MODS(kc) (((kc) >> 8) & 0x1F)
# define QK_MODS_GET_BASIC_KEYCODE(kc) ((kc)&0xFF)
2021-05-29 14:38:50 -07:00
// Keycode modifiers & aliases
2018-08-30 11:05:02 +10:00
# define LCTL(kc) (QK_LCTL | (kc))
# define LSFT(kc) (QK_LSFT | (kc))
# define LALT(kc) (QK_LALT | (kc))
# define LGUI(kc) (QK_LGUI | (kc))
2020-04-12 20:37:55 +02:00
# define LOPT(kc) LALT(kc)
2018-03-15 13:23:33 +11:00
# define LCMD(kc) LGUI(kc)
# define LWIN(kc) LGUI(kc)
2018-08-30 11:05:02 +10:00
# define RCTL(kc) (QK_RCTL | (kc))
# define RSFT(kc) (QK_RSFT | (kc))
# define RALT(kc) (QK_RALT | (kc))
# define RGUI(kc) (QK_RGUI | (kc))
2020-04-12 20:37:55 +02:00
# define ALGR(kc) RALT(kc)
# define ROPT(kc) RALT(kc)
2018-03-15 13:23:33 +11:00
# define RCMD(kc) RGUI(kc)
# define RWIN(kc) RGUI(kc)
2016-12-29 18:28:48 +11:00
2018-08-30 11:05:02 +10:00
# define HYPR(kc) (QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI | (kc))
2019-08-30 11:19:03 -07:00
# define MEH(kc) (QK_LCTL | QK_LSFT | QK_LALT | (kc))
2018-08-30 11:05:02 +10:00
# define LCAG(kc) (QK_LCTL | QK_LALT | QK_LGUI | (kc))
2021-06-20 10:14:19 +08:00
# define LSG(kc) (QK_LSFT | QK_LGUI | (kc))
# define SGUI(kc) LSG(kc)
# define SCMD(kc) LSG(kc)
# define SWIN(kc) LSG(kc)
# define LAG(kc) (QK_LALT | QK_LGUI | (kc))
# define RSG(kc) (QK_RSFT | QK_RGUI | (kc))
# define RAG(kc) (QK_RALT | QK_RGUI | (kc))
2019-08-30 11:19:03 -07:00
# define LCA(kc) (QK_LCTL | QK_LALT | (kc))
2020-08-17 05:08:15 -04:00
# define LSA(kc) (QK_LSFT | QK_LALT | (kc))
# define RSA(kc) (QK_RSFT | QK_RALT | (kc))
# define RCS(kc) (QK_RCTL | QK_RSFT | (kc))
# define SAGR(kc) RSA(kc)
2016-12-29 18:28:48 +11:00
2021-05-29 14:38:50 -07:00
// Modified keycode aliases
2019-01-26 08:12:48 +11:00
# define C(kc) LCTL(kc)
2016-12-29 18:28:48 +11:00
# define S(kc) LSFT(kc)
2019-01-26 08:12:48 +11:00
# define A(kc) LALT(kc)
# define G(kc) LGUI(kc)
2016-12-29 18:28:48 +11:00
2022-11-05 10:30:09 +00:00
// GOTO layer - 32 layer max
# define TO(layer) (QK_TO | ((layer)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_TO_GET_LAYER(kc) ((kc)&0x1F)
2022-11-05 10:30:09 +00:00
// Momentary switch layer - 32 layer max
# define MO(layer) (QK_MOMENTARY | ((layer)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_MOMENTARY_GET_LAYER(kc) ((kc)&0x1F)
2022-11-05 10:30:09 +00:00
// Set default layer - 32 layer max
# define DF(layer) (QK_DEF_LAYER | ((layer)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_DEF_LAYER_GET_LAYER(kc) ((kc)&0x1F)
2022-11-05 10:30:09 +00:00
// Toggle to layer - 32 layer max
# define TG(layer) (QK_TOGGLE_LAYER | ((layer)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_TOGGLE_LAYER_GET_LAYER(kc) ((kc)&0x1F)
2022-11-05 10:30:09 +00:00
// One-shot layer - 32 layer max
# define OSL(layer) (QK_ONE_SHOT_LAYER | ((layer)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_ONE_SHOT_LAYER_GET_LAYER(kc) ((kc)&0x1F)
2022-11-05 10:30:09 +00:00
// L-ayer M-od: Momentary switch layer with modifiers active - 16 layer max
# define LM(layer, mod) (QK_LAYER_MOD | (((layer)&0xF) << 5) | ((mod)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_LAYER_MOD_GET_LAYER(kc) (((kc) >> 5) & 0xF)
# define QK_LAYER_MOD_GET_MODS(kc) ((kc)&0x1F)
2018-03-20 22:59:54 -04:00
2016-12-29 18:28:48 +11:00
// One-shot mod
2022-11-05 10:30:09 +00:00
# define OSM(mod) (QK_ONE_SHOT_MOD | ((mod)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_ONE_SHOT_MOD_GET_MODS(kc) ((kc)&0x1F)
2016-12-29 18:28:48 +11:00
2022-11-05 10:30:09 +00:00
// Layer tap-toggle - 32 layer max
# define TT(layer) (QK_LAYER_TAP_TOGGLE | ((layer)&0x1F))
2022-11-07 00:39:05 +03:00
# define QK_LAYER_TAP_TOGGLE_GET_LAYER(kc) ((kc)&0x1F)
2017-02-15 11:25:33 -05:00
2021-05-29 14:38:50 -07:00
// L-ayer, T-ap - 256 keycode max, 16 layer max
# define LT(layer, kc) (QK_LAYER_TAP | (((layer)&0xF) << 8) | ((kc)&0xFF))
2022-11-07 00:39:05 +03:00
# define QK_LAYER_TAP_GET_LAYER(kc) (((kc) >> 8) & 0xF)
# define QK_LAYER_TAP_GET_TAP_KEYCODE(kc) ((kc)&0xFF)
2021-05-29 14:38:50 -07:00
2016-12-29 18:28:48 +11:00
// M-od, T-ap - 256 keycode max
2019-08-30 11:19:03 -07:00
# define MT(mod, kc) (QK_MOD_TAP | (((mod)&0x1F) << 8) | ((kc)&0xFF))
2022-11-07 00:39:05 +03:00
# define QK_MOD_TAP_GET_MODS(kc) (((kc) >> 8) & 0x1F)
# define QK_MOD_TAP_GET_TAP_KEYCODE(kc) ((kc)&0xFF)
2017-02-10 06:06:59 +07:00
# define LCTL_T(kc) MT(MOD_LCTL, kc)
# define RCTL_T(kc) MT(MOD_RCTL, kc)
2019-08-30 11:19:03 -07:00
# define CTL_T(kc) LCTL_T(kc)
2017-02-10 06:06:59 +07:00
# define LSFT_T(kc) MT(MOD_LSFT, kc)
# define RSFT_T(kc) MT(MOD_RSFT, kc)
2019-08-30 11:19:03 -07:00
# define SFT_T(kc) LSFT_T(kc)
2017-02-10 06:06:59 +07:00
# define LALT_T(kc) MT(MOD_LALT, kc)
# define RALT_T(kc) MT(MOD_RALT, kc)
2020-04-12 20:37:55 +02:00
# define LOPT_T(kc) LALT_T(kc)
# define ROPT_T(kc) RALT_T(kc)
2018-12-12 19:17:19 +01:00
# define ALGR_T(kc) RALT_T(kc)
2020-04-12 20:37:55 +02:00
# define ALT_T(kc) LALT_T(kc)
# define OPT_T(kc) LOPT_T(kc)
2017-02-10 06:06:59 +07:00
# define LGUI_T(kc) MT(MOD_LGUI, kc)
2019-01-09 11:22:09 +11:00
# define RGUI_T(kc) MT(MOD_RGUI, kc)
2018-03-15 13:23:33 +11:00
# define LCMD_T(kc) LGUI_T(kc)
# define LWIN_T(kc) LGUI_T(kc)
# define RCMD_T(kc) RGUI_T(kc)
# define RWIN_T(kc) RGUI_T(kc)
2019-08-30 11:19:03 -07:00
# define GUI_T(kc) LGUI_T(kc)
# define CMD_T(kc) LCMD_T(kc)
# define WIN_T(kc) LWIN_T(kc)
2022-02-12 10:29:31 -08:00
# define C_S_T(kc) MT(MOD_LCTL | MOD_LSFT, kc) // Left Control + Shift e.g. for gnome-terminal
# define MEH_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT, kc) // Meh is a less hyper version of the Hyper key -- doesn't include GUI, so just Left Control + Shift + Alt
# define LCAG_T(kc) MT(MOD_LCTL | MOD_LALT | MOD_LGUI, kc) // Left Control + Alt + GUI
# define RCAG_T(kc) MT(MOD_RCTL | MOD_RALT | MOD_RGUI, kc) // Right Control + Alt + GUI
# define HYPR_T(kc) MT(MOD_LCTL | MOD_LSFT | MOD_LALT | MOD_LGUI, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
# define LSG_T(kc) MT(MOD_LSFT | MOD_LGUI, kc) // Left Shift + GUI
2021-06-20 10:14:19 +08:00
# define SGUI_T(kc) LSG_T(kc)
# define SCMD_T(kc) LSG_T(kc)
# define SWIN_T(kc) LSG_T(kc)
2022-02-12 10:29:31 -08:00
# define LAG_T(kc) MT(MOD_LALT | MOD_LGUI, kc) // Left Alt + GUI
# define RSG_T(kc) MT(MOD_RSFT | MOD_RGUI, kc) // Right Shift + GUI
# define RAG_T(kc) MT(MOD_RALT | MOD_RGUI, kc) // Right Alt + GUI
# define LCA_T(kc) MT(MOD_LCTL | MOD_LALT, kc) // Left Control + Alt
# define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc) // Left Shift + Alt
# define RSA_T(kc) MT(MOD_RSFT | MOD_RALT, kc) // Right Shift + Alt
# define RCS_T(kc) MT(MOD_RCTL | MOD_RSFT, kc) // Right Control + Shift
2020-08-17 05:08:15 -04:00
# define SAGR_T(kc) RSA_T(kc)
2019-08-30 11:19:03 -07:00
# define ALL_T(kc) HYPR_T(kc)
2016-12-29 18:28:48 +11:00
// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
# define KC_HYPR HYPR(KC_NO)
2019-08-30 11:19:03 -07:00
# define KC_MEH MEH(KC_NO)
2016-12-29 18:28:48 +11:00
2021-05-29 14:38:50 -07:00
// Unicode aliases
2021-03-06 19:50:01 +11:00
// UNICODE_ENABLE - Allows Unicode input up to 0x7FFF
# define UC(c) (QK_UNICODE | (c))
2022-11-07 00:39:05 +03:00
# define QK_UNICODE_GET_CODE_POINT(kc) ((kc)&0x7FFF)
2021-03-06 19:50:01 +11:00
// UNICODEMAP_ENABLE - Allows Unicode input up to 0x10FFFF, requires unicode_map
2023-06-02 02:25:08 +10:00
# define UM(i) (QK_UNICODEMAP | ((i)&0x3FFF))
2022-11-07 00:39:05 +03:00
# define QK_UNICODEMAP_GET_INDEX(kc) ((kc)&0x3FFF)
2023-06-02 02:25:08 +10:00
# define UP(i, j) (QK_UNICODEMAP_PAIR | ((i)&0x7F) | (((j)&0x7F) << 7)) // 127 max i and j
2022-11-07 00:39:05 +03:00
# define QK_UNICODEMAP_PAIR_GET_UNSHIFTED_INDEX(kc) ((kc)&0x7F)
# define QK_UNICODEMAP_PAIR_GET_SHIFTED_INDEX(kc) (((kc) >> 7) & 0x7F)
2016-12-29 18:28:48 +11:00
2021-05-29 14:38:50 -07:00
// Swap Hands
2022-11-07 00:39:05 +03:00
# define SH_T(kc) (QK_SWAP_HANDS | ((kc)&0xFF))
# define QK_SWAP_HANDS_GET_TAP_KEYCODE(kc) ((kc)&0xFF)
2018-03-11 16:53:35 -07:00
2023-12-24 06:52:41 +00:00
// Tap dance
# define TD(i) (QK_TAP_DANCE | ((i)&0xFF))
# define QK_TAP_DANCE_GET_INDEX(kc) ((kc)&0xFF)
2021-05-29 14:38:50 -07:00
// MIDI aliases
2022-11-07 13:26:15 +11:00
# define MIDI_TONE_MIN QK_MIDI_NOTE_C_0
# define MIDI_TONE_MAX QK_MIDI_NOTE_B_5
# define MIDI_OCTAVE_MIN QK_MIDI_OCTAVE_N2
# define MIDI_OCTAVE_MAX QK_MIDI_OCTAVE_7
# define MIDI_TRANSPOSE_MIN QK_MIDI_TRANSPOSE_N6
# define MIDI_TRANSPOSE_MAX QK_MIDI_TRANSPOSE_6
# define MIDI_VELOCITY_MIN QK_MIDI_VELOCITY_0
# define MIDI_VELOCITY_MAX QK_MIDI_VELOCITY_10
# define MIDI_CHANNEL_MIN QK_MIDI_CHANNEL_1
# define MIDI_CHANNEL_MAX QK_MIDI_CHANNEL_16
2021-05-29 14:38:50 -07:00
2022-11-05 10:30:09 +00:00
// TODO: somehow migrate sequencer to DD?
# include "sequencer.h"
# define SEQUENCER_STEP_MIN (QK_SEQUENCER + 0xF)
# define SEQUENCER_STEP_MAX (SEQUENCER_STEP_MIN + SEQUENCER_STEPS)
# define SEQUENCER_RESOLUTION_MIN (SEQUENCER_STEP_MAX + 1)
# define SEQUENCER_RESOLUTION_MAX (SEQUENCER_RESOLUTION_MIN + SEQUENCER_RESOLUTIONS)
# define SEQUENCER_TRACK_MIN (SEQUENCER_RESOLUTION_MAX + 1)
# define SEQUENCER_TRACK_MAX (SEQUENCER_TRACK_MIN + SEQUENCER_TRACKS)
# define SQ_S(n) (n < SEQUENCER_STEPS ? SEQUENCER_STEP_MIN + n : KC_NO)
# define SQ_R(n) (n < SEQUENCER_RESOLUTIONS ? SEQUENCER_RESOLUTION_MIN + n : KC_NO)
# define SQ_T(n) (n < SEQUENCER_TRACKS ? SEQUENCER_TRACK_MIN + n : KC_NO)
2022-10-25 01:50:33 +11:00
2022-01-22 14:34:15 +11:00
# include "quantum_keycodes_legacy.h"