経緯
Windowsにはenthumbleというキーボード快適化ソフトがあります。
ソフトの紹介 enthumble Readme 【説明書】 - Qiita より引用
使用頻度の高いキー操作を手もとで行えるようにする、簡単設定のカスタマイズソフト
Windows用フリーソフト | インストール不要 | 商用利用可 | 有料版はキーカスタマイズ可能
enthumbleは、無変換キーを押している間だけ、キーボードの機能が変化します。面倒な設定なしに、ソフトを起動するだけで効果を発揮します。
上記のとおり、Windowsではほとんど使わない"無変換キー"を押している間だけ、一部のキーにカーソルキーに役割を持たせたり、またはBackSpaceの機能を持たせたりするというソフトで、一度使うと手放せなくなるソフトです。ただ、Windows版しかないためMacでは使えません。Karabiner-Elementsの前身のKarabinerには、最初からenthumbleの動作を実現するための設定が用意されるほどで、WindowsとMacを使う人にとっては需要が高い設定だったと思われます。しかし、Karabiner-Elementsでは設定が用意されていないため、作ることとしました。この設定を使えば、macOS Sierraでもenthumbleライクなキーバイドを利用することができます。
実装した機能
enthumbleには、基本的な使い方として以下のようなキー変換があります。 1 これらの設定のうち、"「←, ↓, ↑, →」入力"以外は、Karabiner-Elementsの前身のKarabinerでも提供されていました。
押したキー | 変換後のキー |
---|---|
無変換/英数 + I, J, K, L | 矢印キー(←, ↓, ↑, →) |
無変換/英数 + A, S, W, D | 矢印キー(←, ↓, ↑, →) |
無変換/英数 + B, N, P, F | 矢印キー(←, ↓, ↑, →) |
無変換/英数 + H, J, K, L | 矢印キー(←, ↓, ↑, →) |
無変換/英数 + Space/かな | Enter/Escape |
無変換/英数 + N, M | BackSpace |
無変換/英数 + ',' '.' | Delete |
無変換/英数 + Y, U | BackSpace |
無変換/英数 + I, O | Delete |
無変換/英数 + 矢印キー(←, ↓, ↑, →) | 「←, ↓, ↑, →」入力(2017/11/25追加) |
これらのキー変換は、Shift・Controlと組み合わせても動作する、言い換えれば、無変換/英数 + shift + H
を押すとshift + 左矢印
に変換されるのですが、この動作も実現させる必要がありました。
実装時の工夫点
ひとまず、Karabinerが最初から用意していた設定を実現するため、以下のとおりキー変換を実装しました。また、Windows版のenthumbleで最初から使えるようになっている「thumbIME」という設定もついでに実装しました。
from
-> key_code
-> modifiers
-> optional
にany
を設定することで、ShiftやControlを一緒に押した際にそのキーが変換後のキーに引き継がれるようにしました。
つまり、"Shift + 無変換/英数 + H, J, K, L -> Shift + 矢印キー(←, ↓, ↑, →)"という動作を実現しました。
また、「←, ↓, ↑, →」の入力については、Karabiner-Elementsに文字入力の機能はないため、代わりにシェルコマンドを実行する機能を使い、AppleScript
を実行することで対応しました。具体的には、押した矢印キーに対応する「←, ↓, ↑, →」の文字をクリップボードにコピーし、それを貼り付けする方法で対応しました。
"to": [
{ "shell_command": "osascript -e 'set the clipboard to \"←\"'" },
{ "shell_command": "osascript -e 'tell application \"System Events\" to keystroke \"v\" using command down'" }
]
実際のコード
設定に必要なコードは900行以上ありますので、実際のコードを見たい方は、下のリンクからGitHubにある設定ファイルを開いて確認してください。
また、下にあるもう一つのリンクから、設定済みのルールをインポートすることができるページへアクセスできます。設定をインポートするには、"enthumble(Windows App) mode"の右にある"import"ボタンをクリックしてください。インポートした後は、Karabiner-Elementsの設定画面からルールを有効にしてください。
設定ファイル(JSONファイル):KE-complex_modifications/blob/master/docs/json/enthumble_mode.json
設定のインポートページ:Karabiner-Elements complex_modifications rules by s-show
-
設定ファイルを見れば、"無変換/英数 + 数字 -> Functionキー"のような設定なども多数あるのですが、ReadMeなどで紹介されているものはこれだけです。 ↩