Node.js 如何在检测按键的节点程序中支持默认^Z行为?
我已经创建了一个node.js程序,通过使用Node.js 如何在检测按键的节点程序中支持默认^Z行为?,node.js,command-line-interface,Node.js,Command Line Interface,我已经创建了一个node.js程序,通过使用setRawMode(true)从stdin获取按键输入。我已经把^C和^D(control-C/control-D)处理好了;代码基本上如下所示: process.stdin.setRawMode(true) process.stdin.on('data', data => { if (Buffer.from([0x03]).equals(data) || Buffer.from([0x04]).equals(data)) { pr
setRawMode(true)
从stdin
获取按键输入。我已经把^C
和^D
(control-C/control-D)处理好了;代码基本上如下所示:
process.stdin.setRawMode(true)
process.stdin.on('data', data => {
if (Buffer.from([0x03]).equals(data) || Buffer.from([0x04]).equals(data)) {
process.exit()
}
})
很容易通过使程序退出来伪造^C
和^D
的工作方式。但是我怎样才能使^Z
工作呢?显然,我不能假装,因为这是bash通常处理的事情。有没有什么方法可以告诉bash/sh/无论怎样,只要把程序放到后台,^Z通常的工作方式?在Unix和Linux StackExchange上是有用的。我们需要——特别是SIGTSTP
:
process.kill(process.pid, 'SIGTSTP');
在我的程序环境中,我还必须在发送SIGTSTP
之前清除任何终端更改(例如隐藏光标,使用备用屏幕);我必须在收到SIGCONT
后重新应用它们:
process.on('SIGCONT', () => {
process.stdout.write(...);
});
我还发现,process.stdin.setRawMode
需要刷新SIGCONT
,原因如下:
process.stdin.setRawMode(false);
process.stdin.setRawMode(true);
作为参考,以下是我的diff实现: