Я использую Readline для моего интерпретатора, и вместо ввода следующей строки я хочу вставить символ новой строки при вводе, поэтому, если я буду использовать историю, у меня будет полная команда вместо одной строки моей многострочной команды.
Мой код выглядит следующим образом:
var prompt = 'lips> ';
var continuePrompt = '... ';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: prompt,
terminal: !!process.stdin.isTTY && !(process.env.EMACS || process.env.INSIDE_EMACS)
});
if (process.stdin.isTTY) {
rl.prompt();
}
boostrap(interp.env).then(function() {
rl.on('line', function(line) {
code += line + '\n';
if (balanced_parenthesis(code)) {
rl.pause();
run(code, interp.env).then(function(result) {
if (process.stdin.isTTY) {
print(result);
if (multiline) {
rl.setPrompt(prompt);
}
rl.prompt();
}
rl.resume();
}).catch(function() {
if (process.stdin.isTTY) {
if (multiline) {
rl.setPrompt(prompt);
}
rl.prompt();
}
});
code = '';
} else {
multiline = true;
var ind = indent(code, 2, prompt.length - continuePrompt.length);
rl.setPrompt(continuePrompt);
rl.prompt();
rl.write(new Array(ind + 1).join(' '));
}
});
});
Так что в основном мне нужно, чтобы некоторые продолжали или предотвращать дефолт (как в браузере). Возможно ли что-то подобное?
Во-первых, у меня проблема в том, что у меня есть автоматический отступ, и когда я копирую, вставляю код, у меня двойной отступ, если код уже имеет отступ, потому что каждая строка в буфере обмена - одна строка в Readline. Я хочу вставить один текст. Или, по крайней мере, переписать историю, чтобы сразу добавить многострочную команду в конце, возможно, полностью отключить историю и добавить элементы в историю в моем собственном коде.
Возможно ли что-то подобное с Readline в Node.js или сделать Мне нужно воссоздать тот же API readline без readline. Знаете ли вы какой-либо пример, который использует эту технику или, возможно, проект с открытым исходным кодом, который использует это?
РЕДАКТИРОВАТЬ:
Я нашел этот вопрос и ответ Есть ли хороший способ обработки многострочного ввода с помощью GNU readline?
rl_bind_key('\r', return_func) ===> int return_func(int cnt, int key) { ... }
, но кажется, что Node не поддерживает этот API. Любой способ иметь такую же функциональность в Node?