3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mac版Keyhacでアプリごとにまとめてキーバンド設定

Last updated at Posted at 2018-02-05

みなさん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に渡す、と。めでたしめでたし。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?