keymap: add r-okm keymaps for crkbd and 7skb

- add custom keymaps for `crkbd` and `7skb` keyboards
- add shared user code in `users/r-okm/` with custom keycodes
- include macros for arrows, window switching, alt-tab, etc.
- configure tapping term and permissive hold settings
This commit is contained in:
r-okm 2025-12-09 10:59:38 +09:00
commit 434f5ef36e
No known key found for this signature in database
9 changed files with 349 additions and 0 deletions

View file

@ -0,0 +1,4 @@
#pragma once
// #define MASTER_LEFT
#define MASTER_RIGHT

View file

@ -0,0 +1,69 @@
/*
Copyright 2019 @foostan
Copyright 2020 Drashna Jaelre <@drashna>
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/>.
*/
enum layer_NUMBER {
_QWERTY = 0,
_FN,
_NUMBER,
};
#include QMK_KEYBOARD_H
#include "r-okm.h"
#include "keymap_japanese.h" // For JP_ keycodes
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LALT_T(JP_AT),
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN, JP_COLN,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, LGUI_T(JP_BSLS),
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
JP_MHEN, MO(1), KC_SPC, KC_ENT, MO(2), JP_HENK
//`--------------------------' `--------------------------'
),
[_FN] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
Z_TAB, KC_F12, LCTL(KC_W), LCTL(KC_PGUP), LCTL(KC_PGDN), LCS(KC_T), KC_HOME, ESC_MHEN, XXXXXXX, KC_END, JP_EQL, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, LCTL(KC_A), LCTL(KC_S), LCTL(KC_D), LCTL(KC_F), LCTL(KC_G), Z_LEFT, Z_DOWN, Z_UP, Z_RIGHT, JP_SCLN, JP_MINS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_B), KC_BSPC, KC_DEL, JP_LBRC, JP_RBRC, ARROW_1, LGUI_T(JP_CIRC),
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_______, _______, _______, LALT(KC_ENT), _______, _______
//`--------------------------' `--------------------------'
),
[_NUMBER] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
KC_TAB, KC_F11, KC_F2, KC_F3, LALT(KC_F4), KC_F5, X_ONE, X_TWO, X_THREE, X_FOUR, X_FIVE, X_SIX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, JP_COLN,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
KC_LSFT, JP_EXLM, JP_DQUO, JP_HASH, JP_DLR, JP_PERC, JP_AMPR, JP_QUOT, JP_LPRN, JP_RPRN, LSFT(JP_YEN), LGUI_T(JP_BSLS),
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_______, _______, _______, KC_ENT, _______, _______
//`--------------------------' `--------------------------'
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return process_record_user_rokm(keycode, record);
}

View file

@ -0,0 +1,2 @@
DEBOUNCE_TYPE = sym_eager_pr
MACROS_ENABLE = yes

View file

