Как вставить новую строку при вводе в readline в Node.js? - PullRequest
1 голос
/ 27 апреля 2020

Я использую 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?

...