У меня есть интерпретатор Scheme в JavaScript, который называется LIPS. У меня есть исполняемый файл, он работает в эмуляторе терминала, но он не работает в низком режиме GNU Emacs (с использованием функции run-scheme
).
Я воспроизвел проблему с этим простым Node.js REPL с использованием Readline:
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> 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)
, я не смогу удалить этот текст.
РЕДАКТИРОВАТЬ:
То же самое происходит, если я вызываю (читаю), который также использует readline для получения ввода, он продолжает добавлять пробелы.
Я читал Node.js исходный код и он также использует readline, и он отлично работает при запуске с использованием run-js
, Kawa Scheme Interpreter работает правильно, но не использует 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)