io-console 0.5.0 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/io/console/console.c +30 -16
- data/ext/io/console/extconf.rb +6 -3
- 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: 823fa2d6014a030a75d08f381bfad31a713e5df4202b627312214b3f0c1d7885
|
4
|
+
data.tar.gz: 557347a5cbf21d2a5f8ca52c06c53d774f88905642b2dcd43b176809a1e16d06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd2b8410bc0c0310e6961ff6883c794d672bf6ed1a2898e21ab44383ca863bc54a859931623a33548c120b7830d6309f5bc971f4d5e52777857958893687abcc
|
7
|
+
data.tar.gz: fb798eaa2a77a7efa26c433b7481a706f27b020259dc64caa01a87185d755a8078ac63a7987c6b37caf916836d1b8342f7e5bd520cdee5ae921b7e864c08cfed
|
data/ext/io/console/console.c
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
*/
|
5
5
|
#include "ruby.h"
|
6
6
|
#include "ruby/io.h"
|
7
|
+
#include "ruby/thread.h"
|
7
8
|
|
8
9
|
#ifdef HAVE_UNISTD_H
|
9
10
|
#include <unistd.h>
|
@@ -22,7 +23,7 @@ typedef struct termios conmode;
|
|
22
23
|
static int
|
23
24
|
setattr(int fd, conmode *t)
|
24
25
|
{
|
25
|
-
while (tcsetattr(fd,
|
26
|
+
while (tcsetattr(fd, TCSANOW, t)) {
|
26
27
|
if (errno != EINTR) return 0;
|
27
28
|
}
|
28
29
|
return 1;
|
@@ -110,6 +111,9 @@ rawmode_opt(int *argcp, VALUE *argv, int min_argc, int max_argc, rawmode_arg_t *
|
|
110
111
|
int argc = *argcp;
|
111
112
|
rawmode_arg_t *optp = NULL;
|
112
113
|
VALUE vopts = Qnil;
|
114
|
+
#ifdef RB_SCAN_ARGS_PASS_CALLED_KEYWORDS
|
115
|
+
argc = rb_scan_args(argc, argv, "*:", NULL, &vopts);
|
116
|
+
#else
|
113
117
|
if (argc > min_argc) {
|
114
118
|
vopts = rb_check_hash_type(argv[argc-1]);
|
115
119
|
if (!NIL_P(vopts)) {
|
@@ -119,6 +123,7 @@ rawmode_opt(int *argcp, VALUE *argv, int min_argc, int max_argc, rawmode_arg_t *
|
|
119
123
|
if (!vopts) vopts = Qnil;
|
120
124
|
}
|
121
125
|
}
|
126
|
+
#endif
|
122
127
|
rb_check_arity(argc, min_argc, max_argc);
|
123
128
|
if (!NIL_P(vopts)) {
|
124
129
|
VALUE vmin = rb_hash_aref(vopts, ID2SYM(id_min));
|
@@ -164,11 +169,13 @@ set_rawmode(conmode *t, void *arg)
|
|
164
169
|
cfmakeraw(t);
|
165
170
|
t->c_lflag &= ~(ECHOE|ECHOK);
|
166
171
|
#elif defined HAVE_TERMIOS_H || defined HAVE_TERMIO_H
|
167
|
-
t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
|
172
|
+
t->c_iflag &= ~(IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IXOFF|IXANY|IMAXBEL);
|
168
173
|
t->c_oflag &= ~OPOST;
|
169
|
-
t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN);
|
174
|
+
t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN|XCASE);
|
170
175
|
t->c_cflag &= ~(CSIZE|PARENB);
|
171
176
|
t->c_cflag |= CS8;
|
177
|
+
t->c_cc[VMIN] = 1;
|
178
|
+
t->c_cc[VTIME] = 0;
|
172
179
|
#elif defined HAVE_SGTTY_H
|
173
180
|
t->sg_flags &= ~ECHO;
|
174
181
|
t->sg_flags |= RAW;
|
@@ -185,10 +192,12 @@ set_rawmode(conmode *t, void *arg)
|
|
185
192
|
#endif
|
186
193
|
#ifdef ISIG
|
187
194
|
if (r->intr) {
|
188
|
-
t->c_iflag |= BRKINT
|
189
|
-
t->c_lflag |= ISIG
|
195
|
+
t->c_iflag |= BRKINT;
|
196
|
+
t->c_lflag |= ISIG;
|
197
|
+
t->c_oflag |= OPOST;
|
190
198
|
}
|
191
199
|
#endif
|
200
|
+
(void)r;
|
192
201
|
}
|
193
202
|
}
|
194
203
|
|
@@ -351,9 +360,9 @@ ttymode_with_io(VALUE io, VALUE (*func)(VALUE, VALUE), VALUE farg, void (*setter
|
|
351
360
|
|
352
361
|
/*
|
353
362
|
* call-seq:
|
354
|
-
* io.raw(min: nil, time: nil) {|io| }
|
363
|
+
* io.raw(min: nil, time: nil, intr: nil) {|io| }
|
355
364
|
*
|
356
|
-
* Yields +self+ within raw mode.
|
365
|
+
* Yields +self+ within raw mode, and returns the result of the block.
|
357
366
|
*
|
358
367
|
* STDIN.raw(&:gets)
|
359
368
|
*
|
@@ -365,6 +374,9 @@ ttymode_with_io(VALUE io, VALUE (*func)(VALUE, VALUE), VALUE farg, void (*setter
|
|
365
374
|
* The parameter +time+ specifies the timeout in _seconds_ with a
|
366
375
|
* precision of 1/10 of a second. (default: 0)
|
367
376
|
*
|
377
|
+
* If the parameter +intr+ is +true+, enables break, interrupt, quit,
|
378
|
+
* and suspend special characters.
|
379
|
+
*
|
368
380
|
* Refer to the manual page of termios for further details.
|
369
381
|
*
|
370
382
|
* You must require 'io/console' to use this method.
|
@@ -378,11 +390,11 @@ console_raw(int argc, VALUE *argv, VALUE io)
|
|
378
390
|
|
379
391
|
/*
|
380
392
|
* call-seq:
|
381
|
-
* io.raw!(min: nil, time: nil)
|
393
|
+
* io.raw!(min: nil, time: nil, intr: nil) -> io
|
382
394
|
*
|
383
|
-
* Enables raw mode
|
395
|
+
* Enables raw mode, and returns +io+.
|
384
396
|
*
|
385
|
-
* If the terminal mode needs to be back, use io.raw { ... }
|
397
|
+
* If the terminal mode needs to be back, use <code>io.raw { ... }</code>.
|
386
398
|
*
|
387
399
|
* See IO#raw for details on the parameters.
|
388
400
|
*
|
@@ -454,7 +466,7 @@ getc_call(VALUE io)
|
|
454
466
|
return rb_funcallv(io, id_getc, 0, 0);
|
455
467
|
}
|
456
468
|
#else
|
457
|
-
static
|
469
|
+
static void *
|
458
470
|
nogvl_getch(void *p)
|
459
471
|
{
|
460
472
|
int len = 0;
|
@@ -463,7 +475,6 @@ nogvl_getch(void *p)
|
|
463
475
|
switch (c) {
|
464
476
|
case WEOF:
|
465
477
|
break;
|
466
|
-
return (VALUE)0;
|
467
478
|
case 0x00:
|
468
479
|
case 0xe0:
|
469
480
|
buf[len++] = c;
|
@@ -473,13 +484,13 @@ nogvl_getch(void *p)
|
|
473
484
|
buf[len++] = c;
|
474
485
|
break;
|
475
486
|
}
|
476
|
-
return (VALUE)len;
|
487
|
+
return (void *)(VALUE)len;
|
477
488
|
}
|
478
489
|
#endif
|
479
490
|
|
480
491
|
/*
|
481
492
|
* call-seq:
|
482
|
-
* io.getch(min: nil, time: nil)
|
493
|
+
* io.getch(min: nil, time: nil, intr: nil) -> char
|
483
494
|
*
|
484
495
|
* Reads and returns a character in raw mode.
|
485
496
|
*
|
@@ -517,8 +528,11 @@ console_getch(int argc, VALUE *argv, VALUE io)
|
|
517
528
|
if (w < 0) rb_eof_error();
|
518
529
|
if (!(w & RB_WAITFD_IN)) return Qnil;
|
519
530
|
}
|
531
|
+
else {
|
532
|
+
rb_warning("vtime option ignored if intr flag is unset");
|
533
|
+
}
|
520
534
|
}
|
521
|
-
len = (int)
|
535
|
+
len = (int)(VALUE)rb_thread_call_without_gvl(nogvl_getch, wbuf, RUBY_UBF_IO, 0);
|
522
536
|
switch (len) {
|
523
537
|
case 0:
|
524
538
|
return Qnil;
|
@@ -1483,7 +1497,7 @@ console_dev(int argc, VALUE *argv, VALUE klass)
|
|
1483
1497
|
|
1484
1498
|
/*
|
1485
1499
|
* call-seq:
|
1486
|
-
* io.getch(min: nil, time: nil)
|
1500
|
+
* io.getch(min: nil, time: nil, intr: nil) -> char
|
1487
1501
|
*
|
1488
1502
|
* See IO#getch.
|
1489
1503
|
*/
|
data/ext/io/console/extconf.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
require 'mkmf'
|
3
3
|
|
4
|
-
ok = true
|
4
|
+
ok = true if RUBY_ENGINE == "ruby"
|
5
5
|
hdr = nil
|
6
6
|
case
|
7
7
|
when macro_defined?("_WIN32", "")
|
@@ -14,8 +14,9 @@ when have_header(hdr = "sgtty.h")
|
|
14
14
|
%w"stty gtty".each {|f| have_func(f, hdr)}
|
15
15
|
else
|
16
16
|
ok = false
|
17
|
-
end
|
18
|
-
|
17
|
+
end if ok
|
18
|
+
case ok
|
19
|
+
when true
|
19
20
|
have_header("sys/ioctl.h") if hdr
|
20
21
|
# rb_check_hash_type: 1.9.3
|
21
22
|
# rb_io_get_write_io: 1.9.1
|
@@ -27,4 +28,6 @@ if ok
|
|
27
28
|
create_makefile("io/console") {|conf|
|
28
29
|
conf << "\n""VK_HEADER = #{vk_header}\n"
|
29
30
|
}
|
31
|
+
when nil
|
32
|
+
File.write("Makefile", dummy_makefile($srcdir).join(""))
|
30
33
|
end
|
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.5.
|
4
|
+
version: 0.5.6
|
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: 2020-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: add console capabilities to IO instances.
|
14
14
|
email: nobu@ruby-lang.org
|
@@ -36,14 +36,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 2.
|
39
|
+
version: 2.4.0
|
40
40
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: '0'
|
45
45
|
requirements: []
|
46
|
-
rubygems_version: 3.
|
46
|
+
rubygems_version: 3.2.0.pre1
|
47
47
|
signing_key:
|
48
48
|
specification_version: 4
|
49
49
|
summary: Console interface
|