親指シフトキーボード作成【備忘録】

経緯

  • 2021年4月5日

    • @sadaoikebeさんの記事をみて親指シフトキーボードを作って見ました。
    • 改良点は、キー配置を「HHKB」に合わせました
    • 非常に優秀なのは、OSがバージョンアップするたびに、ソフトがちゃんと動くか心配しなくて良いことです。キーボードソフト内で処理します
    • Facebookに記載しました        
    • 元記事    qiita.com
  • 2022年11月5日

    • コロナの影響で在宅勤務が増え、会社のPCにリモート接続するようになりました。
    • みんなが使うPCは「JISキーボード」で、自分用のPCは「USキーボード」です。これらをリモートから上手く切り替えることができませんでした。
  • 2023年3月3日

    • 作成できましたので、もう1台作成しました。自宅と会社で同じものを使っています
  • 2024年4月15日

    • そろそろ、購入できなくなるかと思い、もう1台作成しています。以前に作成したものを分解し、基盤とスイッチの位置を確認しながら作業を進めています
    • 手間がかかるのは、ハンダ付けする前にUSBで接続し、ソフトウェア(2023年3月に作成した完成したもの)をインストールし、ピンセットで導通に問題がないか確認することです。ハンダ付けを行うと不良品として交換できないため、慎重に作業を進めています。
    • 注)この作り方はかなり専門的なものであり、一般の方にはお勧めできません。特にソフトの改良には時間がかかりました

あるべき姿

  • キーボードの配列を変更できない場合は、キーボードから出力される文字コードをAppleUS、WinJIS、WinUSの3つのモードに切り替えることができれば良いでしょう
  • この方法で、親指シフト入力エミュレータ(たとえば、やまぶきRさんやDvorakJさんなど)を導入する必要がなく、便利に使えます

作ってみた

  • Fnキー併用押し
    • 英語は、KC_EISU。 日本語は、KC_KANA2 となっています(@sadaoikebeさんオリジナル)
    • AppleUSは、KC_YSMAC。 WinUSは、KC_YSWIN。 WinJISは、KC_YSUSJP。 (shiguが新規追加)
    • 注)KC_GRV(〜)は、物理キーボード上では右上になります。ソフト上では、KC_KANA2(右スペース)の横になっています (shiguがHHKBに合わすため追加)
    • Function Layer
 [_FUNC] = LAYOUT_62_ansi_2space( \
    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_TRNS,  \
    KC_TRNS,   KC_F14, KC_F15, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME,  KC_PGDN, KC_PGUP, KC_END,   KC_PSCR, KC_TRNS, KC_BRK,  KC_DEL,            \
    KC_LCTL,   KC_YSMAC , KC_YSWIN, KC_YSUSJP, KC_TRNS, KC_TRNS, KC_LEFT,  KC_DOWN, KC_UP,KC_RIGHT, KC_INS,  KC_DEL,           KC_ENT,            \
    KC_LSFT,   RGB_TOG, RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,                  \
    MO(_FUNC), KC_TRNS, KC_TRNS,                   KC_EISU, KC_KANA2,                   KC_GRV,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
  • モード設定
    • KC_YSMAC , KC_YSWIN, KC_YSUSJPを追加しました                  
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case KC_EISU:
      if (record->event.pressed) {
        // NICOLA親指シフト
        //yseko
        if (ys_macwin == 0){
          send_string(SS_TAP(X_MHEN)); // Win
          send_string(SS_TAP(X_LANG2)); // Mac
        }else if(ys_macwin == 1){
          send_string(SS_LCTL("9"));    // Win
        }

        nicola_off();
        // NICOLA親指シフト
        rgblight_sethsv_at(170,255,40, RGBLED_NUM-1); // the last LED = BLUE (NICOLA off)
      }
      return false;
      break;
    case KC_KANA2:
      if (record->event.pressed) {
        // NICOLA親指シフト
        if (ys_macwin == 0){
          send_string(SS_TAP(X_HENK));  // Win
          send_string(SS_TAP(X_LANG1)); // Mac
        }else if(ys_macwin == 1){
          send_string(SS_LCTL("0"));   // Win
        }

        nicola_on();
        // NICOLA親指シフト
        rgblight_sethsv_at(85,255,40, RGBLED_NUM-1); // the last LED = GREEN (NICOLA on)
      }
      return false;
      break;

      //shiguが追加
      case KC_YSMAC:
        ys_macwin = 0;
        ys_Us_Jis = 0;
        return false;
        break;
      case KC_YSWIN:
        ys_macwin = 1;
        ys_Us_Jis = 0;
        return false;
        break;
      case KC_YSUSJP:
        ys_Us_Jis = 1;
        return false;
        break;

  }
  • JIS、USごとに変えるキー
case KC_LSHIFT:
case KC_RSHIFT:
case JU_2:
case JU_6:
case JU_7:
case JU_8:
case JU_9:
case JU_0:
case JU_MINS:
case JU_EQL:
case JU_LBRC:
case JU_RBRC:
case JU_BSLS:
case JU_SCLN:
case JU_QUOT:
case JU_GRV:
  • 例:「キー2」は下記のようにしました
    case JU_2:
      if(ys_Us_Jis == 1){
        if (record->event.pressed) {
          if (lshift || rshift) {    //シフトキーが押されていれば
            jtu_a_pressed_shift[JU_A_2] = true;
            UNREG_SHIFT();
            JTU_PRESS(LBRC);
          } else {             //シフトキーが押されていない
            jtu_a_pressed_nshift[JU_A_2] = true;
            CLOSE_REG_SHIFT();
            JTU_PRESS(2);
          }
        } else { 
          if(jtu_a_pressed_shift[JU_A_2]) {
            jtu_a_pressed_shift[JU_A_2] = false;
            JTU_RELEASE(LBRC);
            CLOSE_UNREG_SHIFT();
          }
          if(jtu_a_pressed_nshift[JU_A_2]) {
            jtu_a_pressed_nshift[JU_A_2] = false;
            JTU_RELEASE(2);
          }
        }
      }
      else {
        if (record->event.pressed) {
          if (lshift || rshift) {
            jtu_a_pressed_shift[JU_A_2] = true;
            CLOSE_UNREG_SHIFT();
            JTU_PRESS(2);
          } else {
            jtu_a_pressed_nshift[JU_A_2] = true;
            CLOSE_REG_SHIFT();
            JTU_PRESS(2);
          }
        } else {
          if(jtu_a_pressed_shift[JU_A_2]) {
            jtu_a_pressed_shift[JU_A_2] = false;
            JTU_RELEASE(2);
          }
          if(jtu_a_pressed_nshift[JU_A_2]) {
            jtu_a_pressed_nshift[JU_A_2] = false;
            JTU_RELEASE(2);
          }
        }
      }
      return false;

親指シフトを使わない時にキーボードから手を離さずIMEオンオフする方法

  • IME設定を変更する
    1. 以前のバージョンのMicrosoft IMEを使う
    2. 全般ー>変更
    3. Ctrl+0:IME-オン
    4. Ctrl+9:IME-オフ

プライバシーポリシー |ページトップへ

`