From 434f5ef36ede6516a1bfb9e16313441e67380d28 Mon Sep 17 00:00:00 2001 From: r-okm <65703649+r-okm@users.noreply.github.com> Date: Tue, 9 Dec 2025 10:59:38 +0900 Subject: [PATCH] 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 --- keyboards/crkbd/keymaps/r-okm/config.h | 4 + keyboards/crkbd/keymaps/r-okm/keymap.c | 69 ++++++++ keyboards/crkbd/keymaps/r-okm/rules.mk | 2 + .../7skb/keymaps/r-okm/keymap.c | 76 +++++++++ .../7skb/keymaps/r-okm/rules.mk | 1 + users/r-okm/config.h | 6 + users/r-okm/r-okm.c | 161 ++++++++++++++++++ users/r-okm/r-okm.h | 25 +++ users/r-okm/rules.mk | 5 + 9 files changed, 349 insertions(+) create mode 100755 keyboards/crkbd/keymaps/r-okm/config.h create mode 100755 keyboards/crkbd/keymaps/r-okm/keymap.c create mode 100755 keyboards/crkbd/keymaps/r-okm/rules.mk create mode 100644 keyboards/salicylic_acid3/7skb/keymaps/r-okm/keymap.c create mode 100644 keyboards/salicylic_acid3/7skb/keymaps/r-okm/rules.mk create mode 100644 users/r-okm/config.h create mode 100644 users/r-okm/r-okm.c create mode 100644 users/r-okm/r-okm.h create mode 100644 users/r-okm/rules.mk diff --git a/keyboards/crkbd/keymaps/r-okm/config.h b/keyboards/crkbd/keymaps/r-okm/config.h new file mode 100755 index 00000000..6bd5bd06 --- /dev/null +++ b/keyboards/crkbd/keymaps/r-okm/config.h @@ -0,0 +1,4 @@ +#pragma once + +// #define MASTER_LEFT +#define MASTER_RIGHT diff --git a/keyboards/crkbd/keymaps/r-okm/keymap.c b/keyboards/crkbd/keymaps/r-okm/keymap.c new file mode 100755 index 00000000..b828438d --- /dev/null +++ b/keyboards/crkbd/keymaps/r-okm/keymap.c @@ -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 . +*/ + +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); +} diff --git a/keyboards/crkbd/keymaps/r-okm/rules.mk b/keyboards/crkbd/keymaps/r-okm/rules.mk new file mode 100755 index 00000000..be7d199f --- /dev/null +++ b/keyboards/crkbd/keymaps/r-okm/rules.mk @@ -0,0 +1,2 @@ +DEBOUNCE_TYPE = sym_eager_pr +MACROS_ENABLE = yes diff --git a/keyboards/salicylic_acid3/7skb/keymaps/r-okm/keymap.c b/keyboards/salicylic_acid3/7skb/keymaps/r-okm/keymap.c new file mode 100644 index 00000000..b4dfedee --- /dev/null +++ b/keyboards/salicylic_acid3/7skb/keymaps/r-okm/keymap.c @@ -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); +} diff --git a/keyboards/salicylic_acid3/7skb/keymaps/r-okm/rules.mk b/keyboards/salicylic_acid3/7skb/keymaps/r-okm/rules.mk new file mode 100644 index 00000000..94169c6b --- /dev/null +++ b/keyboards/salicylic_acid3/7skb/keymaps/r-okm/rules.mk @@ -0,0 +1 @@ +MACROS_ENABLE = yes diff --git a/users/r-okm/config.h b/users/r-okm/config.h new file mode 100644 index 00000000..d5ce7cbe --- /dev/null +++ b/users/r-okm/config.h @@ -0,0 +1,6 @@ +#pragma once + +#define TAPPING_FORCE_HOLD +#define TAPPING_TERM 180 +#define PERMISSIVE_HOLD +#define RETRO_TAPPING diff --git a/users/r-okm/r-okm.c b/users/r-okm/r-okm.c new file mode 100644 index 00000000..10762b45 --- /dev/null +++ b/users/r-okm/r-okm.c @@ -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; +} diff --git a/users/r-okm/r-okm.h b/users/r-okm/r-okm.h new file mode 100644 index 00000000..37fe8f6f --- /dev/null +++ b/users/r-okm/r-okm.h @@ -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); diff --git a/users/r-okm/rules.mk b/users/r-okm/rules.mk new file mode 100644 index 00000000..095ec934 --- /dev/null +++ b/users/r-okm/rules.mk @@ -0,0 +1,5 @@ +SRC += r-okm.c + +ifeq ($(strip $(MACROS_ENABLE)), yes) + OPT_DEFS += -DMACROS_ENABLE +endif