io-console 0.5.9 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/io/console/console.c +37 -13
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de02d043306e16f29960fa17d759837467ccefd601846e609b4885ea0daa78ff
|
4
|
+
data.tar.gz: c856d4c462e9c1ed04c22863b441fc0b2e0802ad9aae0a2a9307d92d3018dd45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1bc386a15fc15532d8c673a3769284f629a44c10402d5a8b9807ab142d1288eb3158ba6dc485f41e4fa9ead0081c180285fad1bc1f27cf6882e41b44ebdbcf0
|
7
|
+
data.tar.gz: 6476a4e36be5c0f49ec6ebddbfefb902e15d55fc09f726416bdfb9b781a2c7746504ce06c606fe1573af2cfe0fdb10338a78f1088cc43fcae3b71a133c0e87e9
|
data/ext/io/console/console.c
CHANGED
@@ -75,7 +75,7 @@ getattr(int fd, conmode *t)
|
|
75
75
|
#define SET_LAST_ERROR (0)
|
76
76
|
#endif
|
77
77
|
|
78
|
-
static ID id_getc, id_console, id_close
|
78
|
+
static ID id_getc, id_console, id_close;
|
79
79
|
#if ENABLE_IO_GETPASS
|
80
80
|
static ID id_gets, id_chomp_bang;
|
81
81
|
#endif
|
@@ -90,6 +90,10 @@ extern VALUE rb_scheduler_timeout(struct timeval *timeout);
|
|
90
90
|
#define sys_fail_fptr(fptr) rb_sys_fail_str((fptr)->pathv)
|
91
91
|
|
92
92
|
#ifndef HAVE_RB_F_SEND
|
93
|
+
#ifndef RB_PASS_CALLED_KEYWORDS
|
94
|
+
# define rb_funcallv_kw(recv, mid, arg, argv, kw_splat) rb_funcallv(recv, mid, arg, argv)
|
95
|
+
#endif
|
96
|
+
|
93
97
|
static ID id___send__;
|
94
98
|
|
95
99
|
static VALUE
|
@@ -104,22 +108,38 @@ rb_f_send(int argc, VALUE *argv, VALUE recv)
|
|
104
108
|
else {
|
105
109
|
vid = id___send__;
|
106
110
|
}
|
107
|
-
return
|
111
|
+
return rb_funcallv_kw(recv, vid, argc, argv, RB_PASS_CALLED_KEYWORDS);
|
108
112
|
}
|
109
113
|
#endif
|
110
114
|
|
115
|
+
enum rawmode_opt_ids {
|
116
|
+
kwd_min,
|
117
|
+
kwd_time,
|
118
|
+
kwd_intr,
|
119
|
+
rawmode_opt_id_count
|
120
|
+
};
|
121
|
+
static ID rawmode_opt_ids[rawmode_opt_id_count];
|
122
|
+
|
111
123
|
typedef struct {
|
112
124
|
int vmin;
|
113
125
|
int vtime;
|
114
126
|
int intr;
|
115
127
|
} rawmode_arg_t;
|
116
128
|
|
129
|
+
#ifndef UNDEF_P
|
130
|
+
# define UNDEF_P(obj) ((obj) == Qundef)
|
131
|
+
#endif
|
132
|
+
#ifndef NIL_OR_UNDEF_P
|
133
|
+
# define NIL_OR_UNDEF_P(obj) (NIL_P(obj) || UNDEF_P(obj))
|
134
|
+
#endif
|
135
|
+
|
117
136
|
static rawmode_arg_t *
|
118
137
|
rawmode_opt(int *argcp, VALUE *argv, int min_argc, int max_argc, rawmode_arg_t *opts)
|
119
138
|
{
|
120
139
|
int argc = *argcp;
|
121
140
|
rawmode_arg_t *optp = NULL;
|
122
141
|
VALUE vopts = Qnil;
|
142
|
+
VALUE optvals[rawmode_opt_id_count];
|
123
143
|
#ifdef RB_SCAN_ARGS_PASS_CALLED_KEYWORDS
|
124
144
|
argc = rb_scan_args(argc, argv, "*:", NULL, &vopts);
|
125
145
|
#else
|
@@ -134,19 +154,20 @@ rawmode_opt(int *argcp, VALUE *argv, int min_argc, int max_argc, rawmode_arg_t *
|
|
134
154
|
}
|
135
155
|
#endif
|
136
156
|
rb_check_arity(argc, min_argc, max_argc);
|
137
|
-
if (
|
138
|
-
|
139
|
-
VALUE
|
140
|
-
VALUE
|
157
|
+
if (rb_get_kwargs(vopts, rawmode_opt_ids,
|
158
|
+
0, rawmode_opt_id_count, optvals)) {
|
159
|
+
VALUE vmin = optvals[kwd_min];
|
160
|
+
VALUE vtime = optvals[kwd_time];
|
161
|
+
VALUE intr = optvals[kwd_intr];
|
141
162
|
/* default values by `stty raw` */
|
142
163
|
opts->vmin = 1;
|
143
164
|
opts->vtime = 0;
|
144
165
|
opts->intr = 0;
|
145
|
-
if (!
|
166
|
+
if (!NIL_OR_UNDEF_P(vmin)) {
|
146
167
|
opts->vmin = NUM2INT(vmin);
|
147
168
|
optp = opts;
|
148
169
|
}
|
149
|
-
if (!
|
170
|
+
if (!NIL_OR_UNDEF_P(vtime)) {
|
150
171
|
VALUE v10 = INT2FIX(10);
|
151
172
|
vtime = rb_funcall3(vtime, '*', 1, &v10);
|
152
173
|
opts->vtime = NUM2INT(vtime);
|
@@ -161,6 +182,7 @@ rawmode_opt(int *argcp, VALUE *argv, int min_argc, int max_argc, rawmode_arg_t *
|
|
161
182
|
opts->intr = 0;
|
162
183
|
optp = opts;
|
163
184
|
break;
|
185
|
+
case Qundef:
|
164
186
|
case Qnil:
|
165
187
|
break;
|
166
188
|
default:
|
@@ -555,8 +577,8 @@ console_getch(int argc, VALUE *argv, VALUE io)
|
|
555
577
|
if (w < 0) rb_eof_error();
|
556
578
|
if (!(w & RB_WAITFD_IN)) return Qnil;
|
557
579
|
# else
|
558
|
-
VALUE result = rb_io_wait(io, RUBY_IO_READABLE, timeout);
|
559
|
-
if (result
|
580
|
+
VALUE result = rb_io_wait(io, RB_INT2NUM(RUBY_IO_READABLE), timeout);
|
581
|
+
if (!RTEST(result)) return Qnil;
|
560
582
|
# endif
|
561
583
|
}
|
562
584
|
else if (optp->vtime) {
|
@@ -1629,9 +1651,11 @@ Init_console(void)
|
|
1629
1651
|
#endif
|
1630
1652
|
id_console = rb_intern("console");
|
1631
1653
|
id_close = rb_intern("close");
|
1632
|
-
|
1633
|
-
|
1634
|
-
|
1654
|
+
#define init_rawmode_opt_id(name) \
|
1655
|
+
rawmode_opt_ids[kwd_##name] = rb_intern(#name)
|
1656
|
+
init_rawmode_opt_id(min);
|
1657
|
+
init_rawmode_opt_id(time);
|
1658
|
+
init_rawmode_opt_id(intr);
|
1635
1659
|
#ifndef HAVE_RB_F_SEND
|
1636
1660
|
id___send__ = rb_intern("__send__");
|
1637
1661
|
#endif
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: io-console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nobu Nakada
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: add console capabilities to IO instances.
|
14
14
|
email: nobu@ruby-lang.org
|
@@ -37,14 +37,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.
|
40
|
+
version: 2.6.0
|
41
41
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
42
|
requirements:
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
requirements: []
|
47
|
-
rubygems_version: 3.
|
47
|
+
rubygems_version: 3.4.0.dev
|
48
48
|
signing_key:
|
49
49
|
specification_version: 4
|
50
50
|
summary: Console interface
|