読者です 読者をやめる 読者になる 読者になる

quickrun.el 進捗 2011/DEC/14

emacs

quickrun.elの進捗を示します。

アップデートする場合は

以下の S式を評価してください

(auto-install-from-url "https://raw.github.com/syohex/emacs-quickrun/master/quickrun.el")

最終的な結果を待たずに表示

@さんのブログエントリを見て、別に最後に
結果を表示する必要がないなってことで、出力バッファを最初に表示するようにしました。


以下のようなプログラムの場合、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トラッカーまでお願いします。