日々の定型作業を自動化する auto-shell-command.el を作りました


ongaeshi/auto-shell-command

ファイルセーブ時に指定したシェルコマンドを非同期で実行するelispです。似たようなツールとして flymake や autotest , Guard といったものがあります。

  • ファイル名をキーに実行するコマンドを指定するため、同じ拡張子のファイルでもそれぞれ違うコマンドを指定可能
  • 主要な機能をEmacsAPIで実装しておりEmacsが動く全てのOSで動作

プロジェクトのビルド、テストの実行、エミュレータやブラウザの起動といった定型作業を、シェルを開かずにファイルセーブ時に自動で実行させることが可能です。

インストール、使い方

Githubに日本語のドキュメントを置きました。

README.ja.markdown

  • 特徴
  • インストール
  • 初期設定
  • コマンドリストの設定
  • 特殊変数
  • サンプル
  • 一時的に使うコマンドを登録する
  • ファイルを書き換えずに関連づけたコマンドを実行する

について書いてあります。

デモ: C言語 + Makefile の環境で自動コンパイル

以下のコマンドをauto-shell-commandに関連付けます。

samples/ascmd-c

(ascmd:add '("ascmd-c/.*\.[ch]" "make all run"))
  • 上記のS式を評価
  • ascmd-c/ を適当な場所にコピー
  • ascmd-c/ 以下の.[ch]ファイルを触る
  • 裏で''make all run''が走り、結果が''*Auto Shell Command*''に

明示的にコマンドを呼び出すことなく、ファイルの編集&セーブと同時にビルド&実行確認が出来るようになります。

プロジェクトの都合(コマンド名が違ったり、環境変数を渡す必要が・・)に合わせ、コマンドはファイル単位でカスタマイズすることが可能です。

その他

  • コマンドの実行を一時的にサスペンドすることが出来ます(ascmd:toggle)。まとめて複数のファイルを編集する時に便利です。
  • 実行結果は''*Auto Shell Command*''に出力され、 M-x ascmd:popup でいつでも表示可能です。
  • M-x C-u ascmd:popup だと横に並べて表示されます。結果を横画面でモニターしながらファイルを編集する時に便利です。
  • M-x ascmd:add で一時的なコマンドを追加することが出来ます
  • M-x ascm:exec でファイルを書き換えずに関連づけたコマンドを実行することが出来ます

謝辞

deferred.el がなければauto-shell-command を作ることは出来ませんでした。この素晴らしいライブラリを使ったEmacsアプリケーションがもっと増えることを願っています。