Add alternative reading via shell on the environment which don't support interactively reading.
This commit is contained in:
parent
a108b7f9fd
commit
5a3c2d7ce4
4 changed files with 31 additions and 6 deletions
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2013 anseki
|
Copyright (c) 2014 anseki
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation
|
obtaining a copy of this software and associated documentation
|
||||||
|
|
|
@ -65,6 +65,7 @@ try {
|
||||||
```
|
```
|
||||||
|
|
||||||
## Release History
|
## Release History
|
||||||
|
* 2014-06-27 v0.2.3 Add alternative reading via shell on the environment which don't support interactively reading.
|
||||||
* 2013-12-18 v0.2.2 Error handle for the environment which don't support interactively reading from stdin.
|
* 2013-12-18 v0.2.2 Error handle for the environment which don't support interactively reading from stdin.
|
||||||
* 2013-08-30 v0.2.0 Rewrite exporting methods.
|
* 2013-08-30 v0.2.0 Rewrite exporting methods.
|
||||||
* 2013-08-29 v0.1.0 Initial release.
|
* 2013-08-29 v0.1.0 Initial release.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* readlineSync
|
* readlineSync
|
||||||
* https://github.com/anseki/readline-sync
|
* https://github.com/anseki/readline-sync
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013 anseki
|
* Copyright (c) 2014 anseki
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -14,9 +14,19 @@ var promptText = '> ',
|
||||||
fs = require('fs'),
|
fs = require('fs'),
|
||||||
stdin = process.stdin,
|
stdin = process.stdin,
|
||||||
stdout = process.stdout,
|
stdout = process.stdout,
|
||||||
buffer = new Buffer(BUF_SIZE);
|
buffer = new Buffer(BUF_SIZE),
|
||||||
|
useShell = true;
|
||||||
|
|
||||||
var _readlineSync = function(display) {
|
function _readlineShell() {
|
||||||
|
// Win isn't supported by sync-exec v0.3.2
|
||||||
|
var command = /* require('os').platform() === 'win32' ?
|
||||||
|
'cmd "' + __dirname + '\\read.bat' : */
|
||||||
|
'sh "' + __dirname + '/read.sh"',
|
||||||
|
resExec = require('sync-exec')(command); // instead of execSync (node v0.12+)
|
||||||
|
return resExec.status === 0 && !resExec.stderr ? (resExec.stdout + '') : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _readlineSync(display) {
|
||||||
var input = '', rsize, err;
|
var input = '', rsize, err;
|
||||||
|
|
||||||
if (display) { stdout.write(display, encoding); }
|
if (display) { stdout.write(display, encoding); }
|
||||||
|
@ -29,6 +39,14 @@ var _readlineSync = function(display) {
|
||||||
rsize = fs.readSync(stdin.fd, buffer, 0, BUF_SIZE);
|
rsize = fs.readSync(stdin.fd, buffer, 0, BUF_SIZE);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.code === 'EOF') { break; } // pipe
|
if (e.code === 'EOF') { break; } // pipe
|
||||||
|
|
||||||
|
if (useShell) {
|
||||||
|
// Try reading via shell
|
||||||
|
input = _readlineShell();
|
||||||
|
if (typeof input === 'string') { break; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Give up...
|
||||||
if (e.code === 'EAGAIN') { // EAGAIN, resource temporarily unavailable
|
if (e.code === 'EAGAIN') { // EAGAIN, resource temporarily unavailable
|
||||||
// util can't inherit Error.
|
// util can't inherit Error.
|
||||||
err = new Error('The platform doesn\'t support interactive reading from stdin');
|
err = new Error('The platform doesn\'t support interactive reading from stdin');
|
||||||
|
@ -46,7 +64,10 @@ var _readlineSync = function(display) {
|
||||||
stdin.pause();
|
stdin.pause();
|
||||||
|
|
||||||
return input.trim();
|
return input.trim();
|
||||||
};
|
}
|
||||||
|
|
||||||
|
// for dev
|
||||||
|
exports.useShellSet = function(use) { useShell = use; };
|
||||||
|
|
||||||
exports.setPrompt = function(newPrompt) {
|
exports.setPrompt = function(newPrompt) {
|
||||||
if (typeof newPrompt === 'string') {
|
if (typeof newPrompt === 'string') {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "readline-sync",
|
"name": "readline-sync",
|
||||||
"description": "Synchronous Readline",
|
"description": "Synchronous Readline",
|
||||||
"version": "0.2.2",
|
"version": "0.2.3",
|
||||||
"homepage": "https://github.com/anseki/readline-sync",
|
"homepage": "https://github.com/anseki/readline-sync",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "anseki"
|
"name": "anseki"
|
||||||
|
@ -23,6 +23,9 @@
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
},
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"sync-exec": "~0.3.2"
|
||||||
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"readline",
|
"readline",
|
||||||
"synchronous",
|
"synchronous",
|
||||||
|
|
Loading…
Reference in a new issue