んなまにのメモ帳

気が向いたときに更新されます。

Automatorを使ってシェルスクリプトにショートカットキーを割り当てる

こんにちは、んなまにです。

6年ほど使っているLet's noteの電源投入成功率が10%ほどになってしまったので、
MacBook Pro 13インチ なんとかディスプレイモデルを買いました。
自分のMacを持つのは初めてですが、UNIXだしHomeBrewなるパッケージ管理ツール
あるらしく、便利そうと思い買っちゃいました。

 

買ってきて早速、HomeBrewをインストールし、HomeBrewからEmacsをインストール。
さあ、Emacsをショートカットキーで起動・・・と思ったところでEmacsが見当たらない。

HomeBrewでインストールすると、「アプリケーション」に追加されないのか困った。
そこで、調べていると、Automatorというものを発見、シェルスクリプトを登録してMac上にサービスやアプリケーションとして登録できるツールらしい。
Emacsをデーモンとして起動して使いたいと思っていたので、シェルスクリプトを使えるのは願ったりだ思い設定したのでメモ。

Automator

AutoMatorは、Mac OS 10.4から標準で使えるワークフロー構築システムというものらしい。
できることは、登録されているアプリケーションを組み合わせて自動化処理の作成など。
今回は、その中に「シェルスクリプトを実行」という項目がありこれを使ってやりたいことを実現しようと思います。
Automatorは「Finder」>「アプリケーション」>「Automator」にあります。

シェルスクリプトにショートカットキーを割り当てる

今回やりたいことは、「Emacsをデーモンで起動してから、EmacsClientを開く」処理をショートカットキー「Ctrl + Shift + E」に割り当てる。
全体的な流れは、以下のような感じ。

  1. シェルスクリプト作成
  2. Automatorにサービスとして登録
  3. 登録したサービスにショートカットキーを割り当てる

シェルスクリプト作成

まず、Emacsデーモンを起動して、EmacsClientを開くシェルスクリプトを作ります。
コードは以下。

# 起動中のEmacsデーモンを数える
APP_NAME="/usr/local/Cellar/emacs/24.4/Emacs.app"
EMACS_COUNT=`ps ax | grep $APP_NAME | grep -v grep | wc -l`;

if [ $EMACS_COUNT -eq 0 ] ; then 
    # Emacsデーモンが起動していなければ、
    # Emacsデーモンを起動した後、emacsclientを起動
    /usr/local/bin/emacs --daemon &&
    /usr/local/bin/emacsclient -c &	
else
    # 起動していれば、emacsclientを起動
    /usr/local/bin/emacsclient -c &	
fi

作ったスクリプトAutomatorに登録

Automatorにサービスとして登録します。
Automatorは「Finder」>「アプリケーション」>「Automator」を起動。


「書類の種類を選択してください」でサービスを選択。

f:id:nnnamani:20150208133801j:plain

続いて、画面左側「アクション」>「ライブラリ」>「シェルスクリプトを実行」を選択。
画面右側で「サービスは、次の項目を受け取ります」を「入力なし」、「検索対象」は「すべてのアプリケーション」を選びます。
最後に作成したシェルスクリプトを、右側のスクリプト領域に貼り付けます。

f:id:nnnamani:20150208133828j:plain



「ファイル」>「保存」で名前をつけて保存すると、登録は完了です。

サービスにショートカットキーを割り当てる

最後に、作成したサービスにショートカットキーを割り当てます。
設定は特に難しいことはなく、「システム環境設定」>「キーボード」>「ショートカットキー」
で上で作成したサービスを探し、ショートカットキーを設定するだけです。

おわりに

Automatorを使って、シェルスクリプトをアプリケーションとして認識させることができるとわかりました。Automatorは、アプリケーション間での連携など、もっと高度な事をやるためにある機能のようですが、それは後々機会があれば調べようと思います。現状で、とりあえずシェルスクリプトにショートカットが割り当てられれば良かったので。

ここまで結構面倒だったから、これでスクリプトにショートカットを割り当てるもっと簡単な方法があったら悲しい・・・ていうかありそう。

とりあえず、これで当面幸せなので良しとします。
最後まで読んでいただきありがとうございました。