Karabiner-Elements の Complex modifications では shell_command
という項目があり、キー入力に対してコマンドを実行するような設定を記述することができる。
to event definition - karabiner.json Reference Manual
便利そうなのでさっそく試してみるも、なかなかうまく動かずに苦戦した。
設定ファイルを書き換えるたびに Karabiner-Elements を再起動しないといけなかったり、コマンド実行時のエラーを 2>$HOME/error.log
みたくファイルに吐き出さないとデバッグできなかったりと、試行錯誤するのも楽ではない。
試行錯誤する中で少しハマったのが、 /usr/local/bin
に PATH が通っていない件。
試しに、shell_command の実行時にどんな環境変数が設定されているのかを確認してみる。
{
"type": "basic",
"from": {
"key_code": "open_bracket",
"modifiers": {
"mandatory": [
"left_control",
"left_shift"
]
}
},
"to": {
"shell_command": "env > $HOME/env.txt"
}
}
このような割り当てを追加する設定を追記して、Karabiner-Elements を再起動する。
この例では control
+ shift
+ [
で環境変数がファイルに書き出される設定なので、そのキーを押してファイルを確認する。
SHELL=/bin/zsh
USER=hoto
PATH=/usr/bin:/bin:/usr/sbin:/sbin
PWD=/
HOME=/Users/hoto
(他にもいくつかあったが代表的なもののみを表示)
これをみると /usr/local/bin
に PATH が通っていないことがわかる。
このままだと Homebrew で入れたコマンドなどを使う場合はフルパスで指定しないと動かない。
"to": {
"shell_command": "PATH=$PATH:/usr/local/bin oysttyer 'foooooooo!'"
}
最終的にはこんな感じで PATH を通すことにした。
あまりスマートな書き方ではない気がするので、もっといい方法があったら教えて欲しい。