Fix #38, change the placement of colon in default query
A colon in `query` doesn't mean a starting point of user input now. It is common style that makes a colon mean a separator.
This commit is contained in:
parent
c719316327
commit
e39454cd2b
3 changed files with 84 additions and 83 deletions
48
README.md
48
README.md
|
@ -14,20 +14,20 @@ readlineSync tries to let your script have a conversation with the user via a co
|
||||||
var readlineSync = require('readline-sync');
|
var readlineSync = require('readline-sync');
|
||||||
|
|
||||||
// Wait for user's response.
|
// Wait for user's response.
|
||||||
var userName = readlineSync.question('May I have your name? :');
|
var userName = readlineSync.question('May I have your name? ');
|
||||||
console.log('Hi ' + userName + '!');
|
console.log('Hi ' + userName + '!');
|
||||||
|
|
||||||
// Handle the secret text (e.g. password).
|
// Handle the secret text (e.g. password).
|
||||||
var favFood = readlineSync.question('What is your favorite food? :', {
|
var favFood = readlineSync.question('What is your favorite food? ', {
|
||||||
hideEchoBack: true // The typed text on screen is hidden by `*` (default).
|
hideEchoBack: true // The typed text on screen is hidden by `*` (default).
|
||||||
});
|
});
|
||||||
console.log('Oh, ' + userName + ' loves ' + favFood + '!');
|
console.log('Oh, ' + userName + ' loves ' + favFood + '!');
|
||||||
```
|
```
|
||||||
|
|
||||||
```console
|
```console
|
||||||
May I have your name? :CookieMonster
|
May I have your name? CookieMonster
|
||||||
Hi CookieMonster!
|
Hi CookieMonster!
|
||||||
What is your favorite food? :****
|
What is your favorite food? ****
|
||||||
Oh, CookieMonster loves tofu!
|
Oh, CookieMonster loves tofu!
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ It can include the [placeholders](#placeholders).
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
program = readlineSync.question('Which program starts do you want? :', {
|
program = readlineSync.question('Which program starts do you want? ', {
|
||||||
defaultInput: 'firefox'
|
defaultInput: 'firefox'
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
@ -236,13 +236,13 @@ For example:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
readlineSync.setDefaultOptions({limit: ['green', 'yellow', 'red']});
|
readlineSync.setDefaultOptions({limit: ['green', 'yellow', 'red']});
|
||||||
a1 = readlineSync.question('Which color of signal? :'); // Input is limited to 3 things.
|
a1 = readlineSync.question('Which color of signal? '); // Input is limited to 3 things.
|
||||||
a2 = readlineSync.question('Which color of signal? :'); // It's limited yet.
|
a2 = readlineSync.question('Which color of signal? '); // It's limited yet.
|
||||||
a3 = readlineSync.question('What is your favorite color? :', {limit: null}); // It's unlimited temporarily.
|
a3 = readlineSync.question('What is your favorite color? ', {limit: null}); // It's unlimited temporarily.
|
||||||
a4 = readlineSync.question('Which color of signal? :'); // It's limited again.
|
a4 = readlineSync.question('Which color of signal? '); // It's limited again.
|
||||||
readlineSync.setDefaultOptions({limit: ['beef', 'chicken']});
|
readlineSync.setDefaultOptions({limit: ['beef', 'chicken']});
|
||||||
a5 = readlineSync.question('Beef or Chicken? :'); // Input is limited to new 2 things.
|
a5 = readlineSync.question('Beef or Chicken? '); // Input is limited to new 2 things.
|
||||||
a6 = readlineSync.question('And you? :'); // It's limited to 2 things yet.
|
a6 = readlineSync.question('And you? '); // It's limited to 2 things yet.
|
||||||
```
|
```
|
||||||
|
|
||||||
The Object as `options` can have following properties.
|
The Object as `options` can have following properties.
|
||||||
|
@ -380,11 +380,11 @@ The [placeholders](#placeholders) like `'$<a-e>'` are replaced to an Array that
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
direction = readlineSync.keyIn('Left or Right? :', {limit: 'lr'}); // 'l' or 'r'
|
direction = readlineSync.keyIn('Left or Right? ', {limit: 'lr'}); // 'l' or 'r'
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
dice = readlineSync.keyIn('Roll the dice, What will the result be? :',
|
dice = readlineSync.keyIn('Roll the dice, What will the result be? ',
|
||||||
{limit: '$<1-6>'}); // range of '1' to '6'
|
{limit: '$<1-6>'}); // range of '1' to '6'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ If the user input empty text (i.e. pressed the Enter key only), return this.
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
lang = readlineSync.question('Which language? :', {defaultInput: 'javascript'});
|
lang = readlineSync.question('Which language? ', {defaultInput: 'javascript'});
|
||||||
```
|
```
|
||||||
|
|
||||||
### <a name="basic_options-truevalue_falsevalue"></a>`trueValue`, `falseValue`
|
### <a name="basic_options-truevalue_falsevalue"></a>`trueValue`, `falseValue`
|
||||||
|
@ -437,7 +437,7 @@ One of above or an Array that includes multiple things (or Array includes Array)
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
answer = readlineSync.question('How do you like it? :', {
|
answer = readlineSync.question('How do you like it? ', {
|
||||||
trueValue: ['yes', 'yeah', 'yep'],
|
trueValue: ['yes', 'yeah', 'yep'],
|
||||||
falseValue: ['no', 'nah', 'nope']
|
falseValue: ['no', 'nah', 'nope']
|
||||||
});
|
});
|
||||||
|
@ -527,8 +527,8 @@ readlineSync.setDefaultOptions({
|
||||||
print: function(display, encoding)
|
print: function(display, encoding)
|
||||||
{ process.stdout.write(display, encoding); }
|
{ process.stdout.write(display, encoding); }
|
||||||
});
|
});
|
||||||
var name = readlineSync.question('May I have your name? :');
|
var name = readlineSync.question('May I have your name? ');
|
||||||
var loc = readlineSync.question('Hi ' + name + '! Where do you live? :');
|
var loc = readlineSync.question('Hi ' + name + '! Where do you live? ');
|
||||||
```
|
```
|
||||||
|
|
||||||
* Let somebody hear our conversation in real time.
|
* Let somebody hear our conversation in real time.
|
||||||
|
@ -548,15 +548,15 @@ node conv.js >/tmp/fifo
|
||||||
```
|
```
|
||||||
|
|
||||||
```console
|
```console
|
||||||
May I have your name? :Oz
|
May I have your name? Oz
|
||||||
Hi Oz! Where do you live? :Emerald City
|
Hi Oz! Where do you live? Emerald City
|
||||||
```
|
```
|
||||||
|
|
||||||
And then, another terminal shows this synchronously:
|
And then, another terminal shows this synchronously:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
May I have your name? :Oz
|
May I have your name? Oz
|
||||||
Hi Oz! Where do you live? :Emerald City
|
Hi Oz! Where do you live? Emerald City
|
||||||
```
|
```
|
||||||
|
|
||||||
### <a name="basic_options-history"></a>`history`
|
### <a name="basic_options-history"></a>`history`
|
||||||
|
@ -1248,7 +1248,7 @@ This method works like the `window.confirm` method of web browsers. A return val
|
||||||
* other: `''`
|
* other: `''`
|
||||||
|
|
||||||
The `query` is handled the same as that of the [`question`](#basic_methods-question) method.
|
The `query` is handled the same as that of the [`question`](#basic_methods-question) method.
|
||||||
The default value of `query` is `'Are you sure? :'`.
|
The default value of `query` is `'Are you sure? '`.
|
||||||
|
|
||||||
The keys other than `Y` and `N` are also accepted (If you want to know a user's wish explicitly, use [`keyInYNStrict`](#utility_methods-keyinynstrict) method). Therefore, if you let the user make an important decision (e.g. files are removed), check whether the return value is not *falsy*. That is, a default is "No".
|
The keys other than `Y` and `N` are also accepted (If you want to know a user's wish explicitly, use [`keyInYNStrict`](#utility_methods-keyinynstrict) method). Therefore, if you let the user make an important decision (e.g. files are removed), check whether the return value is not *falsy*. That is, a default is "No".
|
||||||
|
|
||||||
|
@ -1317,7 +1317,7 @@ This method works like the `window.confirm` method of web browsers. A return val
|
||||||
* `N`: `false`
|
* `N`: `false`
|
||||||
|
|
||||||
The `query` is handled the same as that of the [`question`](#basic_methods-question) method.
|
The `query` is handled the same as that of the [`question`](#basic_methods-question) method.
|
||||||
The default value of `query` is `'Are you sure? :'`.
|
The default value of `query` is `'Are you sure? '`.
|
||||||
|
|
||||||
A key other than `Y` and `N` is not accepted. That is, a return value has no default. Therefore, the user has to tell an own wish explicitly. If you want to know a user's wish easily, use [`keyInYN`](#utility_methods-keyinyn) method.
|
A key other than `Y` and `N` is not accepted. That is, a return value has no default. Therefore, the user has to tell an own wish explicitly. If you want to know a user's wish easily, use [`keyInYN`](#utility_methods-keyinyn) method.
|
||||||
|
|
||||||
|
@ -1783,7 +1783,7 @@ TTY interfaces are different by the platforms. If the platform doesn't support t
|
||||||
|
|
||||||
```js
|
```js
|
||||||
try {
|
try {
|
||||||
answer = readlineSync.question('What is your favorite food? :');
|
answer = readlineSync.question('What is your favorite food? ');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
|
|
@ -395,6 +395,7 @@ function _readlineSync(options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// other ctrl-chars
|
// other ctrl-chars
|
||||||
|
// eslint-disable-next-line no-control-regex
|
||||||
if (chunk) { chunk = chunk.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ''); }
|
if (chunk) { chunk = chunk.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ''); }
|
||||||
if (chunk && limit) { chunk = chunk.replace(limit, ''); }
|
if (chunk && limit) { chunk = chunk.replace(limit, ''); }
|
||||||
|
|
||||||
|
@ -444,7 +445,7 @@ function flattenArray(array, validator) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function escapePattern(pattern) {
|
function escapePattern(pattern) {
|
||||||
return pattern.replace(/[\x00-\x7f]/g,
|
return pattern.replace(/[\x00-\x7f]/g, // eslint-disable-line no-control-regex
|
||||||
function(s) { return '\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); });
|
function(s) { return '\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1191,7 +1192,7 @@ exports.promptSimShell = function(options) {
|
||||||
|
|
||||||
function _keyInYN(query, options, limit) {
|
function _keyInYN(query, options, limit) {
|
||||||
var res;
|
var res;
|
||||||
if (query == null) { query = 'Are you sure? :'; } // eslint-disable-line eqeqeq
|
if (query == null) { query = 'Are you sure? '; } // eslint-disable-line eqeqeq
|
||||||
if ((!options || options.guide !== false) && (query += '')) {
|
if ((!options || options.guide !== false) && (query += '')) {
|
||||||
query = query.replace(/\s*:?\s*$/, '') + ' [y/n]: ';
|
query = query.replace(/\s*:?\s*$/, '') + ' [y/n]: ';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "readline-sync",
|
"name": "readline-sync",
|
||||||
"version": "1.4.3",
|
"version": "1.4.4",
|
||||||
"title": "readlineSync",
|
"title": "readlineSync",
|
||||||
"description": "Synchronous Readline for interactively running to have a conversation with the user via a console(TTY).",
|
"description": "Synchronous Readline for interactively running to have a conversation with the user via a console(TTY).",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|
Loading…
Reference in a new issue