From: sheepman Date: 2005-02-15T22:57:14+09:00 Subject: [ruby-dev:25699] readline.so should use rl_outstream こんばんは、sheepman です。 2ちゃんねるのスレで irb を使っている時に irb(main):001:0> help :inject と実行すると、以後入力がエコーされないという報告がありました。 僕の手元でも再現しました。 以下のように STDOUT を reopen すると再現します。 io = STDOUT.clone o = File.open("/dev/null", "w") STDOUT.reopen(o) STDOUT.reopen(io) o.close $ ruby -v ruby 1.9.0 (2005-02-14) [i686-linux] readline に STDOUT を教えてやる必要があるようです。 以下はパッチです。 * ext/readline/readline.c (Readline.readline): use rl_outstream and rl_instream. Index: readline.c =================================================================== RCS file: /src/ruby/ext/readline/readline.c,v retrieving revision 1.20 diff -u -1 -r1.20 readline.c --- readline.c 16 Jan 2005 22:09:13 -0000 1.20 +++ readline.c 15 Feb 2005 13:14:34 -0000 @@ -9,2 +9,3 @@ #include "ruby.h" +#include "rubyio.h" #include "rubysig.h" @@ -47,3 +48,4 @@ int status; - + OpenFile *ofp, *ifp; + rb_secure(4); @@ -56,2 +58,6 @@ + GetOpenFile(rb_stdout, ofp); + rl_outstream = rb_io_stdio_file(ofp); + GetOpenFile(rb_stdin, ifp); + rl_instream = rb_io_stdio_file(ifp); buff = (char*)rb_protect((VALUE(*)_((VALUE)))readline, (VALUE)prompt, -- sheepman / TAMURA Takashi sheepman@tcn.zaq.ne.jp http://sheepman.parfait.ne.jp/