w3mのローカルCGI経由でReFeを使う
w3mのローカルCGI経由でReFeを使ってみようと思います。w3mmanと同じアイディアです。
ファイル: w3mrefe2html.cgi
#!/usr/bin/env ruby # -*- ruby -*- # $Id: w3mrefe2html.cgi,v 1.1 2005/10/28 21:39:40 s-tanaka Exp $ require 'cgi' def run_with_rpipe(*args) io = IO.popen("-", "r") if io.nil? exec(*args) end io end def convert_refe_output(input) result = '' classname = nil first_f = true link_f = false sep_f = false while line = input.gets sep_f = false if first_f tokens = line.split(/\s+/) if tokens.size > 1 and tokens[1] != '<' link_f = true end first_f = false end case line when /^====\s+(.+)\s+====$/ link_f = false sep_f = true classname = $1 when /^----\s+(.+)\s+----$/ link_f = true sep_f = true end line = CGI::escapeHTML(line) if not sep_f and link_f line.gsub!(/[^\s]+/) do |matched| uri = "file:///\$LIB/w3mrefe2html.cgi?query=" + CGI::escape(classname ? "#{classname} #{matched}" : matched) "<a href=#{uri}>#{matched}</a>" end end result << line end result end query = CGI.new['query'].split result = convert_refe_output(run_with_rpipe('refe', *query)) puts 'Content-Type: text/html' puts puts '<html><head><title>w3mrefe</title></head><body><pre>' puts "#{result}</pre></body></html>"
ファイル: w3mrefe
#!/usr/bin/env ruby # -*- ruby -*- # $Id: w3mrefe,v 1.1 2005/10/28 21:39:40 s-tanaka Exp $ require 'cgi' exec 'w3m', "file:///\$LIB/w3mrefe2html.cgi?query=" + CGI::escape(ARGV.join(' '))
まずw3mrefe2html.cgiをw3mのローカルCGIを格納するディレクトリ(dirlist.cgiとかw3mman2html.cgiがあるディレクトリです)に保存します。あとはw3mrefeをrefeの代りに使用するだけです。シェルのエイリアスでalias refe=w3mrefeと設定しておくと便利です。
BUGS: w3mrefeの引数がなかった場合に、検索フォームを表示する機能は実装していません。