7.5 KiB
Quantum Keycodes
Something important to realise with keycodes is that they are all
numbers between 0x0 and 0xFFFF - even though
they may look like functions, words, or phrases, they are all shortcuts
to some number. This allows us to define all of what they do in
different places, and store keymaps in a relatively small place
(arrays). If you try to “call” a keycode by placing it somewhere besides
a keymap, it may compile, but it won’t do anything useful.
All keycodes on this page have a value above 0xFF
(values less are considered the basic
keycodes) and won’t work with any of the mod/layer-tap keys listed
at the bottom.
SAFE_RANGEis always the last keycode in the quantum list, and where custom lists can beginRESETputs the keyboard into DFU mode for flashingDEBUGtoggles debug modeShortcuts for bootmagic options (work when bootmagic is off)
MAGIC_SWAP_CONTROL_CAPSLOCKMAGIC_CAPSLOCK_TO_CONTROLMAGIC_SWAP_LALT_LGUIMAGIC_SWAP_RALT_RGUIMAGIC_NO_GUIMAGIC_SWAP_GRAVE_ESCMAGIC_SWAP_BACKSLASH_BACKSPACEMAGIC_HOST_NKROMAGIC_SWAP_ALT_GUI/AG_SWAPMAGIC_UNSWAP_CONTROL_CAPSLOCKMAGIC_UNCAPSLOCK_TO_CONTROLMAGIC_UNSWAP_LALT_LGUIMAGIC_UNSWAP_RALT_RGUIMAGIC_UNNO_GUIMAGIC_UNSWAP_GRAVE_ESCMAGIC_UNSWAP_BACKSLASH_BACKSPACEMAGIC_UNHOST_NKROMAGIC_UNSWAP_ALT_GUI/AG_NORMMAGIC_TOGGLE_NKRO
KC_GESC/GRAVE_ESCacts as escape when pressed normally but when pressed with a mod will send a~KC_LSPOleft shift when held, open paranthesis when tappedKC_RSPCright shift when held, close paranthesis when tappedKC_LEADthe leader keyFUNC(n)/F(n)to callfn_actionnM(n)to call macro nMACROTAP(n)to macro-tap n idk FIXME
Audio
#ifdef AUDIO_ENABLE
AU_ON,
AU_OFF,
AU_TOG,
#ifdef FAUXCLICKY_ENABLE
FC_ON,
FC_OFF,
FC_TOG,
#endif
// Music mode on/off/toggle
MU_ON,
MU_OFF,
MU_TOG,
// Music voice iterate
MUV_IN,
MUV_DE,
#endifMidi
#if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_BASIC)) MI_ON, // send midi notes when music mode is enabled MI_OFF, // don’t send midi notes when music mode is enabled #endif
MIDI_TONE_MIN, MIDI_TONE_MAX
MI_C = MIDI_TONE_MIN, MI_Cs, MI_Db = MI_Cs, MI_D, MI_Ds, MI_Eb = MI_Ds, MI_E, MI_F, MI_Fs, MI_Gb = MI_Fs, MI_G, MI_Gs, MI_Ab = MI_Gs, MI_A, MI_As, MI_Bb = MI_As, MI_B,
MIDI_TONE_KEYCODE_OCTAVES > 1
where x = 1-5: MI_C_x, MI_Cs_x, MI_Db_x = MI_Cs_x, MI_D_x, MI_Ds_x, MI_Eb_x = MI_Ds_x, MI_E_x, MI_F_x, MI_Fs_x, MI_Gb_x = MI_Fs_x, MI_G_x, MI_Gs_x, MI_Ab_x = MI_Gs_x, MI_A_x, MI_As_x, MI_Bb_x = MI_As_x, MI_B_x,
MI_OCT_Nx 1-2 MI_OCT_x 0-7 MIDI_OCTAVE_MIN = MI_OCT_N2, MIDI_OCTAVE_MAX = MI_OCT_7, MI_OCTD, // octave down MI_OCTU, // octave up
MI_TRNS_Nx 1-6 MI_TRNS_x 0-6 MIDI_TRANSPOSE_MIN = MI_TRNS_N6, MIDI_TRANSPOSE_MAX = MI_TRNS_6, MI_TRNSD, // transpose down MI_TRNSU, // transpose up
MI_VEL_x 1-10 MIDI_VELOCITY_MIN = MI_VEL_1, MIDI_VELOCITY_MAX = MI_VEL_10, MI_VELD, // velocity down MI_VELU, // velocity up
MI_CHx 1-16 MIDI_CHANNEL_MIN = MI_CH1 MIDI_CHANNEL_MAX = MI_CH16, MI_CHD, // previous channel MI_CHU, // next channel
MI_ALLOFF, // all notes off
MI_SUS, // sustain MI_PORT, // portamento MI_SOST, // sostenuto MI_SOFT, // soft pedal MI_LEG, // legato
MI_MOD, // modulation MI_MODSD, // decrease modulation speed MI_MODSU, // increase modulation speed #endif // MIDI_ADVANCED
Backlight
BL_xwhere x = 0-15BL_ON = BL_9BL_OFF = BL_0BL_DECBL_INCBL_TOGGBL_STEP
RGB WS2818 LEDs
RGB_TOGtoggle on/offRGB_MODcycle between modesRGB_HUIhue increaseRGB_HUDhue decreaseRGB_SAIsaturation increaseRGB_SADsaturation decreaseRGB_VAIvalue increaseRGB_VADvalue decrease
Thermal Printer (experimental)
PRINT_ONPRINT_OFF
Keyboard output selection
OUT_AUTOauto modeOUT_USBusb onlyOUT_BTbluetooth (whenBLUETOOTH_ENABLE)
Modifiers
KC_HYPRLCTL + LSFT + LALT + LGUI -MOD_HYPRis the bit versionKC_MEHLCTL + LSFT + LALT -MOD_MEHis the bit version
Modifiers with keys
LCTL(kc)LCTL + kcLSFT(kc)/S(kc)LSFT + kcLALT(kc)LALT + kcLGUI(kc)LGUI + kcRCTL(kc)RCTL + kcRSFT(kc)RSFT + kcRALT(kc)RALT + kcRGUI(kc)RGUI + kcHYPR(kc)LCTL + LSFT + LALT + LGUI + kcMEH(kc)LCTL + LSFT + LALT + kcLCAG(kc)LCTL + LALT + LGUI + kcALTG(kc)RCTL + RALT + kcSCMD(kc)/SWIN(kc)LGUI + LSFT + kcLCA(kc)LCTL + LALT + kcOSM(mod)use mod for one keypress - use mod bits with this
Mod bits are the 4-letter part of the keycode prefixed with
MOD_, e.g.MOD_LCTL
Mod-tap keys
These keycodes will press the mod(s) when held, and the key when tapped. They only work with basic keycodes.
CTL_T(kc)/LCTL_T(kc)LCTL when held, kc when tappedRCTL_T(kc)RCTL when held, kc when tappedSFT_T(kc)/LSFT_T(kc)LSFT when held, kc when tappedRSFT_T(kc)RSFT when held, kc when tappedALT_T(kc)/LALT_T(kc)LALT when held, kc when tappedRALT_T(kc)/ALGR_T(kc)RALT when held, kc when tappedGUI_T(kc)/LGUI_T(kc)LGUI when held, kc when tappedRGUI_T(kc)RGUI when held, kc when tappedC_S_T(kc)LCTL + LSFT when held, kc when tappedMEH_T(kc)LCTL + LSFT + LALT when held, kc when tappedLCAG_T(kc)LCTL + LALT + LGUI when held, kc when tappedRCAG_T(kc)RCTL + RALT + RGUI when held, kc when tappedALL_T(kc)LCTL + LSFT + LALT + LGUI when held, kc tapped more infoSCMD_T(kc)/SWIN_T(kc)LGUI + LSFT when held, kc when tappedLCA_T(kc)LCTL + LALT when held, kc when tapped
Shifted symbols
It’s important to remember that all of the keycodes also send a left shift - this may cause unintended actions if unaccounted for. The 4-letter code is preferred in most situations.
KC_TILD/KC_TILDEtilde~KC_EXLM/KC_EXCLAIMexclamation mark!KC_ATat sign@KC_HASHhash sign#KC_DLR/KC_DOLLARdollar sign$KC_PERC/KC_PERCENTpercent sign%KC_CIRC/KC_CIRCUMFLEXcircumflex^KC_AMPR/KC_AMPERSANDampersand&KC_ASTR/KC_ASTERISKasterisk*KC_LPRN/KC_LEFT_PARENleft parenthesis(KC_RPRN/KC_RIGHT_PARENright parenthesis)KC_UNDS/KC_UNDERSCOREunderscore_KC_PLUSplus sign+KC_LCBR/KC_LEFT_CURLY_BRACEleft curly brace{KC_RCBR/KC_RIGHT_CURLY_BRACEright curly brace}KC_LT/KC_LABK/KC_LEFT_ANGLE_BRACKETleft angle bracket<KC_GT/KC_RABK/KC_RIGHT_ANGLE_BRACKETright angle bracket>KC_COLN/KC_COLONcolon:KC_PIPEpipe|KC_QUES/KC_QUESTIONquestion mark?KC_DQT/KC_DOUBLE_QUOTE/KC_DQUOdouble quote"
Layer adjustments
LT(layer, kc)turn on layer (0-15) when held, kc (basic keycodes) when tappedTO(layer)turn on layer when depressedMO(layer)momentarily turn on layer when depressed (requiresKC_TRNSon destination layer)DF(layer)sets the base (default) layerTG(layer)toggle layer on/offOSL(layer)switch to layer for one keycodeTT(layer)tap toggle? idk FIXME
Unicode
UNICODE(n)/UC(n)ifUNICODE_ENABLE, this will send characters up to0x7FFFX(n)ifUNICODEMAP_ENABLE, also sends unicode via a different method