前田です。

Toru Hoshina <hoshina / best.com> writes:

> 保科です。mailclient を使わせていただいてます(1.2.2ですが…)

ども:-)

> rskkserv も使い始めたのですが、どうも skkinput 2.01 との組合せですと
> 不都合が出ました。辞書に登録されていない文字列でクエリすると、
> skkinput が固まるという症状です。登録ウィンドウが開く、というのが
> 期待される動作なのですが、実際にはダンマリに(泣)

うーん、それはまずいですね。

> skkinput のソースと jed の skk.sl を見くらべてみますと、どうやら
> request した文字列にヒットしなかった場合の処理に違いがありまして、
> jed の skk.sl は skkserv に request した後、カウントを始め、100 を
> 越えたらループから抜ける、という処理になっているのに対し、skkinput は
> '\n' を受けとらない限りループを抜けないのでした。
> 
> ですので、
> 
> --- skkserv.rb.in~	Wed Jan 27 23:35:44 1999
> +++ skkserv.rb.in	Sat Feb 20 15:53:09 1999
> @@ -111,9 +111,9 @@
>  	  printf("message from client %s: WORD\n", s) if $OPT_d
>  	  kana = s.gets(" ")
>  	  if kanji = @dictionary.search(kana)
> 	    ret = "1" + kanji
>  	  else
> -	    ret = "4" + kana
> +	    ret = "4" + kana + "\n"
>  	  end
>  	  printf("send: %s\n", ret) if $OPT_d
>  	  s.write(ret)
> 
> などとして、request された文字列がヒットしなかったときは '\n' を
> 末尾に付けて返すようにすると、jed でも skkinput でも期待した動作を
> するようになりました。

実は以前は"4eee\n"のような文字列を返していたのですが、
本家skkservの仕様に合わせて現在のように変更しました。

以下のようなスクリプトでrskkserv以前にお使いだったSKKサーバ
の仕様を調べていただけないでしょうか。

-- skktest.rb --
require "socket"

sock = TCPsocket.open("localhost", "skkserv")
begin
  sock.write("2")
  p sock.gets(" ")
  sock.write("1eee ")
  sock.write("0")
  p sock.read
ensure
  sock.close
end
--

studly[ruby]$ ruby skktest.rb
"3.9.4 "
"4eee "
studly[ruby]$ ruby skktest.rb
"rskkserv-2.0 "
"4eee "

もし本家skkservの仕様で動かないとなると、skkinputの方を修正
していただくのが筋かなという気がします。

-- 
前田 修吾