nazo6 noteblog

QMKキーIDとアクションのすべて

作成:2024/08/06

更新:2024/08/06

この記事は、Zennにも投稿しています。

qmk_firmware/quantum/keycodes.h at master · qmk/qmk_firmware

Open-source keyboard firmware for Atmel AVR and Arm USB families - qmk/qmk_firmware

github.com

にあるQMKのキーコードのアクションごとの範囲をまとめました。ほぼ全てのQMKのアクションを網羅しているはずです。

範囲一覧

QMKでは2バイトの値でほとんど全てのキーマップを表しており、
  • 基本のキーコード: 8ビット
  • Modifier(ctrlなど): 5ビット
  • レイヤ: 5ビット
    のいずれかと余ったビットから成るキーマップの種類を表す固定ビットで構成されています。
これら2バイトの値によりキーコードが表現され、全てのキーコードは

Keycodes Overview | QMK Firmware

docs.qmk.fm

より確認できます。
以下では各キーマップの種類とその説明、そしてアドレス範囲及びそのデータ構造を記しています。このデータ構造を元に各キーコードからデータを求める実際の計算は

qmk_firmware/quantum/quantum_keycodes.h at master · qmk/qmk_firmware

Open-source keyboard firmware for Atmel AVR and Arm USB families - qmk/qmk_firmware

github.com

にあります。

凡例

項目内容
機能名QMKの機能名です。正式な名前が見つからなかったら適当なものをつけています。
キーマップマクロキーマップを作成する際の該当するマクロや定数の名前です。
説明その機能の説明です。
URL参考URLです。
↓上位ビット
↓下位ビット
← 2byte →
[ 8bit ][ 8bit ]
00000000 <-- 8bit
^^^^^^^^ <-- Keycode 8bit
↑各キーコードで各ビットが何を表しているかの表示です。

QK_BASIC (0x0000-0x00FF)

項目内容
機能名特になし
キーマップマクロKC_で始まる物
説明下のKeycodeの項目を参照
URLhttps://docs.qmk.fm/keycodes_basic
[ 8bit ][ 8bit ]
00000000 <-- 8bit
^^^^^^^^ <-- Keycode 8bit

QK_MODS (0x0100-0x1FFF)

項目内容
機能名Modifier
キーマップマクロLCTL(kc),LSFT(kc)など
説明Modとキー同時押し。Modのデコード方法については下のModifierの項目を参照
URLhttps://docs.qmk.fm/feature_advanced_keycodes
[ 8bit ][ 8bit ]
000 <-- 3bit
^^^^^ <-- Modifier 5bit
^^^^^^^^ <-- Keycode 8bit
modifierのデコード方法は下部を参照。

QK_MOD_TAP (0x2000-0x3FFF)

項目内容
機能名Mod-Tap
キーマップマクロMT(mod, kc)
説明Tapでキー,HoldでMod。
URLhttps://docs.qmk.fm/mod_tap
[ 8bit ][ 8bit ]
001 <-- 3bit
^^^^^ <-- Modifier 5bit
^^^^^^^^ <-- Keycode 8bit

QK_LAYER_TAP (0x4000-0x4FFF)

項目内容
機能名Layer-Tap
キーマップマクロLT(layer, kc)
説明Tapでキー,HoldでLayer。他のレイヤ関連キーは5bitつまり32レイヤまでいけるがこれは4bitなので16レイヤまでしか指定できない。
URLhttps://docs.qmk.fm/feature_layers
[ 8bit ][ 8bit ]
0100 <-- 4bit
^^^^ <-- Layer 4bit
^^^^^^^^ <-- Keycode 8bit

QK_LAYER_MOD (0x5000-0x51FF)

項目内容
機能名Layer-Mod
キーマップマクロLM(layer, mod)
説明Hold時にMOとmod送信を同時にやる。これも16レイヤまで。
URLhttps://docs.qmk.fm/feature_layers
[ 8bit ][ 8bit ]
0101000 <-- 7bit
^^^^ <-- Layer 4bit
^^^^^ <-- Modifier 5bit

QK_TO (0x5200-0x521F)

項目内容
機能名TO
キーマップマクロTO(n)
説明このレイヤを有効化して他のレイヤを無効にする
URLhttps://docs.qmk.fm/feature_layers
[ 8bit ][ 8bit ]
01010010000 <-- 11bit
^^^^^ <-- Layer 5bit

QK_MOMENTARY (0x5220-0x523F)

