Help us understand the problem. What is going on with this article?

Karabiner-Elementsでenthumble(Windows App)のような操作を実現する方法

More than 3 years have passed since last update.

経緯

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 -> optionalanyを設定することで、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


  1. 設定ファイルを見れば、"無変換/英数 + 数字 -> Functionキー"のような設定なども多数あるのですが、ReadMeなどで紹介されているものはこれだけです。 

s-show
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away