[#8468] require で SEGV — ruby <g96p0935@...>
西本です。
[#8469] [PATCH] -s command line option — nobu.nakada@...
なかだです。
[#8507] mode_t in file.c — Katsuyuki Komatsu <komatsu@...>
小松です。
[#8530] Enumerable and rand — Koretsugu Daigoro <tmmcross@...>
これつぐです。
まつもと ゆきひろです
これつぐです。
まつもと ゆきひろです
原です。
まつもと ゆきひろです
原です。
ごとけんです
これつぐです。
[#8565] interface declaretion — "Dai.K." <MAP2303@...>
[#8581] Re: [ruby-list:19228] Ruby 1.4.3 — Katsuyuki Komatsu <komatsu@...>
小松です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
小松です。
まつもと ゆきひろです
小松です。
[#8622] Win32API (Re: Ruby 1.4.3 binaries for Cygwin and DJGPP) — WATANABE Hirofumi <Hirofumi.Watanabe@...>
わたなべです.
有馬@FITECです。
よしだです
[#8623] [BUG?] core dump `ruby -r debug' — IWAMURO Motonori <iwa@...>
岩室@富士通です。
[#8635] slow gsub — WATANABE Hirofumi <Hirofumi.Watanabe@...>
わたなべです.
[#8645] urllib and httplib — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
なひです.
高橋征義です。
なひです.
まつもと ゆきひろです
なひです.
青山です。
なひです.
高橋征義です。
まつもと ゆきひろです
高橋征義です。
なひです.
西@九大です。
なかだです。
あおきです。
[#8650] [PATCH] Ruby/Tk — Koji Arai <JCA02266@...>
新井です。
新井です。
新井です。
新井です。
永井@知能.九工大です.
新井です。
永井@知能.九工大です.
新井です。
新井です。
[#8665] [mswin32] STDERR does not work during `_function. — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです.
金子です。
金子です。
[#8667] make symlinks around libruby.so in instruby.rb — akira yamada / やまだあきら <akira@...>
[#8692] [win] dir name — KANEKO Naoshi <wbs01621@...>
金子です。
小田@QNES です。
えぐち@エスアンドイー です。
小田@QNES です。
えぐち@エスアンドイー です。
なかだです。
小田@QNES です。
えぐち@エスアンドイー です。
小田@QNES です。
[#8705] [mswin32] 100% CPU usage when use sleep — Katsuyuki Komatsu <komatsu@...>
小松です。
まつもと ゆきひろです
小松です。
[#8722] [mswin32] Win32API — KANEKO Naoshi <wbs01621@...>
金子です。
小松です。
まつもと ゆきひろです
[#8741] Re: [ruby-list:19945] Re: array + empty string — Wakou Aoyama <wakou@...>
青山です。
まつもと ゆきひろです
青山です。
まつもと ゆきひろです
ごとけんです
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#8742] [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) — Kazunori NISHI <kazunori@...>
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
西@九大です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
西@九大です。
あおきです。議論も好き。
西@九大です。
あおきです。
まつもと ゆきひろです
有馬です。
knuです。
まつもと ゆきひろです
これつぐです。
knuです。
まつもと ゆきひろです
あおきです。
まつもと ゆきひろです
In message "[ruby-dev:8792] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)"
まつもと ゆきひろです
ごとけんです
ごとけんです
なかだです。
ごとけんです
[ruby-dev:8676] embed Ruby/Tk root window in another window
永井@知能.九工大です.
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