perlをリファクタリング
下記のリポジトリのコードをリファクタリングしてました。(君にぴったりのVimPluginを選んでくれる端末アプリ)
select.pl
#!/usr/bin/perl -w use strict; use Curses::UI; use 5.01; my $cui = new Curses::UI( -color_support => 1 ); my %plugin_name; my $win = $cui->add('window_id', 'Window'); my $label = $win->add( 'mylabel', 'Label', -text => 'Exit: q', -bold => 1, ); $label->draw; $cui->set_binding(sub {exit}, "q"); my $supp = $cui->dialog( -message => "補完機能を強化したい?", -buttons => ['yes','no'], -values => [1,0], -title => 'Question', ); if ($supp) { $plugin_name{"Shougo/neocomplete"} = "https://github.com/Shougo/neocomplete.vim"; } my $twi = $cui->dialog( -message => "Do you want to Twitter in Vim", -buttons => ['yes','no'], -values => [1,0], -title => 'Question', ); if ($twi) { $plugin_name{"Shougo/neocomplete"} = "https://github.com/Shougo/neocomplete.vim"; } my $template = $cui->dialog( -message => "You want to ease templete?", -buttons => ['yes','no'], -values => [1,0], -title => 'Question', ); if ($template) { $plugin_name{"Shougo/neocomplete"} = "https://github.com/Shougo/neocomplete.vim"; } my $gist = $cui->dialog( -message => "Do You want to use gist in vim?", -buttons => ['yes','no'], -values => [1,0], -title => 'Question', ); if ($gist) { $plugin_name{"Shougo/neocomplete"} = "https://github.com/Shougo/neocomplete.vim"; } my $exit = $cui->dialog( -message => "Plugin suit to you is\n" . $plugin_name{"Shougo/neocomplete"}, -values => [1], -title => 'Question', ); $cui->mainloop();
このプログラムのダイアログ出力が、同じような繰り返しなので、下記のようにforeachした。ちなみに、yamlでデータ部分を分けた。
select.pl
#!/usr/bin/perl -w use strict; use YAML::Syck (); use Curses::UI; use Data::Dumper; use 5.01; my $cui = new Curses::UI( -color_support => 1 ); my %you_match_plugin_name; my $win = $cui->add('window_id', 'Window'); my $label = $win->add( 'mylabel', 'Label', -text => 'Exit: q', -bold => 1, ); $label->draw; $cui->set_binding(sub {exit}, "q"); my $filename = "osusume.yaml"; open(IN, $filename) or die("cannnot open file."); read(IN, my $input , (-s $filename)); close(IN); my %ydoc = YAML::Syck::Load($input); foreach my $data(keys(%ydoc)){ my $message = $ydoc{$data}[0]; my $neobundle_name = $ydoc{$data}[1]; my $url = $ydoc{$data}[2]; my $template = $cui->dialog( -message => $message, -buttons => ['yes','no'], -values => [1,0], -title => 'Question', ); if ($template) { $you_match_plugin_name{$neobundle_name} = $url; } } my @plugin_name_value = values(%you_match_plugin_name); my $exit = $cui->dialog( -message => "あなたにぴったりのpluginは\n" . Dumper(@plugin_name_value), -values => [1], -title => '結果', ); $cui->mainloop();
osusume.yaml
Gist: - Gistを楽にしたい - mattn/gist-vim - http://
実行したら下記のように怒られる。
Your screen is currently too small for this application. Resize the screen and restart the application. Pressto exit...
小さくしようと思って、サイズを決定するメソッドを調べたらlayout()みたいだ。 しかし、これは自動的に設定してくれるので、いらう必要ないようだ。
一体どうすればいいのだろう。そもそも、挙動もあまりわかってないので、ループ自体ダメなのかな。