【问题标题】:Adding color to repl prompt (node)为 repl 提示(节点)添加颜色
【发布时间】:2014-06-27 12:06:26
【问题描述】:

我发现在 repl 中为提示添加颜色确实有助于分离输出。我通过使用 NPM 的粉笔实现了这一点,但这在提示符和光标之间增加了一堆空格。

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

提示出来是这样的('|'是光标):

goose>              |

关于如何解决的任何想法?

【问题讨论】:

  • 找到Relevant problem。看起来提示长度设置为整个提示字符串,包括转义颜色字符。不确定是否可以使用 repl 获得我想要的。

标签: node.js terminal console read-eval-print-loop chalk


【解决方案1】:

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);
  }
};

依赖:npm install has-ansi strip-ansi

【讨论】:

  • 你可能应该提到你必须 npm install has-ansi 和 strip-ansi 才能让它工作。
  • 除非你真的必须这样做,否则你不应该对 readline 库进行猴子补丁。
【解决方案2】:

原来很简单:

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

您需要指定字符数,因为readline 不理解转义序列实际上显示为零宽度。

(这是基于 Felix 的回答。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2021-04-21
    • 2011-01-19
    • 2021-09-08
    • 2016-11-11
    • 2015-11-21
    • 2019-05-14
    • 2015-06-29
    相关资源
    最近更新 更多