SHIFT+JP_XXXをUS配列に対応させる
Index
JP_XXXとShfitキーとの組み合わせがおかしい
keymap.cでkeymap_jp.h
をincludeしてKC_XXX
の代わりにJP_XXX
を使えば、
日本語キーボードと認識された状態でも目的の記号を入力するようにできるみたいです
ですが、例えばSHIFT
+JP_2
を押しても@
じゃなくて"
になってしまう
SHIFT
+JP_QUOT
にいたっては"
じゃなくて'
のままです
どうしたものか
あったよ!解決方法
こちらの方が以下の投稿で触れております。
http://oookaworks.seesaa.net/article/476161799.html#gsc.tab=0
上記で紹介されている通り、eswaiさんがコードを書かれています。
https://github.com/eswai/qmk_firmware/blob/master/keyboards/eswai/anhedral67/keymaps/srlby2/twpair_on_jis.c
それはそれとして
上記記事を見つける前に自前で実装してしまったので、
せっかくだし自分なりの実装方法をメモっておきます
(だいたい同じですね!)
※tap_code16jp(key_code)
はtap_code16(key_code)
をSHIFT
+JP_XXX
に対応させたものです。
#include QMK_KEYBOARD_H
#include "keymap_jp.h"
static bool process_jp_symbols_impl(uint16_t keycode, bool pressed) {
if (!pressed) {
return true;
}
uint8_t shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
if (!shift) {
return true;
}
uint16_t s;
switch (keycode) {
// Replace Shift-Symbols like ANSI for JIS.
case JP_2: s = JP_AT; break;
case JP_6: s = JP_CIRC; break;
case JP_7: s = JP_AMPR; break;
case JP_8: s = JP_ASTR; break;
case JP_9: s = JP_LPRN; break;
case JP_0: s = JP_RPRN; break;
case JP_GRV: s = JP_TILD; break;
case JP_EQL: s = JP_PLUS; break;
case JP_MINS: s = JP_UNDS; break;
case JP_QUOT: s = JP_DQUO; break;
case JP_SCLN: s = JP_COLN; break;
default: return true;
}
unregister_mods(shift);
tap_code16(s);
register_mods(shift);
return false;
}
bool process_jp_symbols(uint16_t keycode, keyrecord_t *record) {
return process_jp_symbols_impl(keycode, record->event.pressed);
}
void tap_code16jp(uint16_t keycode) {
if (process_jp_symbols_impl(keycode, true)) {
tap_code16(keycode);
}
}
keymap.cのprocess_record_user
に以下のように追加します。
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return process_jp_symbols(keycode, record);
}
Leave a Comment