diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-09 15:54:17 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-09 15:54:17 +0000 |
commit | b44618d5e5f531beacd42d4222560981667be572 (patch) | |
tree | 186c54735b10681ee85bf1dfec8abbf7b67db66c | |
parent | 08bf7189f873e74e973eff7cee6540b974720a31 (diff) | |
download | ruby-b44618d5e5f531beacd42d4222560981667be572.tar.gz |
* ext/io/console/console.c (console_set_raw): new method.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/io/console/console.c | 22 |
3 files changed, 27 insertions, 1 deletions
@@ -1,4 +1,6 @@ -Mon May 10 00:35:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> +Mon May 10 00:54:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * ext/io/console/console.c (console_set_raw): new method. * ext/io/console/console.c (ttymode): reverted previous commit. @@ -413,7 +413,9 @@ with all sufficient information, see the ChangeLog file. * io/console * new methods: * IO#noecho {|io| } + * IO#echo= * IO#raw {|io| } + * IO#raw! * IO#getch * IO#winsize * IO.console diff --git a/ext/io/console/console.c b/ext/io/console/console.c index a521312e47..7656c66c21 100644 --- a/ext/io/console/console.c +++ b/ext/io/console/console.c @@ -246,6 +246,27 @@ console_raw(VALUE io) return ttymode(io, rb_yield, set_rawmode); } +/* + * call-seq: + * io.raw! + * + * Enables raw mode. + */ +static VALUE +console_set_raw(VALUE io) +{ + conmode t; + rb_io_t *fptr; + int fd; + + GetOpenFile(io, fptr); + fd = GetReadFD(fptr); + if (!getattr(fd, &t)) rb_sys_fail(0); + set_rawmode(&t); + if (!setattr(fd, &t)) rb_sys_fail(0); + return io; +} + static VALUE getc_call(VALUE io) { @@ -520,6 +541,7 @@ void InitVM_console(void) { rb_define_method(rb_cIO, "raw", console_raw, 0); + rb_define_method(rb_cIO, "raw!", console_set_raw, 0); rb_define_method(rb_cIO, "getch", console_getch, 0); rb_define_method(rb_cIO, "echo=", console_set_echo, 1); rb_define_method(rb_cIO, "echo?", console_echo_p, 0); |