为了账号安全,请及时绑定邮箱和手机立即绑定

如何编写适用于 GNU Emacs 的 Node.js REPL?

如何编写适用于 GNU Emacs 的 Node.js REPL?

胡子哥哥 2022-06-09 17:06:54
我在 JavaScript 中有一个名为 LIPS 的 Scheme 解释器。我有可执行文件,它在终端仿真器中工作,但在 GNU Emacs 劣质模式(使用run-scheme函数)中被破坏。我已经使用 Readline 重现了这个简单的 Node.js REPL 的问题:var prompt = 'lips> ';var continuePrompt = '... ';const rl = readline.createInterface({    input: process.stdin,    output: process.stdout,    prompt: prompt,    terminal: !!process.stdin.isTTY // true in Emacs});if (process.stdin.isTTY) {    rl.prompt();}rl.on('line', function(line) {    if (process.stdin.isTTY) {        rl.prompt();    }});第一个问题是,当我输入重复的输出内容时,它是文字命令行回显:lips> 101010lips> '(1 2 3)'(1 2 3)(1 2 3)lips>我找到了解决方案,其中:(setq comint-process-echoes t)但另一个问题是,在调整大小时,它会不断追加提示。所以我有这个:lips> lips> lips> lips> lips>这是提示,因为如果我设置:(setq comint-prompt-read-only t)我无法删除该文本。编辑:如果我调用 (read) 也使用 readline 获取输入,也会发生同样的情况,它会不断添加空格。我正在阅读 Node.js 源代码,它也使用 readline 并且在运行时运行良好run-js,Kawa Scheme Interpreter 可以正常工作,但它不使用 readline: (setq inferior-js-program-command "node --interactive") (run-js)这行得通,它不是运行方案,但它是相同的模式,我也尝试run-js使用我的方案解释器运行相同的代码,并且它在调整大小时也显示相同的提示重复。 (setq inferior-js-program-command "/home/kuba/projects/jcubic/lips/bin/lips.js") (run-js)
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

在 Emacs 开发邮件列表中得到了答案,解决方案是在 Emacs 中关闭 readline:


const rl = readline.createInterface({

    input: process.stdin,

    output: process.stdout,

    prompt: prompt,

    terminal: !!process.stdin.isTTY && !(process.env.EMACS || process.env.INSIDE_EMACS)

});

很多口译员做同样的事情。例如:重击。


查看完整回答
反对 回复 2022-06-09
  • 1 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信