肩こりがひどいという言い訳で分割キーボードを作る(3) qmkを使ってOSの判断

普段仕事はmacを使っているが個人ではLinuxを使っている関係上どうしても困るのが日本語変換まわり。Linuxでも同じキーでなんとかしたいと思っていたのだが自作キーボードのファームウェアの設定素ライブラリであるqmkを使うことで対応ができた。

レイヤー0にはmacで使う定義を記載

レイヤー(1)にはLinuxで使う定義を記載

ターミナルに貼り付けることが多いのであえて ctrl+shift を割り当てている。とはいえブラウザ上でのはctrl+c/vが有効なので間違えて打つと面倒なのでブラウザ側でも調整が必要

qmkの定義(rules.mk)

OS_DETECTION_ENABLE = yes
DEFERRED_EXEC_ENABLE = yes

keymap.c の変更点

#include "os_detection.h"

void keyboard_post_init_user(void) {
  uint32_t get_host_os(uint32_t trigger_time, void* cb_arg) {
    switch (detected_host_os()) {
      case OS_UNSURE:  // Don't change default layer if unsure.
        break;
      case OS_MACOS:   // On Mac, set default layer to 0.
      case OS_IOS:
        set_single_persistent_default_layer(0);
        break;
      default:         // On Windows and Linux, set to 1.
        set_single_persistent_default_layer(1);
        break;
    }
    return 0;
  }
  // Set default layer based on the detected OS after a 500 ms delay.
  defer_exec(500, get_host_os, NULL);
}

これで少し幸せになりました(あとはブラウザのCtrl+cの挙動は別で変えるしかない)

追記(2024/02/12)
layer_move()関数に変更した。キーが確定したらdefault_layerでも良いかもしれない。


Created by roguer.info 2016