Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何编写与GNU Emacs一起工作的Node.js REPL?_Javascript_Node.js_Emacs_Scheme_Readline - Fatal编程技术网

Javascript 如何编写与GNU Emacs一起工作的Node.js REPL?

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

我有一个JavaScript中名为LIPS的Scheme解释器。我有一个可执行文件,它在终端模拟器中工作,但在GNU Emacs低级模式下(使用
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。