rspと同様に、blessedはこれのための優れたツールです。使用する実装の例を次に示します。
私はblessedを使って画面の一番下にテキストボックスを作成しました。画面の残りの部分はコード出力が追加される '本体'です。このように、入力を入力すると、プログラムはあなたが経験したような出力を混乱させません。
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