えいや、と思いたって、まえまえから気になっていた、 tekezo さんの「w3m ユーザに送る Firefox のススメ」を参考に Firefox を設定しまくってみようと思いました。
http://www.pqrs.org/~tekezo/firefox/firefox.html
やってみたところ、えらいすばらしかったです。ありがたすぎてありがとうございますと思いました。 Hint-a-Hint でリンクたどる、ってのが少し遅い、とかレンダリングが遅い、とか、 w3m に比べて少し不満も残りますが。 GoogleAutoPager もすばらしいものだなと思いました。
これで足りないのは migemo くらいだ…と思って XUL/Migemo を入れてみたのですが、なんか違うな、と思ったのでいつも使ってる cmigemo を使おうと思いました。
もともと私は cmigemo が毎度起動するのに耐えられないので、 cmigemo-(client|server) とか作っていたので、 cmigemo-server を少し書き換えて、そのクライアントを JS で書けば良いだろう、と思いました。
やる気起きないのでスクリプトをはりまくろうと思いました。
cmigemo-server:
#!/usr/local/bin/ruby-yarv #!/usr/bin/env ruby require 'socket' require 'nkf' gs = TCPServer.open('localhost', 31413) addr = gs.addr addr.shift printf("server is on %s\n", addr.join(":")) io = IO.popen("/usr/local/bin/cmigemo -q -d /usr/local/share/migemo/euc-jp/migemo-dict", 'r+') while true Thread.start(gs.accept) do |s| print(s, " is accepted\n") while s.gets $_.chomp! if /^POST/ len = 0 while s.gets $_.chomp! if /Content-Length: (\d+)/ len = $1.to_i end break if $_ == '' end $_ = s.read(len) $_.chomp! io.write("#{$_}\n") io.gets s.write(NKF.nkf('-Ew', $_)) break end io.write("#{$_}\n") io.gets s.write($_) end print(s, " is gone\n") s.close end end
cmigemo-client:
#!/usr/local/bin/ruby-yarv #!/usr/bin/env ruby require "socket" s = TCPSocket.open('localhost', 31413) while (gets) s.write($_) s.gets $_.chomp! print("#{$_}\n") STDOUT.flush end s.close
今回は別に client の方は関係ないと思いました。
で、 XUL/Migemo の romaninput の search 関数を以下のように書き換えました。サーバとか決め打ちなのはださいなとは思いました。
function search(back,keyword,aSilently){mydump("search"); var roman= keyword || gCurrentKeyword; if(roman==""){return false;} var xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", "http://localhost:31413/", false); xmlhttp.send(roman); var myExp = xmlhttp.responseText; var findFlag; if(gPrevKeyword==roman){ findFlag = back ? XM_FIND_BACK : XM_FIND_FORWARD ;//F4なり。back次第で方向が変わる。 }else{ findFlag = XM_FIND_DEFAULT; } var win = document.commandDispatcher.focusedWindow; var doc = (win != window) ? Components.lookupMethod(win, 'document').call(win) : (findFlag & XM_FIND_BACK) ? getLastChildDocument(document.getElementById("content").contentDocument) : document.getElementById("content").contentDocument; searchInDocument(findFlag,doc,(new RegExp(myExp.replace(/\n/im,""),"im")),aSilently); gPrevKeyword=roman; }
こんな適当一瞬 hack で migemo が快適に使えるようになったので、 cmigemo とか XUL/Migemo とかありがとうございますと思いました。
あと、なんとなく語尾を全部思いましたにしましたがどうでもいいと思いました。