Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@ongaeshi

自動テストやコンパイルを簡単に記述するためのauto-shell-command.elを作った

'auto-shell-command.el'は、ファイルセーブ時に指定したシェルコマンドを実行することが出来るものです。似たようなツールとしては flymake や autotest、Guard があります。

ongaeshi/auto-shell-command - Github

特徴

  1. ファイル名単位 で実行するコマンドを指定することが出来る
  2. 一時的にコマンドの実行をON/OFFすることが出来る(まとめて複数のファイルを編集する時に便利)
  3. ファイルの監視からプロセスの実行までEmacsの機能でまかなっているため安定して動作する。Emacsが動く全てのOSで動作する。
  4. 外部ツールによるファイル書き換えによって起こる期待していなかったコマンドの誤作動が起きない
  5. 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'にアクセス

ご意見募集中

わかりにくい部分やバグがありましたらコメント等でお知らせ下さい。

7
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What is going on with this article?