ここしばらくはMacのKarabiner-ElementsをKeyのRemapツールとして利用しています。
MacのKey mapping変更にはKarabiner-Elementsが便利 - rochefort's blog
具体的には、vim likeなカーソル移動が好みなので ctrl + h/j/k/l を矢印にRemapしてたりします。
このアプリは対象外にしたというような場合、設定ファイルにJSONの定義を追加することで実現できたりするのですが、 似たような設定が冗長だなと思っていました。
久しぶりにこのJSONを変更する必要が出てきたので、どういうふうに書くんだっけとググると、なんとJSONでなくJavaScriptが書けるようになってました。
Add your own complex modifications (using JavaScript) | Karabiner-Elements
※ ただし、現時点では beta版のみ。
ということで早速使ってみます。
beta版自体は、設定画面の「Update」からインストールできます。
インストールすると、いつものアクセシビリティの許可をしてあげればOK。
余談ですが、Trackpadもremap対象になってそうです。
テンプレートコメントにもあるように「EcmaScript 5.1」と結構古い書き方でないとエラーとなるので要注意です。
例:iTerm2以外を対象にする
function main() { const keyMappings = [ { from: "h", to: "left_arrow"}, { from: "j", to: "down_arrow"}, { from: "k", to: "up_arrow"}, { from: "l", to: "right_arrow"}, ] const disableBundleIdentifiers = [ "^com\\.googlecode\\.iterm2$" ] var manipulators = keyMappings.map(function(mapping) { return { "conditions": [ { "input_sources": [{ "language": "ja" }], "type": "input_source_unless" }, { "type": "frontmost_application_unless", "bundle_identifiers": disableBundleIdentifiers } ], "from": { "key_code": mapping.from, "modifiers": { "mandatory": ["control"], "optional": ["caps_lock", "command", "option", "shift", "fn"] } }, "to": [{ "key_code": mapping.to }], "type": "basic" } }) return { "description": "Vi Mode [left_control + jkhl]", "manipulators": manipulators } } main()
keymapの設定4つ並べるより、大分見やすくなりました。