みなさんEmacs使ってますか? 私はもはやエディタのEmacs自体は使ってないけど指が永遠のEmacs派です。atomでもまずatomic-emacsを入れます。
ということで私物のMacではKarabinerを使ってるもののなんか微妙に思い通りにならず(設定が悪いだけかも)、会社でWindowsからMacに乗り換えたのを機にWindowsでも使っていたKeyhacのMac版を試してみました。KeyhacはPythonで設定をかなり柔軟に書けるのが魅力です。
基本的にはWindows版とまったく同じように使える……のですが、キーバインドをアプリごとに変えるところで若干躓きが。
複数のアプリをまとめて設定するために例えばここのように
config.py
def is_im_target(window):
if window.getProcessName() in ("cmd.exe", # cmd
# ……
"MobaXterm.exe"): # MobaXterm
return True
return False
keymap_im = keymap.defineWindowKeymap(check_func=is_im_target)
defineWindowKeymap
メソッドのcheck_func
引数にアプリを判定する関数を指定してやれば良いのですが、Macではwindow.getProcessName()
が使えません。
んで調べてみると開発者が答えていて、微妙にわかりづらいんですが要は
config.py
def is_emacs_target(app):
# Mac版ではこうやってアプリ名を取得
if ckit.getApplicationNameByPid(app.pid) \
in (
# ここでは除外したいアプリ名を列挙
"com.apple.Terminal", # terminal
):
return False
return True
keymap_emacs = keymap.defineWindowKeymap(check_func=is_emacs_target)
keymap_emacs[ "Ctrl-P" ] = "Up" # Move cursor up
プロセスIDを取得→ckit.getApplicationNameByPid
に渡す、と。めでたしめでたし。