項目内容
機能名Momentary layer
キーマップマクロMO(n)
説明押してる間だけレイヤ有効化
URLhttps://docs.qmk.fm/feature_layers
[ 8bit ][ 8bit ]
01010010001 <-- 11bit
^^^^^ <-- Layer 5bit

QK_DEF_LAYER (0x5240-0x525F)

項目内容
機能名Default layer
キーマップマクロDEF(n)
説明デフォルトレイヤ設定
URLhttps://docs.qmk.fm/feature_layers
[ 8bit ][ 8bit ]
01010010010 <-- 11bit
^^^^^ <-- Layer 5bit

QK_TOGGLE_LAYER (0x5260-0x527F)

項目内容
機能名Toggle layer
キーマップマクロTG(n)
説明押下でレイヤの有効無効切り替え
URLhttps://docs.qmk.fm/feature_layers
[ 8bit ][ 8bit ]
01010010011 <-- 11bit
^^^^^ <-- Layer 5bit

QK_ONE_SHOT_LAYER (0x5280-0x529F)

項目内容
機能名One shot layer
キーマップマクロOSL(n)
説明次のキー押下時にこのレイヤを使用
URLhttps://docs.qmk.fm/one_shot_keys
[ 8bit ][ 8bit ]
01010010100 <-- 11bit
^^^^^ <-- Layer 5bit

QK_ONE_SHOT_MOD (0x52A0-0x52BF)

項目内容
機能名One shot mod
キーマップマクロOSM(n)
説明次のキー押下時にこのModを送信
URLhttps://docs.qmk.fm/one_shot_keys
[ 8bit ][ 8bit ]
01010010101 <-- 11bit
^^^^^ <-- Modifier 5bit

QK_LAYER_TAP_TOGGLE (0x52C0-0x52DF)

項目内容
機能名Layer tap toggle
キーマップマクロTT(n)
説明普段はMOのように働くが何回かtapしてるとTGになるらしい
URLhttps://docs.qmk.fm/feature_layers
[ 8bit ][ 8bit ]
01010010110 <-- 11bit
^^^^^ <-- Layer 5bit

QK_SWAP_HANDS (0x5600-0x56FF)

項目内容
機能名Swap hands
キーマップマクロSH_T(kc)
説明分割キーボードの左右を一時的に切り替えるSwap関連のキーコード
URLhttps://docs.qmk.fm/features/swap_hands
[ 8bit ][ 8bit ]
01010110 <-- 8bit
^^^^^^^^ <-- Keycode 8bit

QK_TAP_DANCE (0x5700-0x57FF)

項目内容
機能名Tap dance
キーマップマクロ
説明キーを何回押したかで動作を変えれる
URLhttps://docs.qmk.fm/features/tap_dance
[ 8bit ][ 8bit ]
01010111 <-- 8bit
^^^^^^^^ <-- tap dance id? 8bit

QK_MAGIC (0x7000-0x70FF)

項目内容
機能名Magic Key
キーマップマクロ
説明
URLhttps://docs.qmk.fm/keycodes_magic
[ 8bit ][ 8bit ]
01110000 <-- 8bit
^^^^^^^^ <-- data 8bit

QK_MIDI (0x7100-0x71FF)

項目内容
機能名MIDI
キーマップマクロQK_MIDI_
説明MIDIキー。詳細は省略。
URLhttps://docs.qmk.fm/features/midi
[ 8bit ][ 8bit ]
01110001 <-- 8bit
^^^^^^^^ <-- Midi key 8bit

QK_SEQUENCER (0x7200-0x73FF)

項目内容
機能名Sequencer
キーマップマクロ
説明Midiに関係した何からしい
URLhttps://docs.qmk.fm/features/sequencer
[ 8bit ][ 8bit ]
0111001 <-- 7bit
^^^^^^^^^ <-- data 9bit

QK_JOYSTICK (0x7400-0x743F)

項目内容
機能名Joystick
キーマップマクロQK_JOYSTICK_
説明ジョイスティック。
URLhttps://docs.qmk.fm/features/joystick
[ 8bit ][ 8bit ]
0111010000 <-- 10bit
^^^^^^ <-- data 6bit

QK_PROGRAMMABLE_BUTTON (0x7440-0x747F)

項目内容
機能名Programmable button
キーマップマクロQK_PROGRAMMABLE_BUTTON
説明ソースコードの関数を呼び出せるみたいな感じ?
URLhttps://docs.qmk.fm/features/programmable_button
[ 8bit ][ 8bit ]
0111010001 <-- 10bit
^^^^^^ <-- button id 6bit

QK_AUDIO (0x7480-0x74BF)

項目内容
機能名Audio
キーマップマクロQK_AUDIO
説明音が出る
URLhttps://docs.qmk.fm/features/audio
[ 8bit ][ 8bit ]
0111010010 <-- 10bit
^^^^^^ <-- data 6bit

QK_STENO (0x74CO-0x74FF)

項目内容
機能名Stenography
キーマップマクロ
説明ステノタイプ。という単語を今初めて知った。速記で使われてるらしい?
URLhttps://docs.qmk.fm/features/stenography
[ 8bit ][ 8bit ]
0111010011 <-- 10bit
^^^^^^ <-- data 6bit

QK_MACRO (0x7700-0x777F)

項目内容
機能名Macros
キーマップマクロ
説明マクロ。
URLhttps://docs.qmk.fm/feature_macros
[ 8bit ][ 8bit ]
011101001 <-- 9bit
^^^^^^^ <-- macro id? 7bit

QK_LIGHTING (0x7800-0x78FF)

項目内容
機能名Lighting
キーマップマクロ
説明ライティング制御。RGB LightingとRGB Matrixなどライティング関係のものは全てこの中にあります。
URLhttps://docs.qmk.fm/features/backlight
[ 8bit ][ 8bit ]
01111000 <-- 8bit
^^^^^^^^ <-- data 8bit

QK_QUANTUM (0x7C00-0x7DFF)

項目内容
機能名N/A
キーマップマクロN/A
説明その他特殊なキーが割り当てられています。キー一覧を折り畳んで置いておきます。
URL
キー一覧
QK_BOOTLOADER = 0x7C00,
QK_REBOOT = 0x7C01,
QK_DEBUG_TOGGLE = 0x7C02,
QK_CLEAR_EEPROM = 0x7C03,
QK_MAKE = 0x7C04,
QK_AUTO_SHIFT_DOWN = 0x7C10,
QK_AUTO_SHIFT_UP = 0x7C11,
QK_AUTO_SHIFT_REPORT = 0x7C12,
QK_AUTO_SHIFT_ON = 0x7C13,
QK_AUTO_SHIFT_OFF = 0x7C14,
QK_AUTO_SHIFT_TOGGLE = 0x7C15,
QK_GRAVE_ESCAPE = 0x7C16,
QK_VELOCIKEY_TOGGLE = 0x7C17,
QK_SPACE_CADET_LEFT_CTRL_PARENTHESIS_OPEN = 0x7C18,
QK_SPACE_CADET_RIGHT_CTRL_PARENTHESIS_CLOSE = 0x7C19,
QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN = 0x7C1A,
QK_SPACE_CADET_RIGHT_SHIFT_PARENTHESIS_CLOSE = 0x7C1B,
QK_SPACE_CADET_LEFT_ALT_PARENTHESIS_OPEN = 0x7C1C,
QK_SPACE_CADET_RIGHT_ALT_PARENTHESIS_CLOSE = 0x7C1D,
QK_SPACE_CADET_RIGHT_SHIFT_ENTER = 0x7C1E,
QK_OUTPUT_AUTO = 0x7C20,
QK_OUTPUT_USB = 0x7C21,
QK_OUTPUT_BLUETOOTH = 0x7C22,
QK_UNICODE_MODE_NEXT = 0x7C30,
QK_UNICODE_MODE_PREVIOUS = 0x7C31,
QK_UNICODE_MODE_MACOS = 0x7C32,
QK_UNICODE_MODE_LINUX = 0x7C33,
QK_UNICODE_MODE_WINDOWS = 0x7C34,
QK_UNICODE_MODE_BSD = 0x7C35,
QK_UNICODE_MODE_WINCOMPOSE = 0x7C36,
QK_UNICODE_MODE_EMACS = 0x7C37,
QK_HAPTIC_ON = 0x7C40,
QK_HAPTIC_OFF = 0x7C41,
QK_HAPTIC_TOGGLE = 0x7C42,
QK_HAPTIC_RESET = 0x7C43,
QK_HAPTIC_FEEDBACK_TOGGLE = 0x7C44,
QK_HAPTIC_BUZZ_TOGGLE = 0x7C45,
QK_HAPTIC_MODE_NEXT = 0x7C46,
QK_HAPTIC_MODE_PREVIOUS = 0x7C47,
QK_HAPTIC_CONTINUOUS_TOGGLE = 0x7C48,
QK_HAPTIC_CONTINUOUS_UP = 0x7C49,
QK_HAPTIC_CONTINUOUS_DOWN = 0x7C4A,
QK_HAPTIC_DWELL_UP = 0x7C4B,
QK_HAPTIC_DWELL_DOWN = 0x7C4C,
QK_COMBO_ON = 0x7C50,
QK_COMBO_OFF = 0x7C51,
QK_COMBO_TOGGLE = 0x7C52,
QK_DYNAMIC_MACRO_RECORD_START_1 = 0x7C53,
QK_DYNAMIC_MACRO_RECORD_START_2 = 0x7C54,
QK_DYNAMIC_MACRO_RECORD_STOP = 0x7C55,
QK_DYNAMIC_MACRO_PLAY_1 = 0x7C56,
QK_DYNAMIC_MACRO_PLAY_2 = 0x7C57,
QK_LEADER = 0x7C58,
QK_LOCK = 0x7C59,
QK_ONE_SHOT_ON = 0x7C5A,
QK_ONE_SHOT_OFF = 0x7C5B,
QK_ONE_SHOT_TOGGLE = 0x7C5C,
QK_KEY_OVERRIDE_TOGGLE = 0x7C5D,
QK_KEY_OVERRIDE_ON = 0x7C5E,
QK_KEY_OVERRIDE_OFF = 0x7C5F,
QK_SECURE_LOCK = 0x7C60,
QK_SECURE_UNLOCK = 0x7C61,
QK_SECURE_TOGGLE = 0x7C62,
QK_SECURE_REQUEST = 0x7C63,
QK_DYNAMIC_TAPPING_TERM_PRINT = 0x7C70,
QK_DYNAMIC_TAPPING_TERM_UP = 0x7C71,
QK_DYNAMIC_TAPPING_TERM_DOWN = 0x7C72,
QK_CAPS_WORD_TOGGLE = 0x7C73,
QK_AUTOCORRECT_ON = 0x7C74,
QK_AUTOCORRECT_OFF = 0x7C75,
QK_AUTOCORRECT_TOGGLE = 0x7C76,
QK_TRI_LAYER_LOWER = 0x7C77,
QK_TRI_LAYER_UPPER = 0x7C78,
QK_REPEAT_KEY = 0x7C79,
QK_ALT_REPEAT_KEY = 0x7C7A,
[ 8bit ][ 8bit ]
0111110 <-- 7bit
^^^^^^^^^ <-- data 9bit

