Node.js REPL,套接字和Telnet - 制表符补全、箭头键等

3
我一直在使用Node的REPL进行实验。我认为通过套接字将其可用,通过Telnet/puTTY/任何方式连接并动态调试我的服务器会非常酷。
我使用了在这里找到的示例:http://nodejs.org/docs/latest/api/repl.html,基本上看起来像这样...
net.createServer(function (socket) {
  var cmd = repl.start(">", socket);
  //... some other stuff here.... not important
}).listen(5001);

好的,太棒了!现在我可以使用Telnet连接到5001端口并与REPL交互。但是,我遇到了控制字符的问题(例如Tab、Ctrl+C、向上箭头、向下箭头等)。我该如何让它们工作?例如,如果我使用Telnet连接,键入"1+1<Enter>",我会得到2。但是,当我按"<Up Arrow><Enter>"时,我得到了"...",就像REPL正在等待我完成命令一样。但是,实际上,我只想看到我执行的最后一个命令。我知道Telnet喜欢保留其输出,直到输入换行符,但是否有任何方法可以避免这种情况呢?

$ telnet localhost 6634
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
>1+1
2
>^[[A
...

编辑: 我还发现了这个问题,可能与此相关 - Telnet中的箭头键变成控制字符

编辑2: 嗯...rlwrap似乎解决了我的大部分问题:

$ rlwrap telnet localhost 6634

唯一不起作用的是本地/全局变量的选项卡完成,我想我可以没有它。我最关心的是命令历史记录。rlwrap很棒!

2个回答

1
请参见上文。

rlwrap telnet localhost 6634


你可以使用 -c -f 开关来模拟选项卡完成:http://blog.lishman.com/2008/04/rlwrap.html,显然你需要一个 node.js 关键字列表。 - booyaa

0
为了让 REPLServer 中的内置选项完成和历史记录在套接字上正常工作,您需要在实例化 REPLServer 时显式提供 terminal: true 选项,以告诉它表现得好像连接到一个终端,并且在客户端上将终端设置为原始模式(请参阅 npm 上的 repl-client)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接