quickrun.el 進捗 2011/DEC/14
quickrun.elの進捗を示します。
アップデートする場合は
以下の S式を評価してください
(auto-install-from-url "https://raw.github.com/syohex/emacs-quickrun/master/quickrun.el")
最終的な結果を待たずに表示
@hitode909さんのブログエントリを見て、別に最後に
結果を表示する必要がないなってことで、出力バッファを最初に表示するようにしました。
以下のようなプログラムの場合、1秒ごとに文字が出ます。
#include <stdio.h> #include <unistd.h> int main(void) { int i; for (i = 0; i < 5; i++) { printf("hello %d\n", i); sleep(1); } return 0; }
まだ調べられていませんが、現状では改行記号が出力されるまで
バッファリングされるようです。なんで、たまに改行を出すようには
した方がいいかと思います。
色対応
前回対応していたのですが、画がなかったので示しておきます。
# -*- coding: utf-8 -*- require 'rspec' def add(a, b) a + b end def sub(a, b) a * b end describe "Test func" do it "one plus one" do (add(1,1)==2).should be_true end it "one minus one" do (sub(1,1)==0).should be_true end end # # Local Variables: # quickrun-option-cmd-alist: ((:command . "rspec") # (:exec . "%c -c %s")) # End: #
RSpecを色つきで結果を出力した場合の例です。
outputterの対応
vim-quickrunのものと同等かはよくわかっていないのですが、出力バッファを
加工するための枠組みです。現状ではデフォルトのoutputterは上記の
ANSI Color Sequenceを処理するというものにしています。
コマンド情報の :outputterか quickrun-option-outputter変数に関数を
指定すると with-current-bufferを使い、*quickrun*バッファに切り替えて、
その関数を実行します。例えば, SASSとか LESSから CSSを生成する場合は、
outputterとして (lambda () (css-mode))としておけば、出力バッファは
css-modeとなり、ハイライトが行われるはずです。
以下に highlight-phraseを使った簡単な例を示します。
特定のキーワードを簡単に強調することができます。
#!perl use strict; use warnings; use utf8; binmode STDOUT, ":utf8"; my @chars = qw/あ い う え お/; for my $i (1..10) { print $chars[ int(rand(scalar @chars) ) ] . "っぱい\n"; } __END__ # (defface oppai-face '((t (:height 2.0 :bold t :underline t))) nil) # # Local Variables: # quickrun-option-outputter: (lambda () (highlight-phrase "おっぱい" 'oppai-face)) # End: #
:compile, :linkパラメータの削除
vim-quickrun同様 :execパラメータにすべてを設定するようにしました。
複数のコマンドを実行する必要がある場合は、リストで指定します。
この変更に伴い、quickrun-compile-onlyは :compile-onlyパラメータが
あるもののみ有効にしました。この方が -Wallとか -Werrorとか付けれる
しいいかなと思いました。デフォルトの C, C++の設定ではそうなっています。
またコンパイル、リンクは同期的に行っていましたが、非同期に行うように
しました。quickrunを実行してすぐに、編集に戻ることが可能です。
(Javaはコピーしないので若干微妙かもしれませんが、Java以外の言語は
すぐにコピーを取るので、すぐに編集しても問題はないはずです。
あとはバグ修正だったり、リファクタリングですね。
終わりに
今回紹介した機能が気になる方はぜひアップデートしてみてください。
問題があったら、githubの issueトラッカーまでお願いします。