在终端中监听命令/控制+ L信号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在终端中监听命令/控制+ L信号相关的知识,希望对你有一定的参考价值。
传统上,终端中的命令/控制+(小写L)将清除它。
我可以通过将此文件写入stdout来使用Node.js清除终端:
process.stdout.write('x1Bc');
但是我怎么能专门听“命令+ l”组合键的信号呢? (这是一个小写的L)。
我认为使用Node.js答案可能与:readline.emitKeypressEvents
https://nodejs.org/api/readline.html#readline_readline_emitkeypressevents_stream_interface有关
答案
我挖了一下并写了一个快速的脚本作为概念证明。这是处理Ctrl-C,Ctrl-D和Ctrl-L信号并在新行上具有事件监听器的示例,即使启用了原始模式也是如此。
#!/usr/bin/env node
process.stdin.currentLine = '';
process.stdin.setRawMode(true);
process.stdin.on('data', (buf) => {
const charAsAscii = buf.toString().charCodeAt(0);
switch (charAsAscii) {
case 0x03:
console.log('You pressed Ctrl-C. Sending SIGINT.')
process.kill(process.pid, 'SIGINT');
break;
case 0x04:
console.log('You pressed Ctrl-D. Bye!')
process.exit(0);
break;
case 0x0c:
console.log('You pressed Ctrl-L. Clearing screen.')
break;
case 0x0d:
process.stdin.emit('line', process.stdin.currentLine);
process.stdin.currentLine = '';
break;
default:
process.stdin.currentLine += String.fromCharCode(charAsAscii);
break;
}
});
process.stdin.on('line', line => console.log(`New line: ${line}`));
它是如何工作的:
在原始模式下,输入始终可用于逐个字符,不包括修饰符。此外,终端对字符的所有特殊处理都被禁用,包括回显输入字符。请注意,在此模式下,CTRL + C将不再导致SIGINT。
考虑到这一点,您可以转换在'data'事件中获得的缓冲区,并检查它是否为SIGINT(Ctrl-C),'clear'命令(Ctrl-L),EOF(Ctrl-D), ...
如果它是普通字符,它只是将字符添加到内部缓冲区。按下返回键时,将以内部缓冲区作为参数发出line
事件。然后,内部缓冲区重置为空字符串。
以上是关于在终端中监听命令/控制+ L信号的主要内容,如果未能解决你的问题,请参考以下文章