QK_KB (0x7E00-0x7E3F)

項目内容
機能名Keyboard keycode
キーマップマクロQK_KB_
説明QMKのキーボード層でカスタムキーコードを定義するための予約領域
URL
[ 8bit ][ 8bit ]
0111111000 <-- 10bit
^^^^^^ <-- data 6bit

QK_USER (0x7E40-0x7FFF)

項目内容
機能名User keycode
キーマップマクロQK_USER_
説明QMKのユーザー層でカスタムキーコードを定義するための予約領域
URLhttps://docs.qmk.fm/feature_layers
- 0x7E40-0x7E7F
[ 8bit ][ 8bit ]
0111111001 <-- 10bit
^^^^^^ <-- data 6bit

- 0x7E80-0x7EFF
[ 8bit ][ 8bit ]
011111101 <-- 9bit
^^^^^^^ <-- data 7bit

- 0x7F00-0x7FFF
[ 8bit ][ 8bit ]
01111111 <-- 8bit
^^^^^^^^ <-- data 8bit

Keycode

Keycodeという単語が意味するものは結構曖昧ですが、今から説明するKeycodeはQMK上でKC_から始まるもののことを指します。
Keycodeは0x00から0xFFまでの8ビットで表され、「普通のキー」を指します。それぞれに割り当てられている番号はHIDと大体同じですが

Basic Keycodes | QMK Firmware

docs.qmk.fm

にあるように、HIDのキーボードレポートではサポートされていないマウスやメディアキーも入っているなどの違いがあります。
また、0x0000はNO、0x0001はTRANSPARENTを表します。

Modifier

Modifierの5ビットは次のように表されています。
/** \brief 5-bit packed modifiers
*
* Mod bits: 43210
* bit 0 ||||+- Control
* bit 1 |||+-- Shift
* bit 2 ||+--- Alt
* bit 3 |+---- Gui
* bit 4 +----- LR flag(Left:0, Right:1)
*/
enum mods_5bit {
MOD_LCTL = 0x01,
MOD_LSFT = 0x02,
MOD_LALT = 0x04,
MOD_LGUI = 0x08,
MOD_RCTL = 0x11,
MOD_RSFT = 0x12,
MOD_RALT = 0x14,
MOD_RGUI = 0x18,
};
(modifiers.hより引用)
HIDとは違うデータ構造になっており、HIDでは8ビット必要だったのが5ビットに圧縮されています。