From b44618d5e5f531beacd42d4222560981667be572 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 9 May 2010 15:54:17 +0000 Subject: [PATCH] * 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 --- ChangeLog | 4 +++- NEWS | 2 ++ ext/io/console/console.c | 22 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 398b2b8391..7677a7010f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,6 @@ -Mon May 10 00:35:41 2010 Nobuyoshi Nakada +Mon May 10 00:54:15 2010 Nobuyoshi Nakada + + * ext/io/console/console.c (console_set_raw): new method. * ext/io/console/console.c (ttymode): reverted previous commit. diff --git a/NEWS b/NEWS index 53e78e9a09..a96ba820e0 100644 --- a/NEWS +++ b/NEWS @@ -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);