mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.5 KiB
TypeScript
72 lines
1.5 KiB
TypeScript
import blessed from 'neo-blessed';
|
|
import execa from 'execa';
|
|
import path from 'path';
|
|
|
|
/**
|
|
* WIP: 终端管理器
|
|
*/
|
|
|
|
class TailchatServiceDashboard {
|
|
screen: blessed.Widgets.Screen;
|
|
mainBox: blessed.Widgets.BoxElement;
|
|
mainProcess: execa.ExecaChildProcess<string>;
|
|
|
|
constructor() {
|
|
this.initElement();
|
|
}
|
|
|
|
initElement() {
|
|
this.screen = blessed.screen({
|
|
smartCSR: true,
|
|
});
|
|
this.screen.title = 'my window title';
|
|
|
|
this.mainBox = blessed.box({
|
|
top: 0,
|
|
left: 'center',
|
|
width: '100%',
|
|
height: '80%',
|
|
content: 'Hello {bold}world{/bold}!',
|
|
tags: true,
|
|
border: {
|
|
type: 'line',
|
|
},
|
|
style: {
|
|
fg: 'white',
|
|
border: {
|
|
fg: '#f0f0f0',
|
|
},
|
|
},
|
|
scrollable: true,
|
|
});
|
|
this.screen.append(this.mainBox);
|
|
|
|
// Quit on Escape, q, or Control-C.
|
|
this.screen.key(['escape', 'q', 'C-c'], (ch, key) => {
|
|
this.mainProcess.kill(0);
|
|
return process.exit(0);
|
|
});
|
|
|
|
this.mainBox.focus();
|
|
this.screen.render();
|
|
}
|
|
|
|
start() {
|
|
const child = execa('ts-node', ['./runner.ts'], {
|
|
cwd: path.resolve(__dirname, '../'),
|
|
});
|
|
child.stdout.on('data', (data) => {
|
|
this.mainBox.insertBottom(String(data));
|
|
this.screen.render();
|
|
});
|
|
child.stderr.on('data', (data) => {
|
|
this.mainBox.pushLine(String(data));
|
|
this.screen.render();
|
|
});
|
|
|
|
this.mainProcess = child;
|
|
}
|
|
}
|
|
|
|
new TailchatServiceDashboard().start();
|