Skip to content

Instantly share code, notes, and snippets.

@swkm
Created November 23, 2023 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save swkm/d26b0ec75cd6577a5411b2e51db01ae8 to your computer and use it in GitHub Desktop.
Save swkm/d26b0ec75cd6577a5411b2e51db01ae8 to your computer and use it in GitHub Desktop.
keychron q3 ノブなしで、ハードウェアでJISエミュレーション機能を実装する
/* Copyright 2022 @ Keychron (https://www.keychron.com)
*
* 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/>.
*/
#include QMK_KEYBOARD_H
#include "keymap_japanese.h"
enum layers{
MAC_BASE,
MAC_FN,
WIN_BASE,
WIN_FN
};
#if defined(KEY_OVERRIDE_ENABLE)
// winモードで us to jis
const key_override_t sft_kc_2_to_jp_at = ko_make_with_layers(MOD_MASK_SHIFT, KC_2, JP_AT, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t sft_kc_6_to_jp_circ = ko_make_with_layers(MOD_MASK_SHIFT, KC_6, JP_CIRC, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t sft_kc_7_to_jp_ampr = ko_make_with_layers(MOD_MASK_SHIFT, KC_7, JP_AMPR, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t sft_kc_8_to_jp_astr = ko_make_with_layers(MOD_MASK_SHIFT, KC_8, JP_ASTR, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t sft_kc_9_to_jp_lprn = ko_make_with_layers(MOD_MASK_SHIFT, KC_9, JP_LPRN, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t sft_kc_0_to_jp_rprn = ko_make_with_layers(MOD_MASK_SHIFT, KC_0, JP_RPRN, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t sft_kc_mins_to_jp_unds = ko_make_with_layers(MOD_MASK_SHIFT, KC_MINS, JP_UNDS, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t kc_eql_to_jp_eql = ko_make_with_layers_and_negmods(0, KC_EQL, JP_EQL, (1<<WIN_BASE | 1<<WIN_FN), (uint8_t) MOD_MASK_SHIFT);
const key_override_t sft_kc_eql_to_jp_plus = ko_make_with_layers(MOD_MASK_SHIFT, KC_EQL, JP_PLUS, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t kc_lbrc_to_jp_lbrc = ko_make_with_layers_and_negmods(0, KC_LBRC, JP_LBRC, (1<<WIN_BASE | 1<<WIN_FN), (uint8_t) MOD_MASK_SHIFT);
const key_override_t sft_kc_lbrc_to_jp_lcbr = ko_make_with_layers(MOD_MASK_SHIFT, KC_LBRC, JP_LCBR, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t kc_rbrc_to_jp_rbrc = ko_make_with_layers_and_negmods(0, KC_RBRC, JP_RBRC, (1<<WIN_BASE | 1<<WIN_FN), (uint8_t) MOD_MASK_SHIFT);
const key_override_t sft_kc_rbrc_to_jp_rcbr = ko_make_with_layers(MOD_MASK_SHIFT, KC_RBRC, JP_RCBR, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t kc_bsls_to_jp_bsls = ko_make_with_layers_and_negmods(0, KC_BSLS, JP_BSLS, (1<<WIN_BASE | 1<<WIN_FN), (uint8_t) MOD_MASK_SHIFT);
const key_override_t sft_kc_bsls_to_jp_pipe = ko_make_with_layers(MOD_MASK_SHIFT, KC_BSLS, JP_PIPE, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t sft_kc_scln_to_jp_coln = ko_make_with_layers(MOD_MASK_SHIFT, KC_SCLN, JP_COLN, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t kc_quot_to_jp_quot = ko_make_with_layers_and_negmods(0, KC_QUOT, JP_QUOT, (1<<WIN_BASE | 1<<WIN_FN), (uint8_t) MOD_MASK_SHIFT);
const key_override_t sft_kc_quot_to_jp_dquo = ko_make_with_layers(MOD_MASK_SHIFT, KC_QUOT, JP_DQUO, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t kc_grv_to_jp_grv = ko_make_with_layers_and_negmods(0, KC_GRV, JP_GRV, (1<<WIN_BASE | 1<<WIN_FN), (uint8_t) MOD_MASK_SHIFT);
const key_override_t sft_kc_grv_to_jp_tild = ko_make_with_layers(MOD_MASK_SHIFT, KC_GRV, JP_TILD, (1<<WIN_BASE | 1<<WIN_FN));
const key_override_t **key_overrides = (const key_override_t *[]){
&sft_kc_2_to_jp_at
, &sft_kc_6_to_jp_circ
, &sft_kc_7_to_jp_ampr
, &sft_kc_8_to_jp_astr
, &sft_kc_9_to_jp_lprn
, &sft_kc_0_to_jp_rprn
, &sft_kc_mins_to_jp_unds
, &kc_eql_to_jp_eql
, &sft_kc_eql_to_jp_plus
, &kc_lbrc_to_jp_lbrc
, &sft_kc_lbrc_to_jp_lcbr
, &kc_rbrc_to_jp_rbrc
, &sft_kc_rbrc_to_jp_rcbr
, &kc_bsls_to_jp_bsls
, &sft_kc_bsls_to_jp_pipe
, &sft_kc_scln_to_jp_coln
, &kc_quot_to_jp_quot
, &sft_kc_quot_to_jp_dquo
, &kc_grv_to_jp_grv
, &sft_kc_grv_to_jp_tild
, NULL
};
#endif // KEY_OVERRIDE_ENABLE
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MAC_BASE] = LAYOUT_tkl_ansi(
KC_ESC, KC_BRID, KC_BRIU, KC_NO, KC_NO, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, SCMD(KC_3), KC_NO, RGB_MOD,
KC_GRV, 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_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LOPT, LCMD_T(KC_LNG2), KC_SPC, RCMD_T(KC_LNG1), KC_ROPT, MO(MAC_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[MAC_FN] = LAYOUT_tkl_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG,
_______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, _______, _______, _______,
_______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, _______, _______,
_______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
_______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, _______,
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
[WIN_BASE] = LAYOUT_tkl_ansi(
KC_ESC, 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_PSCR, _______, RGB_MOD,
KC_GRV, 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_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
MO(WIN_FN), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LWIN, LALT_T(KC_LNG2), KC_SPC, RALT_T(KC_LNG1), KC_RWIN, MO(WIN_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[WIN_FN] = LAYOUT_tkl_ansi(
_______, KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, RGB_TOG,
_______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______, _______, _______, _______,
_______, KC_NO, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, _______, _______, _______,
_______, KC_HOME, KC_NO, KC_DEL, KC_RGHT, KC_NO, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
_______, KC_NO, C(KC_X), C(KC_C), C(KC_V), KC_LEFT, KC_DOWN, KC_NO, KC_NO, KC_NO, KC_NO, _______, _______,
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
VIA_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment