はじめに
こんにちは、Ctrlです。
CTRL配列 を基軸としたキーマップを「CTRL配列 v.4.0」のメジャーアップデートとしてまとめました。前回までのアップデートとして、片手配列で左手と右手、そして新しくCTRL配列による両手、マインクラフトを遊ぶためのレイヤーなども追加しています。
使用しているPCB:物理キーボード
使用している物理キーボードは@takashicompanyさんのWorm Eatenです。
現在は、左手にKensingtonのスリムブレード、右手にWorm Eaten、ディスプレイの下に無指向性マイクを設置して作業しています。
1. keymap.c
ファイルの全体像
まずは、今回解説するkeymap.c
ファイルの全体像を見てみましょう。このファイルは、QMKファームウェアにおけるキーボードの動作を定義するC言語のソースコードです。
/* Ctrl */
#include QMK_KEYBOARD_H
enum layer_number {
_BASE = 0,_C,_S,_B,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,
};
enum custom_keycodes {
VOICE = SAFE_RANGE,PRN,BRC,CBR,ABK,
};
#define SEND_PAIR(str) if (record->event.pressed) SEND_STRING(str);
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case VOICE: SEND_PAIR(SS_TAP(X_LNG1) SS_RCTL(SS_LSFT("s"))); break;
case PRN: SEND_PAIR("()"); break;
case BRC: SEND_PAIR("[]"); break;
case CBR: SEND_PAIR("<>"); break;
case ABK: SEND_PAIR("{}"); break;
}
return true;
}
enum {
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
};
#define TD_LTR(kc) ACTION_TAP_DANCE_DOUBLE(KC_##kc, S(KC_##kc))
#define TD_ROW(a, b, c, d, e) \
[a] = TD_LTR(A), [b] = TD_LTR(B), [c] = TD_LTR(C), [d] = TD_LTR(D), [e] = TD_LTR(E)
tap_dance_action_t tap_dance_actions[] = {
[A] = TD_LTR(A), [B] = TD_LTR(B), [C] = TD_LTR(C), [D] = TD_LTR(D), [E] = TD_LTR(E),
[F] = TD_LTR(F), [G] = TD_LTR(G), [H] = TD_LTR(H), [I] = TD_LTR(I), [J] = TD_LTR(J),
[K] = TD_LTR(K), [L] = TD_LTR(L), [M] = TD_LTR(M), [N] = TD_LTR(N), [O] = TD_LTR(O),
[P] = TD_LTR(P), [Q] = TD_LTR(Q), [R] = TD_LTR(R), [S] = TD_LTR(S), [T] = TD_LTR(T),
[U] = TD_LTR(U), [V] = TD_LTR(V), [W] = TD_LTR(W), [X] = TD_LTR(X), [Y] = TD_LTR(Y),
[Z] = TD_LTR(Z),
};
#define BSPC KC_BSPC
#define ENG KC_LNG2
#define JPN KC_LNG1
#define DEL KC_DEL
#define SPC KC_SPC
#define BTN1 KC_BTN1
#define BTN2 KC_BTN2
#define BTN3 KC_BTN3
#define ESC KC_ESC
#define TAB KC_TAB
#define ENT KC_ENT
#define RGHT KC_RGHT
#define LEFT KC_LEFT
#define HOME KC_HOME
#define END KC_END
#define MINECRAFT C(KC_F1) // minecraft-launcher
#define KEYBOARD C(KC_F2) // xfce4-keyboard-settings
#define MOUSE C(KC_F3) // xfce4-mouse-settings
#define CHROME C(KC_F4) // google-chrome
#define VSCODE C(KC_F5) // vscode
#define SOUND C(KC_F6) // pavucontrol
#define APPEARANCE C(KC_F7) // xfce4-appearance-settings
#define WINDOW C(KC_F8) // xfwm4-settings
#define FIREFOX C(KC_F9) // firefox-esr
#define APPFINDER C(KC_F10) // xfce4-appfinder
#define THUNAR C(KC_F11) // thunar
#define TERMINAL C(KC_F12) // xfce4-terminal
#define OBS C(KC_F13) // obs
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
LT(_8,ESC), LT(_7,KC_DOT),LT(_6,KC_COMM),MS_WHLU, VOICE, /* */ VOICE, MS_WHLU, LT(_6,KC_COMM),LT(_7,KC_DOT),LT(_8,ESC),
LT(_9,BTN3), LEFT, RGHT, LT(_5,BTN1), LT(_4,TAB), /* */ LT(_4,TAB), LT(_5,BTN1), LEFT, RGHT, LT(_9,BTN3),
LT(_10,ENT), KC_VOLD, KC_VOLU, MS_WHLD, LT(_3,SPC), /* */ LT(_3,SPC), MS_WHLD, KC_VOLD, KC_VOLU, LT(_10,ENT),
KC_MPLY, KC_MUTE, TG(_C), LT(_1,DEL), LT(_2,BSPC), /* */ LT(_2,BSPC), LT(_1,DEL), TG(_C), KC_MUTE, KC_MPLY),
[_C] = LAYOUT(
LT(_8,KC_L), LT(_7,KC_O), LT(_6,KC_E), KC_Y, KC_W, /* */ KC_P, KC_R, LT(_6,KC_T), LT(_7,KC_S), LT(_8,KC_X),
LT(_9,KC_A), KC_J, KC_C, LT(_5,KC_I), LT(_4,KC_F), /* */ KC_H, LT(_5,KC_N), KC_D, KC_Z, LT(_9,KC_K),
LT(_10,KC_Q), LEFT, RGHT, KC_U, LT(_3,KC_V), /* */ KC_B, KC_M, LEFT, RGHT, LT(_10,KC_G),
KC_MPLY, KC_MUTE, TG(_C), LT(_S,DEL), LT(_B,BSPC), /* */ LT(_S,SPC), LT(_B,ENT), TG(_C), KC_MUTE, KC_MPLY),
[_S] = LAYOUT(
S(KC_L), S(KC_O), S(KC_E), S(KC_Y), S(KC_W), /* */ S(KC_P), S(KC_R), S(KC_T), S(KC_S), S(KC_X),
S(KC_A), S(KC_J), S(KC_C), S(KC_I), S(KC_F), /* */ S(KC_H), S(KC_N), S(KC_D), S(KC_Z), S(KC_K),
S(KC_Q), XXXXXXX, XXXXXXX, S(KC_U), S(KC_V), /* */ S(KC_B), S(KC_M), XXXXXXX, XXXXXXX, S(KC_G),
XXXXXXX, XXXXXXX, XXXXXXX, PRN, KC_UNDS, /* */ JPN, ENG, XXXXXXX, XXXXXXX, XXXXXXX),
[_B] = LAYOUT(
ESC, KC_DOT, KC_COMM, MS_WHLU, VOICE, /* */ VOICE, MS_WHLU, KC_COMM, KC_DOT, ESC,
BTN3, LEFT, RGHT, BTN1, TAB, /* */ TAB, BTN1, LEFT, RGHT, BTN3,
ENT, XXXXXXX, XXXXXXX, MS_WHLD, SPC, /* */ SPC, MS_WHLD, XXXXXXX, XXXXXXX, ENT,
XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, /* */ LEFT, RGHT, XXXXXXX, XXXXXXX, XXXXXXX),
[_1] = LAYOUT(
TD(L), TD(O), TD(E), TD(Y), TD(W), /* */ TD(W), TD(Y), TD(E), TD(O), TD(L),
TD(A), TD(J), TD(C), TD(I), TD(F), /* */ TD(F), TD(I), TD(C), TD(J), TD(A),
TD(Q), XXXXXXX, XXXXXXX, TD(U), TD(V), /* */ TD(V), TD(U), XXXXXXX, XXXXXXX, TD(Q),
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JPN, /* */ JPN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
[_2] = LAYOUT(
TD(X), TD(S), TD(T), TD(R), TD(P), /* */ TD(P), TD(R), TD(T), TD(S), TD(X),
TD(K), TD(Z), TD(D), TD(N), TD(H), /* */ TD(H), TD(N), TD(D), TD(Z), TD(K),
TD(G), XXXXXXX, XXXXXXX, TD(M), TD(B), /* */ TD(B), TD(M), XXXXXXX, XXXXXXX, TD(G),
XXXXXXX, XXXXXXX, XXXXXXX, ENG, XXXXXXX, /* */ XXXXXXX, ENG, XXXXXXX, XXXXXXX, XXXXXXX),
[_3] = LAYOUT(
KC_F2, S(HOME), S(END), S(KC_UP), C(KC_A), /* */ C(KC_A), S(KC_UP), S(HOME), S(END), KC_F2,
RCS(KC_V), S(LEFT), S(RGHT), C(KC_C), C(KC_X), /* */ C(KC_X), C(KC_C), S(LEFT), S(RGHT), RCS(KC_V),
C(KC_V), XXXXXXX, XXXXXXX, S(KC_DOWN), XXXXXXX, /* */ XXXXXXX, S(KC_DOWN), XXXXXXX, XXXXXXX, C(KC_V),
XXXXXXX, XXXXXXX, XXXXXXX, S(DEL), A(KC_F4), /* */ A(KC_F4), S(DEL), XXXXXXX, XXXXXXX, XXXXXXX),
[_4] = LAYOUT(
MINECRAFT, MOUSE, KEYBOARD, CHROME, APPFINDER, /* */ APPFINDER, CHROME, KEYBOARD, MOUSE, MINECRAFT,
SOUND, APPEARANCE, WINDOW, QK_BOOT, XXXXXXX, /* */ XXXXXXX, QK_BOOT, WINDOW, APPEARANCE, SOUND,
OBS, XXXXXXX, XXXXXXX, FIREFOX, VSCODE, /* */ VSCODE, FIREFOX, XXXXXXX, XXXXXXX, OBS,
XXXXXXX, XXXXXXX, XXXXXXX, THUNAR, TERMINAL, /* */ TERMINAL, THUNAR, XXXXXXX, XXXXXXX, XXXXXXX),
[_5] = LAYOUT(
KC_HASH, KC_COLN, KC_SLSH, XXXXXXX, XXXXXXX, /* */ XXXXXXX, XXXXXXX, KC_SLSH, KC_COLN, KC_HASH,
C(KC_T), KC_EXLM, KC_QUES, XXXXXXX, BTN2, /* */ BTN2, XXXXXXX, KC_QUES, KC_EXLM, C(KC_T),
KC_UNDS, XXXXXXX, XXXXXXX, C(KC_Y), C(KC_Z), /* */ C(KC_Z), C(KC_Y), XXXXXXX, XXXXXXX, KC_UNDS,
XXXXXXX, XXXXXXX, XXXXXXX, RCS(KC_T), C(KC_W), /* */ C(KC_W), RCS(KC_T), XXXXXXX, XXXXXXX, XXXXXXX),
[_6] = LAYOUT(
KC_INSERT, KC_PSCR, XXXXXXX, C(HOME), A(KC_S), /* */ A(KC_S), C(HOME), XXXXXXX, KC_PSCR, KC_INSERT,
KC_PAUSE, XXXXXXX, XXXXXXX, A(TAB), XXXXXXX, /* */ XXXXXXX, A(TAB), XXXXXXX, XXXXXXX, KC_PAUSE,
XXXXXXX, XXXXXXX, XXXXXXX, C(END), C(KC_H), /* */ C(KC_H), C(END), XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, RCS(KC_C), C(KC_F), /* */ C(KC_F), RCS(KC_C), XXXXXXX, XXXXXXX, XXXXXXX),
[_7] = LAYOUT(
XXXXXXX, KC_SCLN, KC_BSLS, KC_AMPR, KC_TILD, /* */ KC_TILD, KC_AMPR, KC_BSLS, KC_SCLN, XXXXXXX,
XXXXXXX, KC_PIPE, KC_DLR, KC_AT, KC_PERC, /* */ KC_PERC, KC_AT, KC_DLR, KC_PIPE, XXXXXXX,
KC_CAPS, XXXXXXX, XXXXXXX, KC_CIRC, KC_GRV, /* */ KC_GRV, KC_CIRC, XXXXXXX, XXXXXXX, KC_CAPS,
XXXXXXX, XXXXXXX, XXXXXXX, KC_DQUO, KC_QUOT, /* */ KC_QUOT, KC_DQUO, XXXXXXX, XXXXXXX, XXXXXXX),
[_8] = LAYOUT(
XXXXXXX, KC_SCLN, KC_BSLS, KC_AMPR, KC_TILD, /* */ KC_TILD, KC_AMPR, KC_BSLS, KC_SCLN, XXXXXXX,
XXXXXXX, KC_PIPE, KC_DLR, KC_AT, KC_PERC, /* */ KC_PERC, KC_AT, KC_DLR, KC_PIPE, XXXXXXX,
KC_CAPS, XXXXXXX, XXXXXXX, KC_CIRC, KC_GRV, /* */ KC_GRV, KC_CIRC, XXXXXXX, XXXXXXX, KC_CAPS,
XXXXXXX, XXXXXXX, XXXXXXX, KC_DQUO, KC_QUOT, /* */ KC_QUOT, KC_DQUO, XXXXXXX, XXXXXXX, XXXXXXX),
[_9] = LAYOUT(
TG(_11), RCS(KC_PGUP), RCS(KC_PGDN), KC_F7, KC_F5, /* */ KC_F5, KC_F7, RCS(KC_PGUP), RCS(KC_PGDN), TG(_11),
XXXXXXX, KC_F8, KC_F11, KC_MPLY, KC_F10, /* */ KC_F10, KC_MPLY, KC_F11, KC_F8, XXXXXXX,
KC_MUTE, XXXXXXX, XXXXXXX, RCS(TAB), C(TAB), /* */ RCS(TAB), C(TAB), XXXXXXX, XXXXXXX, KC_MUTE,
XXXXXXX, XXXXXXX, XXXXXXX, A(LEFT), A(RGHT), /* */ A(LEFT), A(RGHT), XXXXXXX, XXXXXXX, XXXXXXX),
[_10] = LAYOUT(
S(KC_MUTE), KC_1, KC_2, KC_3, KC_4, /* */ KC_1, KC_2, KC_3, KC_4, S(KC_MUTE),
XXXXXXX, KC_5, KC_6, KC_7, KC_8, /* */ KC_5, KC_6, KC_7, KC_8, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, KC_9, KC_0, /* */ KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, /* */ KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX),
[_11] = LAYOUT(
TG(_11), KC_E, BTN2, SPC, KC_Q, /* */ KC_Q, SPC, BTN2, KC_E, TG(_11),
LT(_12,ESC), BTN2, KC_LSFT, BTN1, KC_F3, /* */ KC_F3, BTN1, KC_LSFT, BTN2, LT(_12,ESC),
A(TAB), XXXXXXX, XXXXXXX, S(BTN1), C(KC_W), /* */ C(KC_W), S(BTN1), XXXXXXX, XXXXXXX, A(TAB),
XXXXXXX, XXXXXXX, XXXXXXX, S(KC_S), S(KC_W), /* */ S(KC_W), S(KC_S), XXXXXXX, XXXXXXX, XXXXXXX),
[_12] = LAYOUT(
XXXXXXX, KC_1, KC_2, KC_3, KC_4, /* */ KC_1, KC_2, KC_3, KC_4, XXXXXXX,
XXXXXXX, KC_5, KC_6, KC_7, KC_8, /* */ KC_5, KC_6, KC_7, KC_8, XXXXXXX,
ENG, XXXXXXX, XXXXXXX, KC_F, KC_9, /* */ KC_9, KC_F, XXXXXXX, XXXXXXX, ENG,
XXXXXXX, XXXXXXX, XXXXXXX, KC_S, KC_W, /* */ KC_W, KC_S, XXXXXXX, XXXXXXX, XXXXXXX),
};
2. #include
ディレクティブとレイヤー定義
keymap.c
の冒頭にある#include QMK_KEYBOARD_H
と、enum layer_number
について解説します。
#include QMK_KEYBOARD_H
enum layer_number {
_BASE = 0,_C,_S,_B,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,
};
-
#include QMK_KEYBOARD_H
: これはQMKファームウェアの基本的な定義やマクロが含まれるヘッダーファイルを読み込むためのものです。QMKでキーボードをカスタマイズする際には、必ず必要となるおまじないのようなものですね。 -
enum layer_number
: ここでは、キーボードの「レイヤー」を定義しています。レイヤーとは、キーボードの異なる状態を切り替えるためのもので、例えばLTやTGキーを押すと、それぞれに対応したレイヤーが使えるようになるようになっており、一つの物理キーに複数の機能を割り当てるために使われます。-
_BASE = 0
: これは、キーボードの最も基本的なレイヤー(デフォルトの状態)を定義しています。通常、このレイヤーがアクティブになっています。 -
_C, _S, _B, _1, _2, ...
: これらは、カスタムレイヤーの定義です。それぞれのレイヤーに特定の機能やキー配置を割り当てることが可能です。
-
3. カスタムキーコードの定義
enum custom_keycodes
と#define SEND_PAIR(str)
、process_record_user
関数について解説します。
enum custom_keycodes {
VOICE = SAFE_RANGE,PRN,BRC,CBR,ABK,
};
#define SEND_PAIR(str) if (record->event.pressed) SEND_STRING(str);
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case VOICE: SEND_PAIR(SS_TAP(X_LNG1) SS_RCTL(SS_LSFT("s"))); break;
case PRN: SEND_PAIR("()"); break;
case BRC: SEND_PAIR("[]"); break;
case CBR: SEND_PAIR("<>"); break;
case ABK: SEND_PAIR("{}"); break;
}
return true;
}
-
enum custom_keycodes
: ここでは、QMKの標準キーコードにはない、独自のカスタムキーコードを定義しています。-
VOICE = SAFE_RANGE
:SAFE_RANGE
は、QMKが内部で使用するキーコードと衝突しない範囲を示す定数です。VOICE
は、音声入力に関連するカスタムキーコードとして定義されています。主にはGoogleドキュメントと、VS code の音声入力のショートカットを設定しています。 -
PRN, BRC, CBR, ABK
: これらは、それぞれ括弧()
、角括弧[]
、山括弧<>
、波括弧{}
を入力するためのカスタムキーコードです。
-
-
#define SEND_PAIR(str) if (record->event.pressed) SEND_STRING(str);
: これは、キーが押されたときに指定された文字列を送信するためのマクロです。例えば、PRN
キーが押されたら()
が入力されるように、ペアの記号を簡単に入力できるようにしています。 -
bool process_record_user(uint16_t keycode, keyrecord_t *record)
: この関数は、キーが押されたり離されたりするたびにQMKファームウェアによって呼び出されます。カスタムキーコードの処理は、この関数内で行われます。-
switch (keycode)
: どのカスタムキーコードがトリガーされたかに応じて、異なる処理を実行します。 -
case VOICE: SEND_PAIR(SS_TAP(X_LNG1) SS_RCTL(SS_LSFT("s"))); break;
:VOICE
キーが押された場合、特定のショートカット(Ctrl + Shift + S
)を送信し、音声入力機能をトリガーします。 -
case PRN: SEND_PAIR("()"); break;
:PRN
キーが押された場合、()
を送信します。他の括弧も同様です。 -
return true;
: この関数がtrue
を返すと、QMKはキーイベントの通常の処理を続行します。false
を返すと、QMKはそれ以上の処理を行いません。
-
4. タップダンスの定義
enum
で定義されているアルファベットと、TD_LTR
、TD_ROW
マクロ、そして tap_dance_actions
配列について解説します。
enum {
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
};
#define TD_LTR(kc) ACTION_TAP_DANCE_DOUBLE(KC_##kc, S(KC_##kc))
#define TD_ROW(a, b, c, d, e) \
[a] = TD_LTR(A), [b] = TD_LTR(B), [c] = TD_LTR(C), [d] = TD_LTR(D), [e] = TD_LTR(E)
tap_dance_action_t tap_dance_actions[] = {
[A] = TD_LTR(A), [B] = TD_LTR(B), [C] = TD_LTR(C), [D] = TD_LTR(D), [E] = TD_LTR(E),
[F] = TD_LTR(F), [G] = TD_LTR(G), [H] = TD_LTR(H), [I] = TD_LTR(I), [J] = TD_LTR(J),
[K] = TD_LTR(K), [L] = TD_LTR(L), [M] = TD_LTR(M), [N] = TD_LTR(N), [O] = TD_LTR(O),
[P] = TD_LTR(P), [Q] = TD_LTR(Q), [R] = TD_LTR(R), [S] = TD_LTR(S), [T] = TD_LTR(T),
[U] = TD_LTR(U), [V] = TD_LTR(V), [W] = TD_LTR(W), [X] = TD_LTR(X), [Y] = TD_LTR(Y),
[Z] = TD_LTR(Z),
};
-
enum { A,B,C,...Z, };
: ここでは、アルファベットを列挙型として定義しています。これは、後述するタップダンスのインデックスとして使用されます。 -
#define TD_LTR(kc) ACTION_TAP_DANCE_DOUBLE(KC_##kc, S(KC_##kc))
: これは、タップダンスの動作を定義するマクロです。-
ACTION_TAP_DANCE_DOUBLE
: QMKのタップダンス機能の一つで、キーを1回タップしたときと2回タップしたときで異なる動作を割り当てることができます。 -
KC_##kc
: キーコードを生成します。例えば、TD_LTR(A)
はKC_A
(Aキー)を意味します。 -
S(KC_##kc)
: シフトキーを押しながらキーコードを送信します。つまり、TD_LTR(A)
は、1回タップでa
、2回タップでA
を入力するタップダンスを定義しています。片手入力時に大文字を入力するために設定してあります。
-
-
#define TD_ROW(a, b, c, d, e) ...
: これは、複数のタップダンスをまとめて定義するためのマクロです。行ごとにアルファベットのタップダンスを定義する際に使用されます。 -
tap_dance_action_t tap_dance_actions[] = { ... };
: ここでは、実際に使用するタップダンスの配列を定義しています。各アルファベットに対応するタップダンスが、TD_LTR
マクロを使って設定されています。
5. アプリケーションショートカットと特殊キーの定義
#define
で定義されている様々なキーコードとアプリケーションショートカットについて解説します。
#define BSPC KC_BSPC
#define ENG KC_LNG2
#define JPN KC_LNG1
#define DEL KC_DEL
#define SPC KC_SPC
#define BTN1 KC_BTN1
#define BTN2 KC_BTN2
#define BTN3 KC_BTN3
#define ESC KC_ESC
#define TAB KC_TAB
#define ENT KC_ENT
#define RGHT KC_RGHT
#define LEFT KC_LEFT
#define HOME KC_HOME
#define END KC_END
#define MINECRAFT C(KC_F1) // minecraft-launcher
#define KEYBOARD C(KC_F2) // xfce4-keyboard-settings
#define MOUSE C(KC_F3) // xfce4-mouse-settings
#define CHROME C(KC_F4) // google-chrome
#define VSCODE C(KC_F5) // vscode
#define SOUND C(KC_F6) // pavucontrol
#define APPEARANCE C(KC_F7) // xfce4-appearance-settings
#define WINDOW C(KC_F8) // xfwm4-settings
#define FIREFOX C(KC_F9) // firefox-esr
#define APPFINDER C(KC_F10) // xfce4-appfinder
#define THUNAR C(KC_F11) // thunar
#define TERMINAL C(KC_F12) // xfce4-terminal
#define OBS C(KC_F13) // obs
-
#define BSPC KC_BSPC
のような定義: これは、QMKの標準キーコードに別名を付けて、コードの可読性を高めています。例えば、KC_BSPC
(バックスペースキー)をBSPC
と短く記述できるようになります。 -
#define ENG KC_LNG2
、#define JPN KC_LNG1
: これらは、言語切り替えのためのキーコードです。KC_LNG1
とKC_LNG2
は、QMKで定義されている言語切り替え用のキーコードで、それぞれ日本語と英語の切り替えに割り当てられています。 -
#define MINECRAFT C(KC_F1) // minecraft-launcher
のような定義: これらは、特定のアプリケーションを起動するためのショートカットキーを定義しています。-
C(KC_F1)
:Ctrl
キーとF1
キーの組み合わせを意味します。 - コメント(
// minecraft-launcher
)は、そのショートカットがどのアプリケーションに対応しているかを示しています。 - このように定義しておき、OS側のキーボードショートカットの機能と組み合わせることで、キーボードから直接アプリケーションを起動できるようになり、作業効率が向上します。
-
6. レイヤーの定義
_BASE
レイヤー
_BASE
レイヤーは、キーボードの基本的なキー配置を定義しています。このレイヤーは通常、キーボードが起動したときにアクティブになるデフォルトのレイヤーです。
[_BASE] = LAYOUT(
LT(_8,ESC), LT(_7,KC_DOT),LT(_6,KC_COMM),MS_WHLU, VOICE, /* */ VOICE, MS_WHLU, LT(_6,KC_COMM),LT(_7,KC_DOT),LT(_8,ESC),
LT(_9,BTN3), LEFT, RGHT, LT(_5,BTN1), LT(_4,TAB), /* */ LT(_4,TAB), LT(_5,BTN1), LEFT, RGHT, LT(_9,BTN3),
LT(_10,ENT), KC_VOLD, KC_VOLU, MS_WHLD, LT(_3,SPC), /* */ LT(_3,SPC), MS_WHLD, KC_VOLD, KC_VOLU, LT(_10,ENT),
KC_MPLY, KC_MUTE, TG(_C), LT(_1,DEL), LT(_2,BSPC), /* */ LT(_2,BSPC), LT(_1,DEL), TG(_C), KC_MUTE, KC_MPLY),
-
LT(_8,ESC)
: これは「レイヤーとタップ」の組み合わせです。キーをホールドすると_8
レイヤーに一時的に切り替わり、タップするとESC
キーコードを送信します。 -
KC_DOT
,KC_COMM
: 標準のキーコードで、それぞれピリオドとカンマを表します。主に音声入力で作業しており、音声ではなかなか入力しにくい記号なので、デフォルトレイヤーに設置してあります。 -
MS_WHLU
,MS_WHLD
: マウスホイールの上下スクロールを割り当てています。 -
VOICE
: 先ほど「カスタムキーコードの定義」で解説した、音声入力に関連するカスタムキーコードです。 -
LEFT
,RGHT
: 標準の矢印キーです。 -
KC_VOLD
,KC_VOLU
: 音量ダウンと音量アップのキーコードです。 -
KC_MPLY
,KC_MUTE
: メディア再生/一時停止とミュートのキーコードです。 -
TG(_C)
:_C
レイヤーをトグル(オン/オフ切り替え)します。これにより、両手でCTRL配列が入力できる_C
レイヤーに定義されたキー配置に切り替えることができます。 -
LT(_1,DEL)
,LT(_2,BSPC)
:_1
レイヤーに一時的に切り替えてDEL
、_2
レイヤーに一時的に切り替えてBSPC
(バックスペース)を送信します。
_C
レイヤー
_C
レイヤーは、両手でCTRL配列による入力に特化したキー配置を定義しています。
[_C] = LAYOUT(
LT(_8,KC_L), LT(_7,KC_O), LT(_6,KC_E), KC_Y, KC_W, /* */ KC_P, KC_R, LT(_6,KC_T), LT(_7,KC_S), LT(_8,KC_X),
LT(_9,KC_A), KC_J, KC_C, LT(_5,KC_I), LT(_4,KC_F), /* */ KC_H, LT(_5,KC_N), KC_D, KC_Z, LT(_9,KC_K),
LT(_10,KC_Q), LEFT, RGHT, KC_U, LT(_3,KC_V), /* */ KC_B, KC_M, LEFT, RGHT, LT(_10,KC_G),
KC_MPLY, KC_MUTE, TG(_C), LT(_S,DEL), LT(_B,BSPC), /* */ LT(_S,SPC), LT(_B,ENT), TG(_C), KC_MUTE, KC_MPLY),
-
LT(_8,KC_L)
:_8
レイヤーに一時的に切り替え、タップするとL
キーを送信します。他のアルファベットも同様に設定されています。 -
KC_Y
,KC_W
,KC_P
,KC_R
など: これらのキーは、特定のアルファベットを直接入力するために割り当てられています。 -
LEFT
,RGHT
: 標準の矢印キーです。 -
KC_MPLY
,KC_MUTE
: メディア再生/一時停止とミュートのキーコードです。 -
TG(_C)
:_C
レイヤーをトグル(オン/オフ切り替え)します。このレイヤー内で再度TG(_C)
を押すことで、_BASE
レイヤーに戻ることができます。 -
LT(_S,DEL)
,LT(_B,BSPC)
:_S
レイヤーに一時的に切り替えてDEL
、_B
レイヤーに一時的に切り替えてBSPC
(バックスペース)を送信します。 -
LT(_S,SPC)
,LT(_B,ENT)
:_S
レイヤーに一時的に切り替えてSPC
(スペース)、_B
レイヤーに一時的に切り替えてENT
(エンター)を送信します。
_S
レイヤー
_S
レイヤーは、主に両手でCTRL配列による入力をする際のShiftキーと組み合わせた文字入力や、特殊な記号の入力に特化したキー配置を定義しています。
[_S] = LAYOUT(
S(KC_L), S(KC_O), S(KC_E), S(KC_Y), S(KC_W), /* */ S(KC_P), S(KC_R), S(KC_T), S(KC_S), S(KC_X),
S(KC_A), S(KC_J), S(KC_C), S(KC_I), S(KC_F), /* */ S(KC_H), S(KC_N), S(KC_D), S(KC_Z), S(KC_K),
S(KC_Q), XXXXXXX, XXXXXXX, S(KC_U), S(KC_V), /* */ S(KC_B), S(KC_M), XXXXXXX, XXXXXXX, S(KC_G),
XXXXXXX, XXXXXXX, XXXXXXX, PRN, KC_UNDS, /* */ JPN, ENG, XXXXXXX, XXXXXXX, XXXXXXX),
-
S(KC_L)
:Shift
キーを押しながらL
キーを送信します。これにより、大文字のL
が入力されます。他のアルファベットも同様に設定されており、このレイヤーでは常に大文字が入力されるようになっています。 -
XXXXXXX
: キーが割り当てられていないことを示します。 -
PRN
: 先ほど「カスタムキーコードの定義」で解説した、()
を入力するためのカスタムキーコードです。 -
KC_UNDS
: アンダーバー(_
)を入力するためのキーコードです。 -
JPN
: 日本語入力モードに切り替えるためのキーコードです。 -
ENG
: 英語入力モードに切り替えるためのキーコードです。
_B
レイヤー
_B
レイヤーは、主に基本的なキーコードやマウス操作、ナビゲーションに特化したキー配置を定義しています。両手でCTRL配列に利用するレイヤーであり、デフォルトのレイヤーを少しカスタマイズした配置になっています。
[_B] = LAYOUT(
ESC, KC_DOT, KC_COMM, MS_WHLU, VOICE, /* */ VOICE, MS_WHLU, KC_COMM, KC_DOT, ESC,
BTN3, LEFT, RGHT, BTN1, TAB, /* */ TAB, BTN1, LEFT, RGHT, BTN3,
ENT, XXXXXXX, XXXXXXX, MS_WHLD, SPC, /* */ SPC, MS_WHLD, XXXXXXX, XXXXXXX, ENT,
XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, /* */ LEFT, RGHT, XXXXXXX, XXXXXXX, XXXXXXX),
-
ESC
: エスケープキーです。 -
KC_DOT
,KC_COMM
: ピリオドとカンマです。 -
MS_WHLU
,MS_WHLD
: マウスホイールの上下スクロールです。 -
VOICE
: 音声入力に関連するカスタムキーコードです。 -
BTN3
,BTN1
: マウスのボタン3とボタン1です。 -
LEFT
,RGHT
: 標準の矢印キーです。 -
TAB
: タブキーです。 -
ENT
: エンターキーです。 -
SPC
: スペースキーです。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_1
レイヤー
_1
レイヤーは、親指で切り替えるレイヤーであり主にタップダンス機能を利用したアルファベット入力、母音に特化したキー配置を定義しています。
[_1] = LAYOUT(
TD(L), TD(O), TD(E), TD(Y), TD(W), /* */ TD(W), TD(Y), TD(E), TD(O), TD(L),
TD(A), TD(J), TD(C), TD(I), TD(F), /* */ TD(F), TD(I), TD(C), TD(J), TD(A),
TD(Q), XXXXXXX, XXXXXXX, TD(U), TD(V), /* */ TD(V), TD(U), XXXXXXX, XXXXXXX, TD(Q),
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JPN, /* */ JPN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
-
TD(L)
: これは、L
キーのタップダンスを意味します。先ほど「タップダンスの定義」で解説したTD_LTR
マクロによって、1回タップで小文字のl
、2回タップで大文字のL
が入力されるように設定されています。他のアルファベットも同様です。 -
XXXXXXX
: キーが割り当てられていないことを示します。 -
JPN
: 日本語入力モードに切り替えるためのキーコードです。
_2
レイヤー
_2
レイヤーは、_1
レイヤーと同様に親指で切り替えるレイヤーであり、主にタップダンス機能を利用したアルファベット入力、子音に特化したキー配置を定義しています。
[_2] = LAYOUT(
TD(X), TD(S), TD(T), TD(R), TD(P), /* */ TD(P), TD(R), TD(T), TD(S), TD(X),
TD(K), TD(Z), TD(D), TD(N), TD(H), /* */ TD(H), TD(N), TD(D), TD(Z), TD(K),
TD(G), XXXXXXX, XXXXXXX, TD(M), TD(B), /* */ TD(B), TD(M), XXXXXXX, XXXXXXX, TD(G),
XXXXXXX, XXXXXXX, XXXXXXX, ENG, XXXXXXX, /* */ XXXXXXX, ENG, XXXXXXX, XXXXXXX, XXXXXXX),
-
TD(X)
: これは、X
キーのタップダンスを意味します。TD_LTR
マクロによって、1回タップで小文字のx
、2回タップで大文字のX
が入力されるように設定されています。他のアルファベットも同様です。 -
XXXXXXX
: キーが割り当てられていないことを示します。 -
ENG
: 英語入力モードに切り替えるためのキーコードです。
_3
レイヤー
_3
レイヤーは、親指を少し上にあげて切り替えるレイヤーであり主にファンクションキー、ナビゲーション、コピー&ペーストなどのショートカットに特化したキー配置を定義しています。
[_3] = LAYOUT(
KC_F2, S(HOME), S(END), S(KC_UP), C(KC_A), /* */ C(KC_A), S(KC_UP), S(HOME), S(END), KC_F2,
RCS(KC_V), S(LEFT), S(RGHT), C(KC_C), C(KC_X), /* */ C(KC_X), C(KC_C), S(LEFT), S(RGHT), RCS(KC_V),
C(KC_V), XXXXXXX, XXXXXXX, S(KC_DOWN), XXXXXXX, /* */ XXXXXXX, S(KC_DOWN), XXXXXXX, XXXXXXX, C(KC_V),
XXXXXXX, XXXXXXX, XXXXXXX, S(DEL), A(KC_F4), /* */ A(KC_F4), S(DEL), XXXXXXX, XXXXXXX, XXXXXXX),
-
KC_F2
: ファンクションキーF2
です。主にリネームに利用しています。 -
S(HOME)
,S(END)
:Shift
キーを押しながらHome
、End
キーを送信します。これにより、行の先頭から現在位置まで、または現在位置から行の末尾までを選択できます。 -
S(KC_UP)
,S(KC_DOWN)
:Shift
キーを押しながら上矢印、下矢印キーを送信します。これにより、テキストを複数行選択できます。 -
C(KC_A)
:Ctrl
キーを押しながらA
キーを送信します。これにより、すべて選択(Select All)を実行できます。 -
RCS(KC_V)
:Ctrl + Shift + V
を送信します。これは、ターミナルなどでテキストを貼り付ける際によく使われます。 -
S(LEFT)
,S(RGHT)
:Shift
キーを押しながら左矢印、右矢印キーを送信します。これにより、テキストを文字単位で選択できます。 -
C(KC_C)
,C(KC_X)
,C(KC_V)
: それぞれコピー(Copy)、カット(Cut)、ペースト(Paste)のショートカットです。 -
XXXXXXX
: キーが割り当てられていないことを示します。 -
S(DEL)
:Shift
キーを押しながらDelete
キーを送信します。これにより、選択した項目を完全に削除できます。 -
A(KC_F4)
:Alt
キーを押しながらF4
キーを送信します。これにより、アクティブなウィンドウを閉じることができます。
_4
レイヤー
_4
レイヤーは、人差し指を少し伸ばして切り替えるレイヤーであり、主にアプリケーションの起動ショートカットに特化したキー配置を定義しています。
[_4] = LAYOUT(
MINECRAFT, MOUSE, KEYBOARD, CHROME, APPFINDER, /* */ APPFINDER, CHROME, KEYBOARD, MOUSE, MINECRAFT,
SOUND, APPEARANCE, WINDOW, QK_BOOT, XXXXXXX, /* */ XXXXXXX, QK_BOOT, WINDOW, APPEARANCE, SOUND,
OBS, XXXXXXX, XXXXXXX, FIREFOX, VSCODE, /* */ VSCODE, FIREFOX, XXXXXXX, XXXXXXX, OBS,
XXXXXXX, XXXXXXX, XXXXXXX, THUNAR, TERMINAL, /* */ TERMINAL, THUNAR, XXXXXXX, XXXXXXX, XXXXXXX),
-
MINECRAFT
: Minecraft Launcherを起動するショートカットです。 -
MOUSE
: マウス設定を開くショートカットです。 -
KEYBOARD
: キーボード設定を開くショートカットです。 -
CHROME
: Google Chromeを起動するショートカットです。 -
APPFINDER
: アプリケーションファインダーを起動するショートカットです。 -
SOUND
: サウンド設定を開くショートカットです。 -
APPEARANCE
: 外観設定を開くショートカットです。 -
WINDOW
: ウィンドウマネージャー設定を開くショートカットです。 -
QK_BOOT
: キーボードをブートローダーモードにするためのキーコードです。ファームウェアの書き込みなどに使用します。 -
OBS
: OBS Studioを起動するショートカットです。 -
FIREFOX
: Firefoxを起動するショートカットです。 -
VSCODE
: VS Codeを起動するショートカットです。 -
THUNAR
: Thunarファイルマネージャーを起動するショートカットです。 -
TERMINAL
: ターミナルを起動するショートカットです。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_5
レイヤー
_5
レイヤーは、人差し指で切り替えるレイヤーであり、主に記号入力や特定のショートカットに特化したキー配置を定義しています。
[_5] = LAYOUT(
KC_HASH, KC_COLN, KC_SLSH, XXXXXXX, XXXXXXX, /* */ XXXXXXX, XXXXXXX, KC_SLSH, KC_COLN, KC_HASH,
C(KC_T), KC_EXLM, KC_QUES, XXXXXXX, BTN2, /* */ BTN2, XXXXXXX, KC_QUES, KC_EXLM, C(KC_T),
KC_UNDS, XXXXXXX, XXXXXXX, C(KC_Y), C(KC_Z), /* */ C(KC_Z), C(KC_Y), XXXXXXX, XXXXXXX, KC_UNDS,
XXXXXXX, XXXXXXX, XXXXXXX, RCS(KC_T), C(KC_W), /* */ C(KC_W), RCS(KC_T), XXXXXXX, XXXXXXX, XXXXXXX),
-
KC_HASH
: ハッシュ記号(#
)です。 -
KC_COLN
: コロン(:
)です。 -
KC_SLSH
: スラッシュ(/
)です。 -
C(KC_T)
:Ctrl
キーを押しながらT
キーを送信します。これは、新しいタブを開くショートカットとしてよく使われます。 -
KC_EXLM
: 感嘆符(!
)です。 -
KC_QUES
: 疑問符(?
)です。 -
BTN2
: マウスのボタン2です。 -
KC_UNDS
: アンダーバー(_
)です。 -
C(KC_Y)
:Ctrl
キーを押しながらY
キーを送信します。これは、やり直し(Redo)のショートカットとしてよく使われます。 -
C(KC_Z)
:Ctrl
キーを押しながらZ
キーを送信します。これは、元に戻す(Undo)のショートカットとしてよく使われます。 -
RCS(KC_T)
:Ctrl + Shift + T
を送信します。これは、閉じたタブを再度開くショートカットとしてよく使われます。 -
C(KC_W)
:Ctrl
キーを押しながらW
キーを送信します。これは、現在のタブやウィンドウを閉じるショートカットとしてよく使われます。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_6
レイヤー
_6
レイヤーは、中指で切り替えるレイヤーであり、主にシステム操作や特定のショートカットに特化したキー配置を定義しています。
[_6] = LAYOUT(
KC_INSERT, KC_PSCR, XXXXXXX, C(HOME), A(KC_S), /* */ A(KC_S), C(HOME), XXXXXXX, KC_PSCR, KC_INSERT,
KC_PAUSE, XXXXXXX, XXXXXXX, A(TAB), XXXXXXX, /* */ XXXXXXX, A(TAB), XXXXXXX, XXXXXXX, KC_PAUSE,
XXXXXXX, XXXXXXX, XXXXXXX, C(END), C(KC_H), /* */ C(KC_H), C(END), XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, RCS(KC_C), C(KC_F), /* */ C(KC_F), RCS(KC_C), XXXXXXX, XXXXXXX, XXXXXXX),
-
KC_INSERT
: インサートキーです。 -
KC_PSCR
: プリントスクリーンキーです。OBSの録画開始ボタンに設定しています。 -
C(HOME)
:Ctrl
キーを押しながらHome
キーを送信します。これは、ページの先頭に移動するショートカットとしてよく使われます。 -
A(KC_S)
:Alt
キーを押しながらS
キーを送信します。Scrotでスクリーンショットを撮影する設定をしています。 -
KC_PAUSE
: ポーズキーです。OBSの録画終了ボタンに設定しています。 -
A(TAB)
:Alt
キーを押しながらTab
キーを送信します。これは、ウィンドウを切り替えるショートカットとしてよく使われます。 -
C(END)
:Ctrl
キーを押しながらEnd
キーを送信します。これは、ページの最後に移動するショートカットとしてよく使われます。 -
C(KC_H)
:Ctrl
キーを押しながらH
キーを送信します。これは、検索と置換のショートカットとしてよく使われます。 -
RCS(KC_C)
:Ctrl + Shift + C
を送信します。これは、Googleドキュメントの文字数カウントのショートカットです。 -
C(KC_F)
:Ctrl
キーを押しながらF
キーを送信します。これは、検索(Find)のショートカットとしてよく使われます。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_7
レイヤー
_7
レイヤーは、薬指で切り替えるレイヤーであり、主に括弧や算術記号の入力に特化したキー配置を定義しています。
[_7] = LAYOUT(
XXXXXXX, XXXXXXX, PRN, ABK, XXXXXXX, /* */ XXXXXXX, ABK, PRN, XXXXXXX, XXXXXXX,
CBR, XXXXXXX, XXXXXXX, BRC, XXXXXXX, /* */ XXXXXXX, BRC, XXXXXXX, XXXXXXX, CBR,
XXXXXXX, XXXXXXX, XXXXXXX, KC_PLUS, KC_MINS, /* */ KC_MINS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, KC_ASTR, KC_EQL, /* */ KC_EQL, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX),
-
PRN
: 先ほど「カスタムキーコードの定義」で解説した、()
を入力するためのカスタムキーコードです。 -
ABK
: 先ほど「カスタムキーコードの定義」で解説した、{}
を入力するためのカスタムキーコードです。 -
CBR
: 先ほど「カスタムキーコードの定義」で解説した、<>
を入力するためのカスタムキーコードです。 -
BRC
: 先ほど「カスタムキーコードの定義」で解説した、[]
を入力するためのカスタムキーコードです。 -
KC_PLUS
: プラス記号(+
)です。 -
KC_MINS
: マイナス記号(-
)です。 -
KC_ASTR
: アスタリスク(*
)です。 -
KC_EQL
: イコール記号(=
)です。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_8
レイヤー
_8
レイヤーは、小指を少し上に上げて切り替えるレイヤーであり、主に記号入力に特化したキー配置を定義しています。
[_8] = LAYOUT(
XXXXXXX, KC_SCLN, KC_BSLS, KC_AMPR, KC_TILD, /* */ KC_TILD, KC_AMPR, KC_BSLS, KC_SCLN, XXXXXXX,
XXXXXXX, KC_PIPE, KC_DLR, KC_AT, KC_PERC, /* */ KC_PERC, KC_AT, KC_DLR, KC_PIPE, XXXXXXX,
KC_CAPS, XXXXXXX, XXXXXXX, KC_CIRC, KC_GRV, /* */ KC_GRV, KC_CIRC, XXXXXXX, XXXXXXX, KC_CAPS,
XXXXXXX, XXXXXXX, XXXXXXX, KC_DQUO, KC_QUOT, /* */ KC_QUOT, KC_DQUO, XXXXXXX, XXXXXXX, XXXXXXX),
-
KC_SCLN
: セミコロン(;
)です。 -
KC_BSLS
: バックスラッシュ(\
)です。 -
KC_AMPR
: アンパサンド(&
)です。 -
KC_TILD
: チルダ(~
)です。 -
KC_PIPE
: パイプ(|
)です。 -
KC_DLR
: ドル記号($
)です。 -
KC_AT
: アットマーク(@
)です。 -
KC_PERC
: パーセント記号(%
)です。 -
KC_CAPS
: Caps Lockキーです。 -
KC_CIRC
: キャレット(^
)です。 -
KC_GRV
: グレイブアクセント(`
)です。 -
KC_DQUO
: ダブルクォーテーション("
)です。 -
KC_QUOT
: シングルクォーテーション('
)です。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_9
レイヤー
_9
レイヤーは、小指で切り替えるレイヤーであり、主にファンクションキー、ページナビゲーション、メディアコントロール、タブ操作などに特化したキー配置を定義しています。
[_9] = LAYOUT(
TG(_11), RCS(KC_PGUP), RCS(KC_PGDN), KC_F7, KC_F5, /* */ KC_F5, KC_F7, RCS(KC_PGUP), RCS(KC_PGDN), TG(_11),
XXXXXXX, KC_F8, KC_F11, KC_MPLY, KC_F10, /* */ KC_F10, KC_MPLY, KC_F11, KC_F8, XXXXXXX,
KC_MUTE, XXXXXXX, XXXXXXX, RCS(TAB), C(TAB), /* */ RCS(TAB), C(TAB), XXXXXXX, XXXXXXX, KC_MUTE,
XXXXXXX, XXXXXXX, XXXXXXX, A(LEFT), A(RGHT), /* */ A(LEFT), A(RGHT), XXXXXXX, XXXXXXX, XXXXXXX),
-
TG(_11)
:_11
レイヤーをトグル(オン/オフ切り替え)します。 -
RCS(KC_PGUP)
,RCS(KC_PGDN)
:Ctrl + Shift + Page Up
、Ctrl + Shift + Page Down
を送信します。これは、ブラウザのタブ移動などによく使われます。 -
KC_F7
,KC_F5
,KC_F8
,KC_F11
,KC_F10
: ファンクションキーです。 -
KC_MPLY
: メディア再生/一時停止です。 -
KC_MUTE
: ミュートです。 -
RCS(TAB)
:Ctrl + Shift + Tab
を送信します。これは、タブを逆順に切り替えるショートカットとしてよく使われます。 -
C(TAB)
:Ctrl + Tab
を送信します。これは、タブを順順に切り替えるショートカットとしてよく使われます。 -
A(LEFT)
,A(RGHT)
:Alt
キーを押しながら左矢印、右矢印キーを送信します。これは、ブラウザの戻る/進む操作などによく使われます。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_10
レイヤー
_10
レイヤーは、小指を少し下に下げて切り替えるレイヤーであり、主に数字入力とメディアコントロールに特化したキー配置を定義しています。
[_10] = LAYOUT(
S(KC_MUTE), KC_1, KC_2, KC_3, KC_4, /* */ KC_1, KC_2, KC_3, KC_4, S(KC_MUTE),
XXXXXXX, KC_5, KC_6, KC_7, KC_8, /* */ KC_5, KC_6, KC_7, KC_8, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, KC_9, KC_0, /* */ KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_VOLU, /* */ KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX),
-
S(KC_MUTE)
:Shift
キーを押しながらミュートキーを送信します。 -
KC_1
〜KC_0
: 数字キーです。 -
XXXXXXX
: キーが割り当てられていないことを示します。 -
KC_VOLD
: 音量ダウンです。 -
KC_VOLU
: 音量アップです。
_11
レイヤー
_11
レイヤーは、マインクラフトで遊ぶためのレイヤーであり、主にマインクラフトの操作に特化したキー配置を定義しています。
[_11] = LAYOUT(
TG(_11), KC_E, BTN2, SPC, KC_Q, /* */ KC_Q, SPC, BTN2, KC_E, TG(_11),
LT(_12,ESC), BTN2, KC_LSFT, BTN1, KC_F3, /* */ KC_F3, BTN1, KC_LSFT, BTN2, LT(_12,ESC),
A(TAB), XXXXXXX, XXXXXXX, S(BTN1), C(KC_W), /* */ C(KC_W), S(BTN1), XXXXXXX, XXXXXXX, A(TAB),
XXXXXXX, XXXXXXX, XXXXXXX, S(KC_S), S(KC_W), /* */ S(KC_W), S(KC_S), XXXXXXX, XXXXXXX, XXXXXXX),
-
TG(_11)
:_11
レイヤーをトグル(オン/オフ切り替え)します。このレイヤー内で再度TG(_11)
を押すことで、元のレイヤーに戻ることができます。 -
KC_E
:E
キーです。これはマインクラフトでインベントリを開く設定です。 -
BTN2
: マウスのボタン2です。これはマインクラフトでアイテムを置くときなどの設定です。 -
SPC
: スペースキーです。これはマインクラフトのジャンプの設定です。 -
KC_Q
:Q
キーです。これはマインクラフトでアイテムを手放す時の設定です。 -
LT(_12,ESC)
:_12
レイヤーに一時的に切り替え、タップするとESC
キーコードを送信します。 -
KC_LSFT
: 左Shiftキーです。これはマインクラフトでスニークするときの設定です。 -
BTN1
: マウスのボタン1です。これはマインクラフトでアイテムを壊したりする時の設定です。 -
KC_F3
: ファンクションキーF3
です。これはマインクラフトでデバッグ画面を出すための設定です。 -
A(TAB)
:Alt
キーを押しながらTab
キーを送信します。これは、ウィンドウを切り替えるショートカットとしてよく使われます。 -
S(BTN1)
:Shift
キーを押しながらマウスのボタン1を送信します。これはマインクラフトでシフトをしながらマウスクリックを押すときの設定です。 -
C(KC_W)
:Ctrl
キーを押しながらW
キーを送信します。これは、マインクラフトでダッシュで前に進む設定です。 -
S(KC_S)
:Shift
キーを押しながらS
キーを送信します。これはマインクラフトでスニークして後ろに下がる設定です。 -
S(KC_W)
:Shift
キーを押しながらW
キーを送信します。これはマインクラフトでスニークして前に進む設定です。 -
XXXXXXX
: キーが割り当てられていないことを示します。
_12
レイヤー
_12
レイヤーは、マインクラフトで遊ぶためのレイヤーであり、主に数字入力(アイテム選択)、言語切り替え、通常の前後移動などのキー配置を定義しています。
[_12] = LAYOUT(
XXXXXXX, KC_1, KC_2, KC_3, KC_4, /* */ KC_1, KC_2, KC_3, KC_4, XXXXXXX,
XXXXXXX, KC_5, KC_6, KC_7, KC_8, /* */ KC_5, KC_6, KC_7, KC_8, XXXXXXX,
ENG, XXXXXXX, XXXXXXX, KC_F, KC_9, /* */ KC_9, KC_F, XXXXXXX, XXXXXXX, ENG,
XXXXXXX, XXXXXXX, XXXXXXX, KC_S, KC_W, /* */ KC_W, KC_S, XXXXXXX, XXXXXXX, XXXXXXX),
-
KC_1
〜KC_8
,KC_9
: 数字キーです。 -
XXXXXXX
: キーが割り当てられていないことを示します。 -
ENG
: 英語入力モードに切り替えるためのキーコードです。 -
KC_F
:F
キーです。これはJava版のマインクラフトで右手に持っているアイテムを左手に(オフハンド)をするときの設定です。 -
KC_S
:S
キーです。これはマインクラフトで後ろに下がる設定です。 -
KC_W
:W
キーです。これはマインクラフトで前に進む設定です。
まとめ
CTRL配列については、ほとんど配置の更新をしておらず、最近はキーマップやレイヤーの細かな変更などのカスタマイズを行っていました。配置はしてあるものの使わないキーなどもあるため、まだまだ改良の余地はあるものの、その都度違和感や使い心地を細かくチェックしながら自分好みのキーボードレイアウトになったと考えています。
物理的なキーは15キーですが、組み合わせによってその10倍以上のキーを使えるようになっており、覚えるのが大変ということも最近は感じたことはありません。主に音声入力で作業をしていること、
特に最近はGemini CLI + VS Code + 音声入力の組み合わせによって、キー入力そのものも少なくなっています。コマンドの実行さえも音声で入力したものをGemini CLIに伝えるだけで実行してくれるので手入力はほとんどしなくなりました。
ただし、QiitaではAIに書かせてはいる、もしくは人力と組み合わせているものの、やはり納品できるレベルにはならないということ、同時に著作権や目に見えない部分の法的なことを考えると、自分自身で文章を作成するスタンスを変更してはいません。
ライターとして納品する文章については、音声入力を基軸として、全てオリジナルで作成しているということも明記しておきます。
その他、何か面白いアイディアやアドバイスがあれば是非とも教えてくれると嬉しいです!
また、ライターとしてのお仕事も募集しておりますので、気軽にお声がけください!