Javascript 如何编写与GNU Emacs一起工作的Node.js REPL?
我有一个JavaScript中名为LIPS的Scheme解释器。我有一个可执行文件,它在终端模拟器中工作,但在GNU Emacs低级模式下(使用Javascript 如何编写与GNU Emacs一起工作的Node.js REPL?,javascript,node.js,emacs,scheme,readline,Javascript,Node.js,Emacs,Scheme,Readline,我有一个JavaScript中名为LIPS的Scheme解释器。我有一个可执行文件,它在终端模拟器中工作,但在GNU Emacs低级模式下(使用runscheme函数)它被破坏 我使用Readline复制了这个简单的Node.js REPL的问题: var prompt = 'lips> '; var continuePrompt = '... '; const rl = readline.createInterface({ input: process.stdin, ou
runscheme
函数)它被破坏
我使用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();
}
});
第一个问题是,当我键入某个内容时,输出是重复的,它是文本命令行echo:
lips> 10
10
10
lips> '(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获取输入,则会发生同样的情况,它会不断添加空格
我是,它也使用readline,当使用run js
运行时,它工作正常,Kawa Scheme解释器工作正常,但它不使用readline:
(setq inferior-js-program-command "node --interactive")
(run-js)
这是可行的,它不是运行scheme,而是相同的模式,我也尝试运行相同的runjs
代码,但使用scheme解释器,并且在调整大小时也显示相同的提示重复
(setq inferior-js-program-command "/home/kuba/projects/jcubic/lips/bin/lips.js")
(run-js)
在Emacs-devel邮件列表中获得答案,解决方案是在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)
});
很多口译员都做同样的事情。e、 g:Bash.@picklerick这是运行scheme命令的默认comint模式,与
emacs-q
相同,通过调整大小,我指的是在emacs中拖动帧的边缘,以便使用缓冲区调整大小和刷新。@picklerick这是comint模式,因为comint提示符只读
选项适用于scheme。但这主要是关于Node.js的问题,为什么应用程序坏了,而guile工作正常?我不确定guile或kawa是否使用readline。但当然,也许有一种方法可以在Emacs中处理这个问题,通过了解为什么它会损坏Emacs,也许我可以在Node中修复它。@picklick我应该如何编写Node.js REPL应用程序,这样它才能在comint模式下工作?我希望scheme不是普通术语,我知道它在ansi术语中工作。@我想编写Node.js应用程序,并在GNU EMacs中使用运行scheme
(运行scheme
使用comint模式)运行它。我不知道该怎么向你解释。Guile scheme可以与运行scheme
一起工作,它也可以与终端一起工作,我如何才能编写Node.js应用程序来与Guile工作相同。@我调用(运行scheme)/usr/bin/Guile”)
主模式是inerior scheme模式,如果我可以使用我的Node.js可执行文件运行函数,则相同,设置“comint prompt read only”(只读)会改变它的行为,如果不是comint模式,我不知道它会受到什么影响。我在Fedora上使用GNU Emacs 26.3。