5
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

QMK Firmware で英字配列のまま Windows と macOS 両対応の IME のオンオフキーを作る

概要

Keebio の自作キーボードキット Iris を QMK Firmware でカスタマイズして使っています。
macOS では Mac の日本語キーボードのように、左右の親指キーに IME のオン・オフ (LANG1, LANG2) を割り当てることで、トグル無しに快適な日本語切り替えができます。しかし、Windows では英字キーボードに設定するとこれらのキーが認識されないため、仕方なく Ctrl+Space で切り替えるようにしていました。

対処法としては、日本語配列を英字配列風にカスタマイズする方法、AX 配列をインストールする方法など色々あるようですが、今回はなるべく環境をいじらないで実現できる方法として、英字配列でも認識される F12 以降のファンクションキーを LANG1, LANG2 と同時に送信するようにファームウェアの書き換えを行います。

事前準備

QMK Firmware のリポジトリを clone してセットアップを行います。方法は公式のドキュメントをどうぞ。

キーマップを作る

keyboards/keebio/iris/keymaps/default などの元にする設定のディレクトリをコピーし、適当な名前をつけます (本記事では keyboards/keebio/iris/keymaps/ryohey ディレクトリ)

設定方法

コードはこちら
https://github.com/ryohey/qmk_firmware/commit/deb4e582ec660ec692c019bebce798e725b24bc0

keymap.c にカスタムキーコード IMEONIMEOFF を追加し、キーマップに指定します。

keymap.c
enum custom_keycodes {
  QWERTY = SAFE_RANGE,
  LOWER,
  RAISE,
  ADJUST,
  IMEON,
  IMEOFF,
};
keymap.c
#define KC_IMEON IMEON
#define KC_IMEOFF IMEOFF
keymap.c
  [_QWERTY] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     ESC , 1  , 2  , 3  , 4  , 5  ,                6  , 7  , 8  , 9  , 0  ,BSPC,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     TAB , Q  , W  , E  , R  , T  ,                Y  , U  , I  , O  , P  ,    ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     LCTL, A  , S  , D  , F  , G  ,                H  , J  , K  , L  ,SCLN,ENT,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
     LSFT, Z  , X  , C  , V  , B  ,IMEOFF,  IMEON, N  , M  ,COMM,DOT ,SLSH,    ,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                       LGUI,LOWR,SPC ,         RSFT,RASE,RALT
  //                  `----+----+----'        `----+----+----'
  ),

process_record_userIMEONIMEOFF が押されたときに複数のキーコードを送信する処理を追加します。

keymap.c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case QWERTY:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_QWERTY);
      }
      return false;
      break;
    case LOWER:
      if (record->event.pressed) {
        layer_on(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case RAISE:
      if (record->event.pressed) {
        layer_on(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case ADJUST:
      if (record->event.pressed) {
        layer_on(_ADJUST);
      } else {
        layer_off(_ADJUST);
      }
      return false;
      break;
    case IMEON:
      if (record->event.pressed) {
        register_code(LANG1);
        register_code(F14);
      } else {
        unregister_code(LANG1);
        unregister_code(F14);
      }
      break;
    case IMEOFF:
      if (record->event.pressed) {
        register_code(LANG2);
        register_code(F15);
      } else {
        unregister_code(LANG2);
        unregister_code(F15);
      }
      break;
  }
  return true;
}

Firmware の書き込み

qmk flash --keyboard keebio/iris/rev2 --keymap ryohey --bootloader avrdude

make での書き方

make keebio/iris/rev2:ryohey:avrdude

結果

Windows 側で認識されました。

Fkey.PNG

Windows での設定

IME で F14, F15 に IME の有効化、無効化を設定します。

キャプチャ.PNG

追記

macOS でターミナルを利用しているときに F13 がなにかのキーとして入力されてしまうので、F14, F15 を使うように変更しました。

追記2

クラムシェルモードで使っていたので気が付かなかったのですが、F14, F15 は画面の明るさを変えるショートカットに割り当てられているようです。F24 まであるので、何にも割り当てられていないキーを探すとよさそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
5
Help us understand the problem. What are the problem?