うっかりmacOS Sierraにアップデートしてしまった後にKarabinerが対応していないことを知って困った。せっかくなのでデフォルトのキーバインドに慣れようかと思ってしばらくがんばっていたけど、生産性が下がりすぎて無理。そこで、Keyhacでできるとこまでがんばってみることに。
要求
必須
- SandS
-
Ctrl-m
でReturn
-
Ctrl-[PNBF]
で↑``↓``←``→
-
Ctrl-[
でEsc
- iTerm上のVimで、インサートモードから抜ける時にIMEを英数に戻す
できれば
- Slackで
Ctrl-Tab
,Ctrl-Shift-Tab
で未読チャンネルを移動 -
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もちゃんと動いてない