0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちは、Ctrlです。

CTRL配列 を基軸としたキーマップを「CTRL配列 v.6.0」のメジャーアップデートとしてまとめました。2025年最終盤と言えるバージョンです。

使用しているPCB:物理キーボード

使用している物理キーボードは@takashicompanyさんのWorm Eatenです。

keymap.c

#include QMK_KEYBOARD_H
enum layer_number {
    _BASE = 0,_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,
};

enum custom_keycodes {
    PRN = SAFE_RANGE,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 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,LAH,RAE,UCH,DCE,USH,DSE,
};

#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),
    [LAH] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT,      KC_HOME),
    [RAE] = ACTION_TAP_DANCE_DOUBLE(KC_RGHT,      KC_END),
    [UCH] = ACTION_TAP_DANCE_DOUBLE(KC_UP,        C(KC_HOME)),
    [DCE] = ACTION_TAP_DANCE_DOUBLE(KC_DOWN,      C(KC_END)),
    [USH] = ACTION_TAP_DANCE_DOUBLE(S(KC_UP),     RCS(KC_HOME)),
    [DSE] = ACTION_TAP_DANCE_DOUBLE(S(KC_DOWN),   RCS(KC_END)),
};

#define INS          KC_INS
#define COMM         KC_COMM
#define DOT          KC_DOT
#define BSPC         KC_BSPC
#define PGUP         KC_PGUP
#define PGDN         KC_PGDN
#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 PLUS         KC_PLUS
#define MINS         KC_MINS
#define UNDS         KC_UNDS

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
    LT(_7,TAB),   TD(LAH),      TD(RAE),      TD(UCH),      LT(_0,BTN3),  /*         */     LT(_0,BTN3),  TD(UCH),      LT(_3,COMM),  LT(_6,DOT),   LT(_7,TAB),
    LT(_4,ENT),   LT(_6,DOT),   LT(_3,COMM),  LT(_2,BTN1),  LT(_1,BTN2),  /*         */     LT(_1,BTN2),  LT(_2,BTN1),  TD(LAH),      TD(RAE),      LT(_4,ENT),
    LT(_8,ESC),   XXXXXXX,      XXXXXXX,      TD(DCE),      LT(_5,SPC),   /*         */     LT(_5,SPC),   TD(DCE),      XXXXXXX,      XXXXXXX,      LT(_8,ESC),
    XXXXXXX,      XXXXXXX,      XXXXXXX,      LT(_10,DEL),  LT(_9,BSPC),  /*         */     LT(_9,BSPC),  LT(_10,DEL),  XXXXXXX,      XXXXXXX,      XXXXXXX),
[_0] = LAYOUT(
    QK_BOOT,      C(KC_F),      C(KC_H),      RCS(KC_C),    _______,      /*         */     _______,      RCS(KC_C),    C(KC_H),      C(KC_F),      QK_BOOT,
    S(ENT),       XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      /*         */     XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      S(ENT),
    A(KC_F),      XXXXXXX,      XXXXXXX,      C(KC_Y),      C(KC_Z),      /*         */     C(KC_Z),      C(KC_Y),      XXXXXXX,      XXXXXXX,      A(KC_F),
    XXXXXXX,      XXXXXXX,      XXXXXXX,      S(DEL),       RCS(KC_S),    /*         */     RCS(KC_S),    S(DEL),       XXXXXXX,      XXXXXXX,      XXXXXXX),
[_1] = LAYOUT(
    XXXXXXX,      XXXXXXX,      XXXXXXX,      A(TAB),       XXXXXXX,      /*         */     XXXXXXX,      A(TAB),       XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      _______,      /*         */     _______,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      G(TAB),       /*         */     G(TAB),       XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      G(MINS),      G(PLUS),      /*         */     G(MINS),      G(PLUS),      XXXXXXX,      XXXXXXX,      XXXXXXX),
[_2] = LAYOUT(
    XXXXXXX,      RCS(KC_T),    C(KC_T),      XXXXXXX,      XXXXXXX,      /*         */     XXXXXXX,      XXXXXXX,      C(KC_T),      RCS(KC_T),    XXXXXXX,
    C(KC_W),      A(LEFT),      A(RGHT),      _______,      XXXXXXX,      /*         */     XXXXXXX,      _______,      A(LEFT),      A(RGHT),      C(KC_W),
    XXXXXXX,      XXXXXXX,      XXXXXXX,      RCS(TAB),     C(TAB),       /*         */     RCS(TAB),     C(TAB),       XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      RCS(PGUP),    RCS(PGDN),    /*         */     RCS(PGUP),    RCS(PGDN),    XXXXXXX,      XXXXXXX,      XXXXXXX),
