1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Planckで簡単にMacとWin共通の全角半角切替キーを作る

Last updated at Posted at 2020-02-03

はじめに

MacとWinどちらも使用するplanckユーザーにとって全角半角切替は最初ぐらいの関門だと思います。
その一つの解決方法として以下に記載しておきます。

目的

MacとWin共に同じ操作方法が可能な全角半角切替キーを作成します。
ついでに切替キーだけだと勿体ないので長押しでRaise/Lowerレイヤーへの切替機能も付与します。
レイヤー切替の速度も任意で変更できるようにします。

やること

やることは単純で、MacとWinで切替ショートカットを同じにしてそれを実行する処理を書くだけです。
難点は端末側でこの処理を行う必要ことです。

  • Macの全角半角のショートカットをCtrl + Spaceに設定する
  • Windowsの全角半角ショートカットをCtrl + Spaceに設定する
  • keymap.cへの実装
  • キーボードへの書き込み

Macの全角半角のショートカットをCtrl + Spaceに設定する

Mac元々の機能を使用して変更します。超簡単

  1. 左上のリンゴマークからシステム環境変数を開く
  2. "キーボード"を押下
  3. "ショートカット"タブから"入力ソース"を選択
  4. "前の入力ソースを選択"でCtrl + Spaceに設定
  5. おわり

Windowsの全角半角ショートカットをCtrl + Spaceに設定する

こちらは普段使いのIMEの設定を変更する必要があるので各自調べてください。
…と言いたい所ですが説明にならないのでGoogle日本語入力を例に変更します。

  1. google日本語のツールからプロパティを開く
  2. "キー設定"からことえりを選択 > 編集を開く
  3. 編集で"Ctrl Space"を探し下記のパターンを作成する
モード 入力キー コマンド
直接入力 Ctrl Space IMEを有効化
入力文字なし Ctrl Space IMEを無効化
変換前入力中 Ctrl Space IMEを無効化
変換中 Ctrl Space IMEを無効化

参考エントリ
Google 日本語入力でctrl spaceで半角全角の変更を出来るように変更したときのメモ

keymap.cへの実装

行う事は下記の4点です

  • 自作変換キーコードをRaiseとLowerの2種類定義
  • 計測時間格納用の変数定義
  • メインレイヤーキーマップへの自作キーコードの記述
  • process_record_user()へのcaseの追加

自作変換キーコードをRaiseとLowerの2種類定義

下記2行が追加したキーコードの定義(名前は適当)

keymap.c
    enum planck_keycodes {
    QWERTY = SAFE_RANGE,
    COLEMAK,
    DVORAK,
    PLOVER,
    BACKLIT,
    EXT_PLV,
    CONV_LOWER,
    CONV_RAISE
    };

計測時間格納用の変数定義

planck_keycodes{}の下辺りに記述します。

keymap.c
static uint16_t key_timer;

メインレイヤーキーマップへの自作キーコードの記述

追加した定義をキーボードのデフォルトのRaise、Lowerの位置に指定

keymap.c
[_QWERTY] = LAYOUT_planck_grid(
    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
    BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, CONV_LOWER,   KC_SPC,  KC_ENT, CONV_RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
),

process_record_user()へのcaseの追加

process_record_user()は既存のメソッドでこちらに追記する形になります。
caseに指定されたキーがrecord->event.pressedでキーが押されたか検知します。
押されると計測値がkey_timerに入り指定のレイヤーに切り替わります。

else以下はキーを離すを処理でレイヤーもとに戻します.
ここでもし離すまでの時間が120ms以下ならCtrl + Spaceを送信します。
tap_code16()はプレスイベントとリリースイベントを両方送信します。
これで実装は終わりです。

keymap.c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    //   ここから上省略
    case CONV_LOWER:
      if (record->event.pressed) {
        key_timer = timer_read();
        layer_on(_LOWER);
      }else{
        layer_off(_LOWER);
        if(timer_elapsed(key_timer) <= 120){
          tap_code16(LCTL(KC_SPC));
        }
      }
      return false;
      break;
    case CONV_RAISE:
      if (record->event.pressed) {
        key_timer = timer_read();
        layer_on(_RAISE);
      }else{
        layer_off(_RAISE);
        if(timer_elapsed(key_timer) <= 120){
          tap_code16(LCTL(KC_SPC));
        }
      }
      return false;
      break;
  }

おわりに

端末側に変更を加える必要がありますが、MacとWinで同じ操作で切替できるのは便利です。
良かったらためしてみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?