【问题标题】:NodeJS: How can I print a "left arrow" character?NodeJS:如何打印“左箭头”字符?
【发布时间】:2016-12-29 22:07:04
【问题描述】:

我将“左箭头”键的十六进制表示为“1b5b44”(基本上是从

stdin.on("data", function (chunk) {
  console.log("hex:", chunk.toString("hex");
})

然后在终端中只需按下箭头键。它可以很好地检查传入的块是否是左箭头键,但是我该如何走另一条路呢?给定十六进制代码,我该如何写字符?

process.stdout.write( ??? );

【问题讨论】:

  • 您是在寻找箭头的图形描述,还是希望转义序列移动光标?
  • @icktoofay 用于移动光标的转义序列。最好是这样的列表。

标签: javascript node.js char hex


【解决方案1】:

给定十六进制代码,我该如何写字符?

没有代表左箭头键的字符。

您用于进程标准输入的 shell 将左箭头键按下解释为三个字符:<ESC>[D

如果你输出这三个字符,除非你对它们进行评估,否则它对你的 shell 毫无意义,就像输出 echo foobar$? 一样,除非你告诉 shell 执行它,否则没有任何特殊意义。

它可以很好地检查传入的块是否是左箭头键

您无法将左箭头键与<ESC> 字符后跟两个字符[D 区分开来;这是您正在识别的特定字符序列,无论它是否来自按左箭头键(例如,它可能来自 echo "\033[D" | node main.js

【讨论】:

  • 好吧,尊敬的,我不同意。因为我正在“原始”模式下收听标准输入,所以我正在通过按键读取数据按键。虽然左箭头相当于 [D,但我可以区分它们,因为实际的按键是有区别的。也就是说,我的主要问题仍然存在:如何在不按左箭头的情况下让光标向左移动一列?当我按向左箭头然后按 process.stdout.write(chunk) 时,something 正在发送到终端。我如何表示代码中的任何内容?
【解决方案2】:

我想通了。

理论

使用转义字符控制光标移动,后跟一系列代码,当组合这些代码时,终端将打印为光标的移动。

示例

下面是一些示例代码,可以满足我们的需求:

// Create a string that will move the cursor.  The arg "num" is the number
// of columns to move
function cursor_left (num) {
  num = num || ""   // empty string implies the number 1
  var esc = "\033"; // The "escape" char represented as an octal string.
  return esc + "[" + num + "D";
}

prefix  = "ABC";
suffix  = "XYZ";

在repl中:

> console.log(prefix + cursor_left() + suffix);
ABXYZ
> console.log(prefix + cursor_left(2) + "X");
AXC

在“原始”模式下的终端上下文中,这具有“打印”箭头移动的效果。

现有包

有一个 nodejs 包,terminal,如果您想在终端中移动,它已经为您完成了提升。我还没有测试包本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多