みずぴー日記

月に行こうという目標があったから、アポロは月に行けた。飛行機を改良した結果、月に行けたわけではない。

🍣絵文字キーの実現

f:id:mzp:20161224105605g:plain

要約

入力メソッドの拡張とキーボードのファームウェア変更により🍣キーを実現した。

ErgoDoxで実現できないキー

ErgoDox EZ等のキー配列を自由に変更できるキーボードがある。 ただし、通常のキーボードにないキーを作ることはできない。

例えば、絵文字を直接入力するキーを作ることはできない。

ファームウェアの制限

ErgoDox EZ等で利用できるファームウェアであるqmk_firmwareにはUnicodeサポート機能がある。しかし実現方法がOSごとに違うため、OSに依存した制限がある。

macOSではUnicode Hex Inputを利用しているが、Unicode Hex Inputは4桁のコードポイントしか受け付けない。そのため4桁を越えるU+1F363(🍣)を入力するキーは作れない。

f:id:mzp:20161224104248p:plain

絵文字キーの実現

入力メソッドの拡張

4桁を越えるコードポイントを入力できるようAquaSKKを拡張した。(codepoint_inputブランチ)

CtrlOption を押しながらコードポイントを入力し、最後に u を入力することで、任意のコードポイントを入力できるようにした。 例えば、 🍣(U+1F363)を入力したい場合は、 CtrlOption を押しながら 1 F 3 6 3 U を押すと🍣が入力できる。

ErgoDoxでの入力

ErgoDox EZのファームウェアを変更し、拡張した入力方法を用いるマクロを作成する。 これにより絵文字キーを実現できる。

// M(1)とM(2)に絵文字を割り当てる
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
      switch(id) {
        case 1:   
        if (record->event.pressed) {
          // 🍣(U+1F363)
          return MACRO(
              D(LALT), D(LCTL),
              T(1), T(F), T(3), T(6), T(3), T(U),
              U(LCTL), U(LALT),
              END );
        }
        break;
        case 2:
        if (record->event.pressed) {
          // 🍺(U+1F374)
          return MACRO(
              D(LALT), D(LCTL),
              T(1), T(F), T(3), T(7), T(A), T(U),
              U(LCTL), U(LALT),
              END );
        }
        break;
      }
    return MACRO_NONE;
};

別解1: サロゲートペア

サロゲートペア使えばAquaSKKの改造いらなかったな。

別解2: TouchBar

TouchBarには絵文字入力補助があって便利!

f:id:mzp:20161224110754p:plain