bare-tty 2.0.1 → 2.1.1
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.
- package/binding.c +50 -0
- package/index.js +25 -0
- package/package.json +1 -1
package/binding.c
CHANGED
|
@@ -463,6 +463,51 @@ bare_tty_set_mode (js_env_t *env, js_callback_info_t *info) {
|
|
|
463
463
|
return NULL;
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
+
static js_value_t *
|
|
467
|
+
bare_tty_get_window_size (js_env_t *env, js_callback_info_t *info) {
|
|
468
|
+
int err;
|
|
469
|
+
|
|
470
|
+
size_t argc = 1;
|
|
471
|
+
js_value_t *argv[1];
|
|
472
|
+
|
|
473
|
+
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
474
|
+
assert(err == 0);
|
|
475
|
+
|
|
476
|
+
assert(argc == 1);
|
|
477
|
+
|
|
478
|
+
bare_tty_t *tty;
|
|
479
|
+
err = js_get_arraybuffer_info(env, argv[0], (void **) &tty, NULL);
|
|
480
|
+
assert(err == 0);
|
|
481
|
+
|
|
482
|
+
int width, height;
|
|
483
|
+
err = uv_tty_get_winsize(&tty->handle, &width, &height);
|
|
484
|
+
|
|
485
|
+
if (err < 0) {
|
|
486
|
+
js_throw_error(env, uv_err_name(err), uv_strerror(err));
|
|
487
|
+
return NULL;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
js_value_t *result;
|
|
491
|
+
err = js_create_array_with_length(env, 2, &result);
|
|
492
|
+
assert(err == 0);
|
|
493
|
+
|
|
494
|
+
js_value_t *value;
|
|
495
|
+
|
|
496
|
+
err = js_create_int32(env, width, &value);
|
|
497
|
+
assert(err == 0);
|
|
498
|
+
|
|
499
|
+
err = js_set_element(env, result, 0, value);
|
|
500
|
+
assert(err == 0);
|
|
501
|
+
|
|
502
|
+
err = js_create_int32(env, height, &value);
|
|
503
|
+
assert(err == 0);
|
|
504
|
+
|
|
505
|
+
err = js_set_element(env, result, 1, value);
|
|
506
|
+
assert(err == 0);
|
|
507
|
+
|
|
508
|
+
return result;
|
|
509
|
+
}
|
|
510
|
+
|
|
466
511
|
static js_value_t *
|
|
467
512
|
init (js_env_t *env, js_value_t *exports) {
|
|
468
513
|
{
|
|
@@ -500,6 +545,11 @@ init (js_env_t *env, js_value_t *exports) {
|
|
|
500
545
|
js_create_function(env, "setMode", -1, bare_tty_set_mode, NULL, &fn);
|
|
501
546
|
js_set_named_property(env, exports, "setMode", fn);
|
|
502
547
|
}
|
|
548
|
+
{
|
|
549
|
+
js_value_t *fn;
|
|
550
|
+
js_create_function(env, "getWindowSize", -1, bare_tty_get_window_size, NULL, &fn);
|
|
551
|
+
js_set_named_property(env, exports, "getWindowSize", fn);
|
|
552
|
+
}
|
|
503
553
|
{
|
|
504
554
|
js_value_t *val;
|
|
505
555
|
js_create_uint32(env, UV_TTY_MODE_NORMAL, &val);
|
package/index.js
CHANGED
|
@@ -25,6 +25,8 @@ exports.ReadStream = class TTYReadStream extends Readable {
|
|
|
25
25
|
this._onread,
|
|
26
26
|
this._onclose
|
|
27
27
|
)
|
|
28
|
+
|
|
29
|
+
TTYReadStream._streams.add(this)
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
get isTTY () {
|
|
@@ -46,6 +48,7 @@ exports.ReadStream = class TTYReadStream extends Readable {
|
|
|
46
48
|
_destroy (cb) {
|
|
47
49
|
this._pendingDestroy = cb
|
|
48
50
|
binding.close(this._handle)
|
|
51
|
+
TTYReadStream._streams.delete(this)
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
_continueDestroy () {
|
|
@@ -80,6 +83,8 @@ exports.ReadStream = class TTYReadStream extends Readable {
|
|
|
80
83
|
this._handle = null
|
|
81
84
|
this._continueDestroy()
|
|
82
85
|
}
|
|
86
|
+
|
|
87
|
+
static _streams = new Set()
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
exports.WriteStream = class TTYWriteStream extends Writable {
|
|
@@ -96,12 +101,18 @@ exports.WriteStream = class TTYWriteStream extends Writable {
|
|
|
96
101
|
noop,
|
|
97
102
|
this._onclose
|
|
98
103
|
)
|
|
104
|
+
|
|
105
|
+
TTYWriteStream._streams.add(this)
|
|
99
106
|
}
|
|
100
107
|
|
|
101
108
|
get isTTY () {
|
|
102
109
|
return true
|
|
103
110
|
}
|
|
104
111
|
|
|
112
|
+
getWindowSize () {
|
|
113
|
+
return binding.getWindowSize(this._handle)
|
|
114
|
+
}
|
|
115
|
+
|
|
105
116
|
_writev (datas, cb) {
|
|
106
117
|
this._pendingWrite = cb
|
|
107
118
|
binding.writev(this._handle, datas)
|
|
@@ -115,6 +126,7 @@ exports.WriteStream = class TTYWriteStream extends Writable {
|
|
|
115
126
|
_destroy (cb) {
|
|
116
127
|
this._pendingDestroy = cb
|
|
117
128
|
binding.close(this._handle)
|
|
129
|
+
TTYWriteStream._streams.delete(this)
|
|
118
130
|
}
|
|
119
131
|
|
|
120
132
|
_continueWrite (err) {
|
|
@@ -171,6 +183,8 @@ exports.WriteStream = class TTYWriteStream extends Writable {
|
|
|
171
183
|
this._handle = null
|
|
172
184
|
this._continueDestroy()
|
|
173
185
|
}
|
|
186
|
+
|
|
187
|
+
static _streams = new Set()
|
|
174
188
|
}
|
|
175
189
|
|
|
176
190
|
exports.constants = {
|
|
@@ -179,6 +193,17 @@ exports.constants = {
|
|
|
179
193
|
MODE_IO: binding.MODE_IO || 0
|
|
180
194
|
}
|
|
181
195
|
|
|
196
|
+
process
|
|
197
|
+
.on('exit', () => {
|
|
198
|
+
for (const stream of exports.ReadStream._streams) {
|
|
199
|
+
stream.destroy()
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
for (const stream of exports.WriteStream._streams) {
|
|
203
|
+
stream.destroy()
|
|
204
|
+
}
|
|
205
|
+
})
|
|
206
|
+
|
|
182
207
|
const empty = Buffer.alloc(0)
|
|
183
208
|
|
|
184
209
|
function noop () {}
|