Как сказал rsp, блаженный - отличный инструмент для этого. Вот пример реализации для вас.
Я использовал блаженство, чтобы создать текстовое поле в нижней строке экрана. Остальная часть экрана - это «тело», где будет добавлен вывод кода. Таким образом, когда вы вводите ввод, ваша программа не будет путать его с выходом, как вы это пережили.
Чтобы попробовать это, запустите npm install blessed --save
, а затем запустить этот код в узле:
const blessed = require('blessed');
var screen = blessed.screen();
var body = blessed.box({
top: 0,
left: 0,
height: '100%-1',
width: '100%',
keys: true,
mouse: true,
alwaysScroll: true,
scrollable: true,
scrollbar: {
ch: ' ',
bg: 'red'
}
});
var inputBar = blessed.textbox({
bottom: 0,
left: 0,
height: 1,
width: '100%',
keys: true,
mouse: true,
inputOnFocus: true,
style: {
fg: 'white',
bg: 'blue' // Blue background so you see this is different from body
}
});
// Add body to blessed screen
screen.append(body);
screen.append(inputBar);
// Close the example on Escape, Q, or Ctrl+C
screen.key(['escape', 'q', 'C-c'], (ch, key) => (process.exit(0)));
// Handle submitting data
inputBar.on('submit', (text) => {
log(text);
inputBar.clearValue();
});
// Add text to body (replacement for console.log)
function log(text) {
body.pushLine(text);
screen.render();
}
/*
* Demonstration purposes
*/
// Listen for enter key and focus input then
screen.key('enter', (ch, key) => {
inputBar.focus();
});
// Log example output
setInterval(() => {
log("just displaying some stuff");
}, 1000);
Ключевые моменты здесь:
- Ваш код должен показать вывод с помощью функции
log
. Подумайте об этом как о замене взамен console.log
. Не используйте функции console.*
, они испортят экран благословенного.
- Вам необходимо «сфокусировать» элемент
inputBar
для его ввода. Однако вы можете сосредоточиться на ней, но моя демонстрация показывает, как слушать нажатие клавиши ввода или щелкнуть по синей полосе, чтобы сфокусировать ее.
- Если вы пишете код, который манипулирует экраном, не забудьте запустить
screen.render()
, чтобы сделать ваши изменения.
Вы сразу же отправляете входные данные с stdin на консоль. Что еще вы ожидали? – Flimzy