quickrun.el 進捗 2011/DEC/18

outputterの拡張

Vim quickrunにある定義済みの outputter機能をいくつか実装しました。
利用できるのは以下の 6つです。

  • browser(出力結果をブラウザで開く)
  • buffer:buffername(出力を buffernameのバッファに行う)
  • file:filename(出力を filenameに書きだす)
  • variable:varname(出力を変数 varnameに代入する)
  • message(出力を *Message*バッファに表示)
  • null(出力を行わない)

buffer以外を指定した場合結果のバッファをポップアップしません。
HTMLの生成で生のソースを見るより、ブラウザで見たいというのに
使うのが主なんじゃないかなと思っています。


例を示します。以下では file local variableを使って指定しました。
これに対して quickrunを実行すると結果がブラウザで開かれます。
browse-urlを使っていますので、使われるブラウザはそれに準ずるものです。

#!perl
use strict;
use warnings;

use Text::Xslate;
use Data::Section::Simple qw(get_data_section);

my $tx = Text::Xslate->new( syntax => 'Kolon' );

my $tmpl_arg = {
    quickrun => [
        {
            name   => 'quickrun.vim',
            author => 'thinca',
            url    => 'https://github.com/thinca/vim-quickrun',
        },
        {
            name   => 'quickrun.el',
            author => 'Syohei Yoshida',
            url    => 'https://github.com/syohex/emacs-quickrun',
        },
    ],
};

print $tx->render_string(get_data_section('tmpl.html'), $tmpl_arg);

__DATA__
@@ tmpl.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title></title>
</head>

<body>
<h1>Quickrun</h1>
<ul>
: for $quickrun -> $q {
  <li><a href="<: $q.url :>"><: $q.name :></a> is developed by <: $q.author :></li>
: }
</ul>
</body>
</html>

__END__
#
#  Local Variables:
#  quickrun-option-outputter: browser
#  End:
#

ファイルへの出力例も示します。以下では qr_test.txtに出力が行われます。

#!perl
use strict;
use warnings;

print "I love emacs\n";
print "You love emacs\n";
print "We love emacs\n";

#
#  Local Variables:
#  quickrun-option-outputter: file:qr_test.txt
#  End:
#

その他修正

  • 実行前にファイルを削除してしまう問題の修正
  • recentfのリストが汚染されるので find-file-noselectの利用をやめる
  • テンプレートパラメータに %d(ディレクトリ名に展開される)を追加
  • リファクタリング

終わりに

Vimテクニックバイブルを見ながら作成していますが、runnerモジュールと
いう機能を除きだいたい実装できたのではないかと思います。あとはドキュメントを
しっかり書いて、EmacsWikiに書くという作業ですかね。英語は超苦手ですが、
頑張って書きます。


問題があれば issueトラッカーまでどうぞ。