8
7

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.

macOS Sierra + Keyhacでキーバインドをカスタマイズ

Last updated at Posted at 2016-11-22

うっかりmacOS Sierraにアップデートしてしまった後にKarabinerが対応していないことを知って困った。せっかくなのでデフォルトのキーバインドに慣れようかと思ってしばらくがんばっていたけど、生産性が下がりすぎて無理。そこで、Keyhacでできるとこまでがんばってみることに。

要求

必須

  1. SandS
  2. Ctrl-mReturn
  3. Ctrl-[PNBF]↑``↓``←``→
  4. Ctrl-[Esc
  5. iTerm上のVimで、インサートモードから抜ける時にIMEを英数に戻す

できれば

  1. SlackでCtrl-Tab, Ctrl-Shift-Tabで未読チャンネルを移動
  2. Ctrl-Cmd-Spaceでスポットライトの検索バーを出す

コード

from keyhac import *

def configure(keymap):
    keymap_global = keymap.defineWindowKeymap()

    # 必須1: SandS
    keymap.replaceKey("Space", "Shift")
    keymap_global["D-Shift"] = "Shift"
    keymap_global["O-Shift"] = "Space"
    keymap_global["O-Space"] = "Space"

    # IMEのトグル
    # ↑の設定のせいで既存の設定が食われてしまうぽいので、
    # 環境設定→キーボード→ショートカットであらかじめ設定したキーにあてる
    keymap_global[ "Cmd-Shift" ] = "F12"

    # 必須2と3: Emacs Keybindings
    keymap_global[ "Ctrl-M" ] = "Return"
    keymap_global[ "Ctrl-P" ] = "Up"
    keymap_global[ "Ctrl-N" ] = "Down"
    keymap_global[ "Ctrl-F" ] = "Right"
    keymap_global[ "Ctrl-B" ] = "Left"

    # 必須4: C-[ to Esc
    keymap_global[ "Ctrl-OpenBracket" ] = "Esc"

    # 必須5: iTerm2
    # インサートモードから戻る時はIMEを英数にしてほしい
    def escWithIMEOff():
        esc = keymap.InputKeyCommand("Esc")
        esc()
        ime_off = keymap.InputKeyCommand("Ctrl-Shift-Semicolon") # GoogleIMEのショートカット
        ime_off()

    keymap_terminal = keymap.defineWindowKeymap( app_name="com.googlecode.iterm2" )
    keymap_terminal[ "Ctrl-OpenBracket" ] = escWithIMEOff

    # できれば1: Slack
    # いまのところなんかだめ
    keymap_slack = keymap.defineWindowKeymap( app_name="com.tinyspeck.slackmacgap" )
    keymap_slack[ "Ctrl-Tab" ]       = "Option-Shift-Down"
    keymap_slack[ "Ctrl-Shift-Tab" ] = "Option-Shift-Up"

    # できれば2: Spotlight
    # いまのところなんかだめ
    keymap_global[ "Cmd-Ctrl-Space" ] = "F11"

補遺

  • どうもスペースの動きが変。スペースとして効いてほしい時に、状況によって一発で効いたり効かなかったりする。ので、変換する時にスペースを一度押したら変換できたりできなかったりするし、スペースを二回押さないとスペース自体が入力できなかったりする
  • 上記の要求の「できれば」は、1も2もちゃんと動いてない
8
7
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
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?