Unixでスライドショー: perl編

シェル、Emacsとやってきたスタイドショーシリーズ。今回は始めてコードを書く。Perl+TKでスライドショー。

GUIのアプリケーション苦手だが、manページだけを頼りに30分ぐらいで1ページで仕上がった。Perl-TkがGUIツールキットとしては分りやすいものってことなんだろう。インタラクティブなツールが必要なときはWebアプリにしちゃうかemacsで作ろうとするが、perl-Tkも使えそう。

Tclは忘れられても、その相棒だったTkの方が長生きすることになっちゃったわけだ。皮肉な運命だ。でも、ハイレベル言語でCのライブラリをくっつけて効率良くアプリケーションを作るというTclの考えかたは今時のスクリプティング言語やSwigなどに受け継がれて生きている。Ousterhout教授、ありがとう。

ライブラリのインストール
FreeBSD: cd /usr/ports/x11-toolkits/p5-Tk/; sudo make install; cd /usr/ports/graphics/p5-Tk-JPEG-Lite; sudo make install
Ubuntu: sudo apt-get install perl-tk; Tk::JPEG::Liteはcpanから適当にインストール


#!/usr/local/bin/perl -w
use strict;
use Carp;
use Data::Dumper;
use Tk;
use Tk::JPEG::Lite;

main();

sub main
{
# ページを描く
my $mw = MainWindow->new;
$mw->Label(-text => 'Hello, world!')->pack;
# ボタンにセットされる。
my $control;
$mw->Button(-text=>'Stop', -command=>sub { $control="stop" } )->pack;
$mw->Button(-text=>'Resume', -command=>sub { $control="resume" } )->pack;
$mw->Button(-text=>'Quit', -command=>sub { exit } )->pack;
# 画像を見せるためのキャンバス
my $c=$mw->Canvas(-height=>900, -width=>1200);
my $image=$mw->Photo('-format' => 'jpeg');
$c->createImage(0,0, -anchor=>'nw', -image=>$image);
$c->pack(-expand=>1); # -expand -fill

# 標準入力から画像ファイルを読み込み見せる。
while() {
chomp;
my $file=$_;
next unless -f $file;

eval { $image->configure(-file=>$file) };
next if ($@);

do {
$mw->update;
$mw->after(3000);
$mw->update;

# ボタンが押されたか見る
if ($control and $control eq "resume") {
$control=undef;
}
} while ($control and $control eq "stop");
}
# MainLoop;
}


実なこのプログラム、FreeBSDで書いたんだけど、Ubuntuではまだ作動確認しいない。だけど、Perlだから問題ないでしょう。

これで、普通のアプリケーションをインストールせずUnixツールでスライドショーを作る、というシリーズは終り。次回のUnix偏屈シリーズはMakefileとepegで高速手抜きサムネールギャラリーのを作るの巻。