子育てしながらエンジニアしたい

現在 2 歳女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

Xcode で Emacs キーバインドを使いたい - Hammerspoon を使う

Hello, Xcode

仕事で iOS アプリを作ることになりました。
当然ながら開発環境は Xcode になります。
今までで最も長い組み込み開発では、Emacs を使ってきました。
Python 開発は、Spyder を使っているものの、keyhac というソフトウェアを使うことで Emacsキーバインドにしていました。

というわけで XcodeEmacs キーバインドで使いたい!というのが今回の趣旨です。

キーマップの変更手段

El Capitan 以前は Karabiner というソフトを使って、キーマップを入れ替えるのが定番だったようです。
しかし macOS Sierra 以降では使えないとのこと...!!
後継のKarabiner Elements というソフトウェアもリリースされていますが、残念ながら Modifier (Ctrl とか Shift とか) を使ったキーリマップができないようです。

Windows で愛用している keyhac を使ってみましたが、いろいろうまくいかず断念。。

そして候補にあがってきたのが Hammerspoon です。

Hammerspoon

Hammerspoon とは

This is a tool for powerful automation of OS X. At its core, Hammerspoon is just a bridge between the operating system and a Lua scripting engine. What gives Hammerspoon its power is a set of extensions that expose specific pieces of system functionality, to the user.

Hammerspoon

基本的には Mac の自動化ツールだそうです。
Lua スクリプトで動作を記述し、それを OS に渡すというブリッジの役目をします。
API Document を見るとかなりいろいろできるのですが、今回はキーリマップのためだけに使います。

Hammerspoon のインストー

公式ページ から zip ファイルをダウンロードします。
Hammerspoon.app をアプリケーションディレクトリにコピーすれば OK です。

なお初回起動のときに、Hammerspoon への制御許可を求められます。
システム環境設定 -> セキュリティとプライバシー -> アクセシビリティで Hammerspoon にチェックを入れれば OK です。

f:id:edosha:20170501150426p:plain

キーバインドの実現

こちら の記事をかなり参考にさせていただきました。
というかコア部分はほとんど上記のスクリプトで、一部追加しただけです。

キーバインド

このスクリプトでは Xcode を開いているときに以下のキーバインドを実現します。

  • Ctrl + Space
    • Mark set
  • Ctrl + W
    • Cut
  • Alt + W
    • Copy
  • Ctrl + Y
    • Paste
  • Ctrl + X, Ctrl + F
    • Open quickly
  • Ctrl + X, Ctrl + S
    • Save file
  • Ctrl + X, N
    • 次のタブへ
  • Ctrl + X, P
    • 前のタブへ
  • Ctrl + X, K
    • タブを閉じる
  • Alt + Shift + ,
    • ファイルの先頭へ移動
  • Alt + Shift + .
    • ファイルの末尾へ移動
  • Ctrl + /
    • Undo
  • Ctrl + '
  • Ctrl + S
    • Search
  • Ctrl + K
    • Kill line
  • Alt + V
    • Page up
スクリプト

実際のスクリプトこれ です。
これを User/.hammerspoon/init.lua にコピーしてください。

f:id:edosha:20170706110234p:plain:w400

(ちなみにこの隠しフォルダは、Shift + Command + . (ドット) で見えます)

ちなみに私は Lua スクリプトの文法を全く知りませんが、スクリプトの改変はなんとかできました。
直感的だと思うので、見ればわかるかなと思います。


おわりに

Xcode での Emacs キーバインドができて、かなり快適になりました。
Hammerspoon 自体は応用範囲が広そうなので、もっといろいろできそうです。