summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-06-17 16:18:56 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-06-17 16:18:56 +0000
commitdd90846fbbdbae0c34e35b0028c6b48c3afc7446 (patch)
treec5ad114e73db2ac4f933c59a424c7c87f6883385
parentfc47936463de22aeb605c0bb3d0a2b452028e6ff (diff)
downloadruby-dd90846fbbdbae0c34e35b0028c6b48c3afc7446.tar.gz
ruby-dd90846fbbdbae0c34e35b0028c6b48c3afc7446.tar.xz
ruby-dd90846fbbdbae0c34e35b0028c6b48c3afc7446.zip
* ext/readline/readline.c (readline_readline): do not set rl_{in,out}stream.
* ext/readline/readline.c (readline_s_set_input): new method. * ext/readline/readline.c (readline_s_set_output): new method. * lib/irb/input-method.rb: set Readline.input and Readline.output. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8638 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog11
-rw-r--r--ext/readline/readline.c34
-rw-r--r--lib/irb/input-method.rb2
-rw-r--r--test/readline/test_readline.rb2
4 files changed, 45 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index ad83d362b..2823c2407 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Sat Jun 18 01:15:36 2005 Shugo Maeda <shugo@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_readline): do not set
+ rl_{in,out}stream.
+
+ * ext/readline/readline.c (readline_s_set_input): new method.
+
+ * ext/readline/readline.c (readline_s_set_output): new method.
+
+ * lib/irb/input-method.rb: set Readline.input and Readline.output.
+
Fri Jun 17 13:01:40 2005 Tanaka Akira <akr@m17n.org>
* lib/time.rb (Time.parse): fix previous leap seconds support.
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index 970a4afa2..0102ddc4c 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -69,10 +69,6 @@ readline_readline(argc, argv, self)
if (!isatty(0) && errno == EBADF) rb_raise(rb_eIOError, "stdin closed");
- 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,
&status);
if (status) {
@@ -100,6 +96,32 @@ readline_readline(argc, argv, self)
}
static VALUE
+readline_s_set_input(self, input)
+ VALUE self, input;
+{
+ OpenFile *ifp;
+
+ rb_secure(4);
+ Check_Type(input, T_FILE);
+ GetOpenFile(input, ifp);
+ rl_instream = rb_io_stdio_file(ifp);
+ return input;
+}
+
+static VALUE
+readline_s_set_output(self, output)
+ VALUE self, output;
+{
+ OpenFile *ofp;
+
+ rb_secure(4);
+ Check_Type(output, T_FILE);
+ GetOpenFile(output, ofp);
+ rl_outstream = rb_io_stdio_file(ofp);
+ return output;
+}
+
+static VALUE
readline_s_set_completion_proc(self, proc)
VALUE self;
VALUE proc;
@@ -736,6 +758,10 @@ Init_readline()
mReadline = rb_define_module("Readline");
rb_define_module_function(mReadline, "readline",
readline_readline, -1);
+ rb_define_singleton_method(mReadline, "input=",
+ readline_s_set_input, 1);
+ rb_define_singleton_method(mReadline, "output=",
+ readline_s_set_output, 1);
rb_define_singleton_method(mReadline, "completion_proc=",
readline_s_set_completion_proc, 1);
rb_define_singleton_method(mReadline, "completion_proc",
diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb
index 045bbd169..a0fa359d3 100644
--- a/lib/irb/input-method.rb
+++ b/lib/irb/input-method.rb
@@ -94,6 +94,8 @@ module IRB
end
def gets
+ Readline.input = STDIN
+ Readline.output = STDOUT
if l = readline(@prompt, false)
HISTORY.push(l) if !l.empty?
@line[@line_no += 1] = l + "\n"
diff --git a/test/readline/test_readline.rb b/test/readline/test_readline.rb
index 304168380..b6f2d2c8b 100644
--- a/test/readline/test_readline.rb
+++ b/test/readline/test_readline.rb
@@ -67,6 +67,8 @@ class TestReadline < Test::Unit::TestCase
STDIN.reopen(stdin_path, "r")
STDOUT.reopen(stdout_path, "w")
begin
+ Readline.input = STDIN
+ Readline.output = STDOUT
yield
ensure
STDIN.reopen(orig_stdin)