我在JavaScript中有一个名为LIPS的Scheme解释器。我有可执行文件,它在终端仿真器中工作,但在GNU劣质模式(使用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();
}
});第一个问题是,当我键入输出被复制时,它是文字命令行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获取输入),它会继续添加空格,也会发生同样的情况。
我是读取Node.js源代码,它也使用readline,在使用run-js运行时工作正常,Kawa解释器工作正常,但它不使用readline:
(setq inferior-js-program-command "node --interactive")
(run-js)这是可行的,它不是运行方案,但它是相同的模式,我也尝试运行相同的run-js代码,但我的Scheme解释器,它也显示相同的提示复制调整。
(setq inferior-js-program-command "/home/kuba/projects/jcubic/lips/bin/lips.js")
(run-js)发布于 2020-04-19 07:10:03
在Emacs发展邮件列表中获得答案,解决方案是在Emacs内部关闭读行:
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: prompt,
terminal: !!process.stdin.isTTY && !(process.env.EMACS || process.env.INSIDE_EMACS)
});很多口译员都做同样的事情。巴什。
https://stackoverflow.com/questions/60987722
复制相似问题