[_3] = LAYOUT(
    XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      /*         */     XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,
    KC_UNDS,      KC_TILD,      _______,      KC_MINS,      KC_PLUS,      /*         */     KC_PLUS,      KC_MINS,      _______,      KC_TILD,      KC_UNDS,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_COLN,      KC_SLSH,      /*         */     KC_SLSH,      KC_COLN,      XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_EXLM,      KC_QUES,      /*         */     KC_QUES,      KC_EXLM,      XXXXXXX,      XXXXXXX,      XXXXXXX),
[_4] = LAYOUT(
    XXXXXXX,      KC_F1,        KC_F2,        KC_F3,        KC_F4,        /*         */     KC_F1,        KC_F2,        KC_F3,        KC_F4,        XXXXXXX,
    _______,      KC_F5,        KC_F6,        KC_F7,        KC_F8,        /*         */     KC_F5,        KC_F6,        KC_F7,        KC_F8,        _______,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_F9,        KC_F10,       /*         */     KC_F9,        KC_F10,       XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_F11,       KC_F12,       /*         */     KC_F11,       KC_F12,       XXXXXXX,      XXXXXXX,      XXXXXXX),
[_5] = LAYOUT(
    XXXXXXX,      S(LEFT),      S(RGHT),      TD(USH),      C(KC_A),      /*         */     C(KC_A),      TD(USH),      S(LEFT),      S(RGHT),      XXXXXXX,
    C(KC_V),      S(HOME),      S(END),       C(KC_C),      C(KC_X),      /*         */     C(KC_X),      C(KC_C),      S(HOME),      S(END),       C(KC_V),
    RCS(KC_V),    XXXXXXX,      XXXXXXX,      TD(DSE),      _______,      /*         */     _______,      TD(DSE),      XXXXXXX,      XXXXXXX,      RCS(KC_V),
    XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      A(KC_F4),     /*         */     A(KC_F4),     XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX),
[_6] = LAYOUT(
    XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      /*         */     XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,
    ABK,          _______,      PRN,          BRC,          CBR,          /*         */     CBR,          BRC,          PRN,          _______,      ABK,    
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_SCLN,      KC_BSLS,      /*         */     KC_BSLS,      KC_SCLN,      XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_DQUO,      KC_QUOT,      /*         */     KC_DQUO,      KC_TILD,      XXXXXXX,      XXXXXXX,      XXXXXXX),
[_7] = LAYOUT(
    _______,      KC_GRV,       KC_CIRC,      KC_HASH,      KC_DLR,       /*         */     KC_DLR,       KC_HASH,      KC_CIRC,      KC_GRV,       _______,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_EQL,       KC_ASTR,      /*         */     KC_ASTR,      KC_EQL,       XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_PIPE,      KC_PERC,      /*         */     KC_PERC,      KC_PIPE,      XXXXXXX,      XXXXXXX,      XXXXXXX,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      KC_AMPR,      KC_AT,        /*         */     KC_AT,        KC_AMPR,      XXXXXXX,      XXXXXXX,      XXXXXXX),
[_8] = 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,
    _______,      XXXXXXX,      XXXXXXX,      KC_9,         KC_0,         /*         */     KC_9,         KC_0,         XXXXXXX,      XXXXXXX,      _______,
    XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      /*         */     XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX),
[_9] = 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,      XXXXXXX,      _______,      /*         */     _______,      XXXXXXX,      XXXXXXX,      XXXXXXX,      XXXXXXX),
[_10] = 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,      /*         */     XXXXXXX,      _______,      XXXXXXX,      XXXXXXX,      XXXXXXX),
};

最後に

最近は左手片手のみで利用しており、右手で使うことが少なくなりましたが、また左肩が痛くなった時のために残してあります。

両手での入力も目指していましたが、やはり片手でどちらかの手はマウスに置きっぱなしにしたいので左右で使えるレイヤーのみに絞り込みました。

配置における大きな違いは左右のアローキーを薬指と中指に配置し、ホームポジションでカーソル気の移動がしやすくなったことです。

Upload Labs というゲームにハマったことが理由でもあり、結果としてマインクラフトなどのゲームも専用のレイヤーを使わなくても遊びやすくなりました。

ブラウザの操作やVS Code のキーボードショートカットは主に人差し指、記号の入力は小指、薬指、中指、文字の入力は親指が担当する形です。

今まではそれぞれのレイヤーに入力しや茶飲みを追求してバラバラに配置していましたが、Upload Labsをプレイする中で整理整頓に対する考え方なども変わり、違った視点から再構築できたのは非常にうれしかったです。

最後までお読みいただきありがとうございました!

面白いアイデアやアドバイスなどありましたら、是非ともお願いします!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?