質問

I find that adding color to the prompt in repl really helps to separate the outputs. I achieved this by using NPM's chalk, but this adds a bunch of space between the prompt and the cursor.

var term = repl.start({
    prompt: chalk.blue('goose> '),
    eval: function(cmd, context, filename, cb){
        ...
    }
});

The prompt comes out like this ('|' is the cursor):

goose>              |

Any ideas on how to fix?

役に立ちましたか?

解決

It turns out to be very simple:

var prompt = 'My fancy prompt >>> ';
rl.setPrompt(chalk.blue(prompt), prompt.length);

You need to specify the count of characters because readline doesn't understand that escape sequences are really displayed as zero width.

(This is based on Felix's answer.)

他のヒント

Run this before repl.start():

var readline = require('readline');
var hasAnsi = require('has-ansi');
var stripAnsi = require('strip-ansi');

var _setPrompt = readline.Interface.prototype.setPrompt;
readline.Interface.prototype.setPrompt = function() {
  if (arguments.length === 1 && hasAnsi(arguments[0])) {
    return _setPrompt.call(this, arguments[0], stripAnsi(arguments[0]).length);
  } else {
    return _setPrompt.apply(this, arguments);
  }
};

Dependencies: npm install has-ansi strip-ansi

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top