我有"左箭头"的十六进制表示。键为" 1b5b44" (基本上,我得到了它,
stdin.on("data", function (chunk) {
console.log("hex:", chunk.toString("hex");
})
然后在终端只按了箭头键。它可以正常检查传入的块是否是左箭头按下,但我怎么能走另一条路?给定十六进制代码,我该如何编写字符?
process.stdout.write( ??? );
答案 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,如果您想在终端周围移动,它已经为您完成了提升。我没有测试过包装本身。