From 490f1fc00979b6fb2cd45bf01544e79e9d9ea66c Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 5 Feb 2013 04:27:57 +0000 Subject: [PATCH] console.c: default by stty raw * ext/io/console/console.c (rawmode_opt): use default values by `stty raw`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39060 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ ext/io/console/console.c | 3 ++- test/io/console/test_io_console.rb | 24 +++++++++++++++++------- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4e49d55200..d22edf6211 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Feb 5 13:27:53 2013 Nobuyoshi Nakada + + * ext/io/console/console.c (rawmode_opt): use default values by `stty + raw`. + Tue Feb 5 12:50:47 2013 Marc-Andre Lafortune * range.c: Use div instead of / for bsearch diff --git a/ext/io/console/console.c b/ext/io/console/console.c index f614c68a26..cab8207ce7 100644 --- a/ext/io/console/console.c +++ b/ext/io/console/console.c @@ -105,7 +105,8 @@ rawmode_opt(int argc, VALUE *argv, rawmode_arg_t *opts) if (!NIL_P(vopts)) { VALUE vmin = rb_hash_aref(vopts, ID2SYM(rb_intern("min"))); VALUE vtime = rb_hash_aref(vopts, ID2SYM(rb_intern("time"))); - opts->vmin = 0; + /* default values by `stty raw` */ + opts->vmin = 1; opts->vtime = 0; if (!NIL_P(vmin)) { opts->vmin = NUM2INT(vmin); diff --git a/test/io/console/test_io_console.rb b/test/io/console/test_io_console.rb index ceaf5b9d0f..65514f2b81 100644 --- a/test/io/console/test_io_console.rb +++ b/test/io/console/test_io_console.rb @@ -29,14 +29,21 @@ class TestIO_Console < Test::Unit::TestCase len = 0 th = nil helper {|m, s| + assert_equal([nil, 0], [s.getch(min: 0), len]) + main = Thread.current + go = false th = Thread.start { - m.print("a") len += 1 - sleep 2 - m.print("1234567890") + m.print("a") + m.flush + sleep 0.01 until go and main.stop? len += 10 + m.print("1234567890") + m.flush } assert_equal(["a", 1], [s.getch(min: 1), len]) + go = true + assert_equal(["1", 11], [s.getch, len]) } ensure th.kill if th and th.alive? @@ -46,12 +53,15 @@ class TestIO_Console < Test::Unit::TestCase len = 0 th = nil helper {|m, s| + assert_equal([nil, 0], [s.getch(min: 0, time: 0.1), len]) + main = Thread.current th = Thread.start { - sleep 2 - m.print("a") - len += 1 + sleep 0.01 until main.stop? + len += 2 + m.print("ab") } - assert_equal([nil, 0], [s.getch(time: 0.1), len]) + assert_equal(["a", 2], [s.getch(min: 1, time: 1), len]) + assert_equal(["b", 2], [s.getch(time: 1), len]) } ensure th.kill if th and th.alive?