NodeJS:如何打印"左箭头"字符?

时间:2016-08-23 07:35:43

标签: javascript node.js char hex

我有"左箭头"的十六进制表示。键为" 1b5b44" (基本上,我得到了它,

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

然后在终端只按了箭头键。它可以正常检查传入的块是否是左箭头按下,但我怎么能走另一条路?给定十六进制代码,我该如何编写字符?

process.stdout.write( ??? );

2 个答案:

答案 0 :(得分:0)

  

鉴于十六进制代码,我该如何写字符?

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

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

如果输出这三个字符,除非你评估它们,除非你输出echo foobar$?,否则它对你的shell没有意义,除非你告诉shell执行它,否则没有任何意义

  

它可以正常检查传入的块是否是左箭头按

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

答案 1 :(得分:0)

我明白了。

理论

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

实施例

以下是一些实现我们想要的示例代码:

// 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,如果您想在终端周围移动,它已经为您完成了提升。我没有测试过包装本身。