永井@知能.九工大です.

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-dev:8892] Re: [PATCH] Ruby/Tk
Date: Mon, 10 Jan 2000 02:34:15 +0900
Message-ID: <E127M9n-0003Cf-00 / ev.netlab.co.jp>
matz> In message "[ruby-dev:8891] Re: [PATCH] Ruby/Tk"
matz>     on 00/01/09, Koji Arai <JCA02266 / nifty.ne.jp> writes:
matz> |Ruby/Tkのバグ修正
matz> | [ruby-dev:8678][ruby-dev:8689]
matz> |と提案
matz> | [ruby-dev:8706]
matz> |は忘れられてますでしょうか?
matz> 貰った当時は永井さんが「うん」というのを待っていたつもりだっ
matz> たんですが、年末から先週末までめちゃめちゃいそがしかったので
matz> 正直言うと忘れてました。

これはすみませんでした.(_O_)

matz> 当てちゃって良いですか? > 永井さん

[ruby-dev:8678][ruby-dev:8689] については OK だと思います.

[ruby-dev:8706] で bindtags から削除された部分については少しだけ注意です.
私もはっきりしませんが,これは Tk3.6 への対応用ではなかったかと思います.
まぁ,Tk3.6 なんて obsolete ですから,私も消しちゃっていいと思うのですが,
念のため,まつもとさんの承認を得る必要がありますね.

# 実際のところは,Tk4.0 ,4.1 も切り捨て,Tk4.2 は対応するが,
# あまり推奨はしないというのでいいかもしれません.

より気になっているのは,新井さんの module TkBind を
module TkBindCore などとしておいて,class TkBind を作るのはどうか
ということです.
新規に追加する bindtag をオブジェクトとして管理するか,
それとも文字列での管理で十分か (all は最初から文字列ですが) ...
文字列の方が気楽という気もしないではないですが,
文字列だとスコープで利用範囲の制約をかけられないんで,
思わぬバグの混入の可能性が上がっちゃうんですよね.
個人的には class TkBind かなぁと思います.

で,class TkBind ではないんですが,別の問題に対するパッチです.
call_back において文字列に ! が含まれるとエラーとなってしまいます.
毎回チェックするのは無駄なので,エラーを生じた際には 
! のエスケープを試みてから再実行するようにしてみました.

--- tk.rb~	Tue Jan 11 00:31:09 2000
+++ tk.rb	Tue Jan 11 12:12:49 2000
@@ -405,7 +413,7 @@
     INTERP = TclTkIp.new
   end
 
-  INTERP._invoke("proc", "rb_out", "args", "if {[set st [catch {ruby [format \"TkCore.callback %%Q!%s!\" $args]} ret]] != 0} {return -code $st $ret} {return $ret}")
+  INTERP._invoke("proc", "rb_out", "args", "if {[set st [catch {ruby [format \"TkCore.callback %%Q!%s!\" $args]} ret]] != 0} {if {[regsub -all {!} $args {\\!} newargs] == 0} {return -code $st $ret} {if {[set st [catch {ruby [format \"TkCore.callback %%Q!%s!\" $newargs]} ret]] != 0} {return -code $st $ret} {return $ret}}} {return $ret}")
 
   def callback_break
     raise TkCallbackBreak, "Tk callback returns 'break' status"

-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai / ai.kyutech.ac.jp