@ -0,0 +1,76 @@
#include QMK_KEYBOARD_H
#include "r-okm.h"
#include "keymap_japanese.h" // For JP_ keycodes
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layer_NUMBER {
_QWERTY = 0,
_FN,
_NUMBER,
_DEVICE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSLS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_LBRC, KC_RBRC,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN, JP_COLN, KC_ENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, MO(_DEVICE),
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_LGUI, KC_LALT, LT(_FN, JP_MHEN), KC_SPC, KC_ENT, LT(_NUMBER, JP_HENK), KC_RALT, KC_RGUI
//`---------------------------------------------| |--------------------------------------------'
),
[_FN] = LAYOUT(
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
Z_TAB,KC_F12,LCTL(KC_W),LCTL(KC_PGUP),LCTL(KC_PGDN),LCS(KC_T), KC_HOME,ESC_MHEN, _______, KC_END, JP_EQL, _______, _______, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
_______,LCTL(KC_A),LCTL(KC_S),LCTL(KC_D),LCTL(KC_F),LCTL(KC_G), Z_LEFT,Z_DOWN, Z_UP, Z_RIGHT, _______, JP_MINS, LALT(KC_ENT),
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_______,LCTL(KC_Z),LCTL(KC_X),LCTL(KC_C),LCTL(KC_V),LCTL(KC_B), KC_BSPC,KC_DEL,JP_LBRC, JP_RBRC, ARROW_1, JP_CIRC, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______, LALT(KC_ENT), _______, _______, _______
//`---------------------------------------------| |--------------------------------------------'
),
[_NUMBER] = LAYOUT(
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
KC_TAB, KC_F11, KC_F2, KC_F3, LALT(KC_F4), KC_F5, X_ONE, X_TWO, X_THREE, X_FOUR, X_FIVE, X_SIX, X_SEVEN, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, JP_COLN, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_______, JP_EXLM, JP_DQUO, JP_HASH, JP_DLR, JP_PERC, JP_AMPR, JP_QUOT, JP_LPRN, JP_RPRN,LSFT(JP_YEN),XXXXXXX,XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______, KC_ENT, _______, _______, _______
//`---------------------------------------------| |--------------------------------------------'
),
[_DEVICE] = LAYOUT(
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
LCA(KC_DEL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
//`---------------------------------------------| |--------------------------------------------'
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return process_record_user_rokm(keycode, record);
}

View file

@ -0,0 +1 @@
MACROS_ENABLE = yes

6
users/r-okm/config.h Normal file
View file

@ -0,0 +1,6 @@
#pragma once
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 180
#define PERMISSIVE_HOLD
#define RETRO_TAPPING

161
users/r-okm/r-okm.c Normal file
View file

@ -0,0 +1,161 @@
#include QMK_KEYBOARD_H
#include "r-okm.h"
#include "sendstring_japanese.h" // macro sendstring for jis keyboard マクロ文字列送信時に日本語キーボード設定での文字化け回避
bool process_record_user_rokm(uint16_t keycode, keyrecord_t *record) {
static bool is_lalt_pressed = false;
static bool is_lwin_pressed = false;
bool result = false;
switch (keycode) {
#ifdef MACROS_ENABLE
case ARROW_1:
if (record->event.pressed) {
SEND_STRING("->");
}
break;
case ARROW_2:
if (record->event.pressed) {
SEND_STRING("=>");
}
break;
#endif
case Z_TAB:
if (record->event.pressed) {
register_code(KC_LALT);
register_code(KC_TAB);
is_lalt_pressed = true;
} else {
unregister_code(KC_TAB);
}
break;
case Z_UP:
if (record->event.pressed) {
register_code(KC_UP);
} else {
unregister_code(KC_UP);
}
break;
case Z_DOWN:
if (record->event.pressed) {
register_code(KC_DOWN);
} else {
unregister_code(KC_DOWN);
}
break;
case Z_LEFT:
if (record->event.pressed) {
register_code(KC_LEFT);
} else {
unregister_code(KC_LEFT);
}
break;
case Z_RIGHT:
if (record->event.pressed) {
register_code(KC_RIGHT);
} else {
unregister_code(KC_RIGHT);
}
break;
case X_ONE:
if (record->event.pressed) {
register_code(KC_LWIN);
register_code(KC_1);
is_lwin_pressed = true;
} else {
unregister_code(KC_1);
}
break;
case X_TWO:
if (record->event.pressed) {
register_code(KC_LWIN);
register_code(KC_2);
is_lwin_pressed = true;
} else {
unregister_code(KC_2);
}
break;
case X_THREE:
if (record->event.pressed) {
register_code(KC_LWIN);
register_code(KC_3);
is_lwin_pressed = true;
} else {
unregister_code(KC_3);
}
break;
case X_FOUR:
if (record->event.pressed) {
register_code(KC_LWIN);
register_code(KC_4);
is_lwin_pressed = true;
} else {
unregister_code(KC_4);
}
break;
case X_FIVE:
if (record->event.pressed) {
register_code(KC_LWIN);
register_code(KC_5);
is_lwin_pressed = true;
} else {
unregister_code(KC_5);
}
break;
case X_SIX:
if (record->event.pressed) {
register_code(KC_LWIN);
register_code(KC_6);
is_lwin_pressed = true;
} else {
unregister_code(KC_6);
}
break;
case X_SEVEN:
if (record->event.pressed) {
register_code(KC_LWIN);
register_code(KC_7);
is_lwin_pressed = true;
} else {
unregister_code(KC_7);
}
break;
case ESC_MHEN:
if (record->event.pressed) {
register_code(KC_ESC);
register_code(JP_MHEN);
} else {
unregister_code(KC_ESC);
unregister_code(JP_MHEN);
}
break;
default:
if (is_lalt_pressed) {
unregister_code(KC_LALT);
is_lalt_pressed = false;
}
if (is_lwin_pressed) {
unregister_code(KC_LWIN);
is_lwin_pressed = false;
}
result = true;
break;
}
return result;
}

25
users/r-okm/r-okm.h Normal file
View file

@ -0,0 +1,25 @@
#pragma once
#include "action.h"
#include "quantum_keycodes.h"
enum rokm_custom_keycodes {
ARROW_1 = SAFE_RANGE,
ARROW_2,
Z_TAB,
Z_UP,
Z_DOWN,
Z_LEFT,
Z_RIGHT,
X_ONE,
X_TWO,
X_THREE,
X_FOUR,
X_FIVE,
X_SIX,
X_SEVEN,
ESC_MHEN,
ROKM_SAFE_RANGE
};
bool process_record_user_rokm(uint16_t keycode, keyrecord_t *record);

5
users/r-okm/rules.mk Normal file
View file

@ -0,0 +1,5 @@
SRC += r-okm.c
ifeq ($(strip $(MACROS_ENABLE)), yes)
OPT_DEFS += -DMACROS_ENABLE
endif