'auto-shell-command.el'は、ファイルセーブ時に指定したシェルコマンドを実行することが出来るものです。似たようなツールとしては flymake や autotest、Guard があります。
ongaeshi/auto-shell-command - Github
特徴
- ファイル名単位 で実行するコマンドを指定することが出来る
- 一時的にコマンドの実行をON/OFFすることが出来る(まとめて複数のファイルを編集する時に便利)
- ファイルの監視からプロセスの実行までEmacsの機能でまかなっているため安定して動作する。Emacsが動く全てのOSで動作する。
- 外部ツールによるファイル書き換えによって起こる期待していなかったコマンドの誤作動が起きない
- Emacs再起動時に消える一時的なコマンドを登録することが出来る
インストール
'emacs-deferred'が必要です。
(auto-install-from-url "https://github.com/kiwanami/emacs-deferred/raw/master/deferred.el")
インストール後、auto-shell-command
をインストールして下さい。
(auto-install-from-url "https://raw.github.com/ongaeshi/auto-shell-command/master/auto-shell-command.el")
初期設定
init.el
(require 'auto-shell-command)
;; キーバインドの設定 (一時的にauto-shell-commandの実行をON/OFFする)
(global-set-key "\C-c\C-m" 'ascmd:toggle)
;; 結果の通知をGrowlで行う (optional)
(defun ascmd:notify (msg) (deferred:process-shell (format "growlnotify -m %s -t emacs" msg))))
;; エラー時のポップアップを見やすくする (optional, '(require 'popwin)'が必要です)
(push '("*Auto Shell Command*" :height 20) popwin:special-display-config)
コマンドリストの設定
コマンドリストを設定すると色々なことが出来ます。
とあるC言語のプロジェクトの設定例
;; 下が優先高
(ascmd:add '("/path/to/dir" "make")) ; 基本は'make'
(ascmd:add '("/path/to/dir/.gitignore" "make run")) ; ルートフォルダ直下の'.gitignore'を触ったら'make run'(実行)
(ascmd:add '("/path/to/dir/doc" "make doc")) ; 'doc'以下を触ったら'make doc'(ドキュメント生成)
(ascmd:add '("/path/to/dir/BBB" "(cd /path/to/dir/AAA && make && cd ../BBB && make)")) ; BBBをビルドする時は先にAAAをビルドする必要が・・・(良くあることだよね?)
とあるRubyプロジェクトの設定例
(ascmd:add '("/path/test/runner.rb" "rake test")) ; 'test/runner.rb'を触ったらフルテスト(時間がかかる)
(ascmd:add '("/path/test/test_/.*\.rb" "ruby -I../lib -I../test $FILE")) ; 'test/test_*.rb'を触ったら編集したファイルだけを単体でテスト(時間節約)
ブラウザとの連携
(ascmd:add '("Resources/.*\.js" "wget -O /dev/null http://0.0.0.0:9090/run")) ; 'Resources/*.js'以下を触ったら'http://0.0.0.0:9090/run'にアクセス
ご意見募集中
わかりにくい部分やバグがありましたらコメント等でお知らせ下さい。