macOS SierraでWindows PC風のキーバインド(ショートカット)を設定

問題

そろそろ安定しているから大丈夫だろうとMacBookAireの「OS X El Capitan」から「macOS Sierra」にアップグレードしたところ、他の方と同様にkarabinerが使えないという点でハマりました。

www.apple.com

私はWindowsでの作業も多いので、PC風のキーバインドにしています。(Cntl+Cでコピーだったり、Cntl+Aで全選択だったり、また、FN+左でHome、FN+右でEndなど。)

対策

対策は他の方と同様で、Hammerspoon、キーバインドの変更となりました。

Hammerspoon

www.hammerspoon.org

Hammerspoonは、macOS の操作を自動化できるツールです。 Luaという記法で記載します。

Lua - Wikipedia

Init.luaを次のように記載します。

HammerspoonのConfig (Init.lua)
hs.hotkey.bind({"ctrl"}, "c", nil, function() hs.eventtap.keyStroke({"cmd"}, "c") end) 
hs.hotkey.bind({"ctrl"}, "v", nil, function() hs.eventtap.keyStroke({"cmd"}, "v") end) 
hs.hotkey.bind({"ctrl"}, "w", nil, function() hs.eventtap.keyStroke({"cmd"}, "w") end) 
hs.hotkey.bind({"ctrl"}, "q", nil, function() hs.eventtap.keyStroke({"cmd"}, "q") end) 
hs.hotkey.bind({"ctrl"}, "f", nil, function() hs.eventtap.keyStroke({"cmd"}, "f") end) 
hs.hotkey.bind({"ctrl"}, "a", nil, function() hs.eventtap.keyStroke({"cmd"}, "a") end) 
hs.hotkey.bind({"ctrl"}, "x", nil, function() hs.eventtap.keyStroke({"cmd"}, "x") end) 
hs.hotkey.bind({"ctrl"}, "z", nil, function() hs.eventtap.keyStroke({"cmd"}, "z") end) 
hs.hotkey.bind({"ctrl"}, "s", nil, function() hs.eventtap.keyStroke({"cmd"}, "s") end) 

「コントロール+C」を「コマンド+C」に変換したりしてます。

DefaultKeyBinding.dictで、キーバインド変更

続けて、MacOSキーバインドを変更して、Fnキーと矢印キーの調整します。

qiita.com

DefaultKeyBinding.dictというファイルを作って、キーバインドを設定します。

 mkdir -p ~/Library/KeyBindings
 cd ~/Library/KeyBindings
 touch DefaultKeyBinding.dict
 open -a TextEdit DefaultKeyBinding.dict

エディタが開いたら次のように記述(UTF-8)。

{
     /* home */
    "\UF729"  = "moveToBeginningOfLine:";
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:";

    /* end */
    "\UF72B"  = "moveToEndOfLine:";
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";

    /* page up/down */
    "\UF72C"  = "pageUp:";
    "\UF72D"  = "pageDown:";
}

MACを再起動で反映されます。

だいたい動いたので、しばらくはこれで行こうかと思います。

今後は、karabiner elementsの発展に期待です。

参考

https://groups.google.com/forum/#!topic/osx-karabiner/xkh0oZfY7pk slongwell.github.io

aoki1210.hatenablog.jp