Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9509

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

$
0
0

はじめに

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 SpaceIMEを有効化
入力文字なしCtrl SpaceIMEを無効化
変換前入力中Ctrl SpaceIMEを無効化
変換中Ctrl SpaceIMEを無効化

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

keymap.cへの実装

行う事は下記の4点です
- 自作変換キーコードをRaiseとLowerの2種類定義
- 計測時間格納用の変数定義
- メインレイヤーキーマップへの自作キーコードの記述
- process_record_user()へのcaseの追加

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

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

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

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

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

keymap.c
staticuint16_tkey_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
boolprocess_record_user(uint16_tkeycode,keyrecord_t*record){switch(keycode){//   ここから上省略caseCONV_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));}}returnfalse;break;caseCONV_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));}}returnfalse;break;}

おわりに

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


Viewing all articles
Browse latest Browse all 9509

Trending Articles