[#8530] Enumerable and rand — Koretsugu Daigoro <tmmcross@...>

これつぐです。

21 messages 1999/12/05
[#8534] Re: Enumerable and rand — matz@... (Yukihiro Matsumoto) 1999/12/06

まつもと ゆきひろです

[#8581] Re: [ruby-list:19228] Ruby 1.4.3 — Katsuyuki Komatsu <komatsu@...>

小松です。

19 messages 1999/12/07
[#8592] Re: [ruby-list:19228] Ruby 1.4.3 — matz@... (Yukihiro Matsumoto) 1999/12/07

まつもと ゆきひろです

[#8645] urllib and httplib — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

47 messages 1999/12/14
[#8646] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/14

なひです.

[#8653] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/14

まつもと ゆきひろです

[#8656] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/15

なひです.

[#8659] Re: urllib and httplib — Wakou Aoyama <wakou@...> 1999/12/15

青山です。

[#8685] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/12/21

なひです.

[#8687] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/21

高橋征義です。

[#8690] Re: urllib and httplib — matz@... (Yukihiro Matsumoto) 1999/12/21

まつもと ゆきひろです

[#8717] Re: urllib and httplib — TAKAHASHI Masayoshi <maki@...> 1999/12/24

高橋征義です。

[#8963] Re: urllib and httplib — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/01/19

なひです.

[#8650] [PATCH] Ruby/Tk — Koji Arai <JCA02266@...>

新井です。

20 messages 1999/12/14
[#8651] Re: [PATCH] Ruby/Tk — Koji Arai <JCA02266@...> 1999/12/14

新井です。

[#8692] [win] dir name — KANEKO Naoshi <wbs01621@...>

金子です。

22 messages 1999/12/21
[#8695] Re: [win] dir name — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/12/22

小田@QNES です。

[#8741] Re: [ruby-list:19945] Re: array + empty string — Wakou Aoyama <wakou@...>

青山です。

18 messages 1999/12/27
[#8743] Re: [ruby-list:19945] Re: array + empty string — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8742] [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...>

西@九大です。

64 messages 1999/12/27
[#8744] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8748] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/28

西@九大です。

[#8751] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/28

まつもと ゆきひろです

[#8767] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...> 1999/12/29

西@九大です。

[#8777] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/30

まつもと ゆきひろです

[#8791] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Minero Aoki <aamine@...> 1999/12/31

あおきです。

[#8792] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 1999/12/31

まつもと ゆきひろです

[#8793] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — ARIMA Yasuhiro <fit0298@...> 1999/12/31

有馬です。

[#8795] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 1999/12/31

 knuです。

[#8798] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — matz@... (Yukihiro Matsumoto) 2000/01/01

まつもと ゆきひろです

[#8811] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Akinori MUSHA aka knu <knu@...> 2000/01/03

 knuです。

[ruby-dev:8676] embed Ruby/Tk root window in another window

From: nagai@...
Date: 1999-12-20 05:06:38 UTC
List: ruby-dev #8676
永井@知能.九工大です.

ruby-list に書いた Ruby/Tk window の埋め込みの件に関するパッチです.
ruby-1.4.3 用になってます.
テストは以下のようにしてみてください.
Ruby/Tk が使える状況なら wish も使えるでしょうから,まず wish で,
-------------------------------------
% toplevel .top
% winfo id .top
-------------------------------------
とでもして埋め込み対象の window id を獲得しておきます.
ここではこのトップレベルウィジェットに埋め込むわけです.
仮に window id が 0x440001c であるとすると,
-------------------------------------
module TkCore
  TK_EMBEDDED_WINDOW = '0x440001c'
end
require 'tk'
TkButton.new(nil, 'text'=>'Ruby exit', 'command'=>proc{exit}).pack
Tk.mainloop
-------------------------------------
のようにすれば,wish のトップレベルウィジェット中に 
Ruby/Tk のボタンが生成されると思います.
TK_EMBEDDED_WINDOW の定義は require 'tk' の前でなければなりません.
require 'tk' で Tk のインタープリタが初期化されますが,
その際にチェックして,埋め込みにするのかどうかを決定しているためです.

Ruby/Tk Plugin を本当に実現するには,
Plugin API 関連の作成や security 関連の検討が必要ですが,
このパッチは,まぁ,それに向けての取り掛かりということで.(^_^)

パッチの対象ファイルは 3 個です.
----------< ext/tcltklib/tcltklib.c >-------------------------
--- tcltklib.c~	Tue Oct 12 18:11:28 1999
+++ tcltklib.c	Mon Dec 20 01:54:58 1999
@@ -198,11 +198,18 @@
 
 /* create and initialize interpreter */
 static VALUE
-ip_new(self)
+ip_new(argc, argv, self)
+    int argc;
+    VALUE argv[];
     VALUE self;
 {
     struct tcltkip *ptr;	/* tcltkip data struct */
     VALUE obj;			/* newly created object */
+    VALUE win_id;
+    char *s;
+
+    /* scan arguments */
+    rb_scan_args(argc, argv, "01", &win_id);
 
     /* create object */
     obj = Data_Make_Struct(self, struct tcltkip, 0, ip_free, ptr);
@@ -217,6 +224,34 @@
     if (Tcl_Init(ptr->ip) == TCL_ERROR) {
 	rb_raise(rb_eRuntimeError, "%s", ptr->ip->result);
     }
+
+#if TCL_MAJOR_VERSION >= 8
+    /* embed Tk root window in another window */
+    if (argc == 1 && TYPE(win_id) == T_STRING) {
+      s = STR2CSTR(win_id);
+      if (strlen(s) > 0) {
+	char *buf;
+	char *esf = "set argv [list {-use} {";
+	char *est = "}]";
+
+	DUMP2("set embedded window-id(%s)", s);
+	buf = ALLOCA_N(char, strlen(esf) + strlen(s) + strlen(est) + 1);
+	strcpy(buf, esf);
+	strcat(buf, s);
+	strcat(buf, est);
+	ptr->return_value = Tcl_Eval(ptr->ip, buf);
+	if (ptr->return_value == TCL_ERROR) {
+	  rb_raise(rb_eRuntimeError, "%s", ptr->ip->result);
+	}
+	ptr->return_value = Tcl_Eval(ptr->ip, "set argc 2");
+	if (ptr->return_value == TCL_ERROR) {
+	  rb_raise(rb_eRuntimeError, "%s", ptr->ip->result);
+	}
+      }
+    }
+#endif
+
+    /* from Tcl_AppInit() */
     DUMP1("Tk_Init");
     if (Tk_Init(ptr->ip) == TCL_ERROR) {
 	rb_raise(rb_eRuntimeError, "%s", ptr->ip->result);
@@ -499,7 +534,7 @@
 
     rb_define_module_function(lib, "mainloop", lib_mainloop, 0);
 
-    rb_define_singleton_method(ip, "new", ip_new, 0);
+    rb_define_singleton_method(ip, "new", ip_new, -1);
     rb_define_method(ip, "_eval", ip_eval, 1);
     rb_define_method(ip, "_toUTF8",ip_toUTF8,2);
     rb_define_method(ip, "_fromUTF8",ip_fromUTF8,2);
-------------------------------------------------------------- 

----------< ext/tcltklib/lib/tcltk.rb >-----------------------
--- tcltk.rb~	Tue Oct 12 18:11:28 1999
+++ tcltk.rb	Mon Dec 20 01:21:56 1999
@@ -85,9 +85,9 @@
 class TclTkInterpreter
 
   # initialize(): 
-  def initialize()
+  def initialize(win_id = nil)
     # generate interpreter object
-    @ip = TclTkIp.new()
+    @ip = TclTkIp.new(win_id)
 
     # add ruby_fmt command to tcl interpreter
     # ruby_fmt command format arguments by `format' and call `ruby' command
-------------------------------------------------------------- 

----------< ext/tk/lib/tk.rb >--------------------------------
--- tk.rb~	Mon Dec  6 18:03:37 1999
+++ tk.rb	Mon Dec 20 01:41:33 1999
@@ -399,7 +399,11 @@
   include TkComm
   extend TkComm
 
-  INTERP = TclTkIp.new
+  if const_defined? 'TK_EMBEDDED_WINDOW'
+    INTERP = TclTkIp.new(TK_EMBEDDED_WINDOW)
+  else
+    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}")
 
-------------------------------------------------------------- 
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread

Prev Next