macOS SierraでKarabinerの「EISUU to Escape(入力ソースが日本語以外の場合のみ)」を実現する
Deprecated
もっと良い方法を見つけましたので、こちらを利用して下さい。
以下、元記事です。
macOS SierraからKarabinerが使えなくなりました。 公式サイトでは、Karabiner-Elementsへの移行を呼びかけていますが、 2017/09/16現在ではKarabinerの全ての機能を使うことはできないようです。
私が愛用していた「EISUU to Escape(入力ソースが日本語以外の場合のみ)」(下図)もその一つです。 今回は、HammerspoonとKarabiner-Elementsを使って擬似的にこの設定を再現しました。
注意
失敗するとKarabiner-Elementsの設定ファイル(~/config/karabiner/karabiner.json
)が消えてしまいます。
必ずバックアップをとってから試すようにして下さい
実現方法
こちらの記事とほぼ同じ方法を使います。 日本語入力の切替時に、HammerspoonでKarabiner-Elementsの設定を切り替えます。
必要なアプリケーションをインストール
以下の2つをインストールします。
Karabiner-Elementsのプロファイルを作る
上の記事を参考に、Karabiner-Elementsのプロファイルを作成します。
今回は、日本語入力以外の設定である「Default」と 日本語入力中の設定である「Japanese」の2つのプロファイルを作成します。 設定項目はなんでも良いですが、 Defaultの方のみに、英数キーをEscapeにマッピングする設定をします。
また、Miscから「show profile name in menu bar」をONにしておくと、切り替わりがわかりやすくて良いと思います。
Karabinerの設定を変更するスクリプトを実装
以下のスクリプトを~/.hammerspoon/karabiner-switcher.py
に配置します。
※要実行権限
#!/usr/bin/env python # -*- encode: utf-8 -*- import os import sys import json def main(): if len(sys.argv) != 2: print("usage: {0} profile_name".format(sys.argv[0])) exit(1) home = os.environ['HOME'] fpath = os.path.join(home, ".config/karabiner/karabiner.json") with open(fpath) as f: conf = json.load(f) profile_name = sys.argv[1] select_flag = False for c in conf["profiles"]: c["selected"] = c["name"] == profile_name select_flag |= c["selected"] if not select_flag: print("profile_name[{0}] is not found".format(profile_name)) exit(1) with open(fpath, "w") as f: f.write(json.dumps(conf, indent=4, sort_keys=True)) if __name__ == "__main__": main()
Hammerspoonの設定
入力ソース切替で上のスクリプトを実行するよう、
~/.hammerspoon/init.lua
を実装します。
以下はgoogle日本語入力の場合です。他のIMEを使っている場合はif文のところを変更して下さい。 IMEのSouceIDはコメントアウトしているprint文をconsoleから確認できます。
local home = os.getenv("HOME") function switchKarabiner() source_id = hs.keycodes.currentSourceID() -- print("source_id: " .. source_id .. "\n") if source_id == "com.google.inputmethod.Japanese.base" then hs.execute(home .. '/.hammerspoon/karabiner-switcher.py Japanese') else hs.execute(home .. '/.hammerspoon/karabiner-switcher.py Default') end end hs.keycodes.inputSourceChanged(switchKarabiner)
Hammerspoonの設定を反映させる
HammerspoonのReload Configを選びます。
これで日本語入力のON/OFFでKarabiner-ElementsのプロファイルがJapanese/Default が切り替わっていれば成功です。