#node.js #command-line-interface #console-application
Вопрос:
У меня есть этот простой интерфейс командной строки, в котором вы вводите сообщения, а содержимое намеренно показывает сообщения консоли во время ввода пользователем, на данный момент это очень просто и использует process.openStdin()
Это выглядит так, как существенная часть, необходимая для вопроса:
var stdin = process.openStdin();
stdin.addListener("data", function(d) {
console.log(d.toString().trim());
});
setInterval(() => {
console.log("test")
}, 1000);
Если бы я использовал этот код и запустил его, то набрал бы его следующим образом:
test
fotest
obatest
test
r
test
Я набрал: «фубар».
Я получил: тест fotest obatest тест r тест.
Итак, как бы я поступил, если бы это было так, печатая с той же скоростью, что и в первом примере?
test
test
test
test
test
----------- (always stays here to separate new messages)
foobar
Для
test
test
test
test
test
foobar
-----------
Для начала:
Я бы предположил, что вам нужно будет распечатать -----------
, что довольно очевидно, затем каким-то образом манипулировать stdout для печати раньше -----------
и разрешить stdin под -----------
За исключением того, что я не совсем уверен, какая функция будет что делать и как с ней работать, если только не существует волшебной воображаемой функции, которая похожа:
stdin.separateByText(stdout,"---------n");
удар 1
Комментарии:
1. Взгляните на
readStream.setRawMode(mode)
то, на что вы можете настроитьсяprocess.stdin
. Он не повторяет символы, и вы получаетеdata
события для каждого введенного символа, поэтому вы можете реагировать на это соответствующим образом. На самом деле, весьtty
модуль может быть вам полезен. Самым большим недостатком является необходимость самостоятельно обрабатывать все управляющие коды (например, без Ctrl C, чтобы выйти из приложения).