goodict.cgi

ここしばらく、w3m から goo辞書をお手軽に利用する Local CGI である goodict.cgi が使えなくなっていたので、改造して使えるようにしてみた。

#!/usr/bin/perl

# ~/.w3m/urimethodmap に追加する設定
# e:      file:/cgi-bin/goodict.cgi?%s
# w:      file:/cgi-bin/goodict.cgi?%s
# j:      file:/cgi-bin/goodict.cgi?%s
# a:      file:/cgi-bin/goodict.cgi?%s
#
# URL に e:abc と指定すると abc を英和辞書で検索
# URL に w:1:あいう と指定すると「あいう」を和英辞書で一致検索

use Encode;
$url = "http://dictionary.goo.ne.jp/";
$_ = $ENV{"QUERY_STRING"};
if ($_ =~ /^e:/) {
    $switch = "ej";
} elsif ($_ =~ /^w:/) {
    $switch = "je";
} elsif ($_ =~ /^j:/) {
    $switch = "jn";
} elsif ($_ =~ /^a:/) {
    $switch = "all";
}
s@^[ewja]:@@ && s@^//@@ && s@/$@@;
s/^([0-6])://;
$mode=$1;
if ($mode==""){
    $mode="0";
}
if ($_) {
	# 空白を書くのが面倒なので、Ctrl-L を書いたら空白に変換するようにする
	s/%0C/ /g;
	s/%([\da-f][\da-f])/pack('C', hex($1))/egi;
	$word=$_;
	# ターミナルが EUC-JP の場合
	$_ = encode('utf-8', decode('euc-jp',$_));
	s/[\000-\040\+:#?&%<>"\177-\377]/sprintf('%%%02X', unpack('C', $&))/eg;
	$url .= "srch/$switch/$_/m".$mode."u";
}
print <<EOF;
w3m-control: GOTO $url
w3m-control: DELETE_PREVBUF
w3m-control: SEARCH $word

EOF