-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
68 lines (59 loc) · 1.71 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
'use strict';
const _ = require('lodash');
const blessed = require('blessed');
const Command = require('./lib/command').default;
const Commander = require('./lib/commander').default;
const Viewer = require('./lib/viewer').default;
module.exports.run = function run(commands, opt = {title: 'my commander'}) {
// Create a screen object.
var screen = blessed.screen({
smartCSR: true
});
screen.title = opt.title;
// Quit on Escape, q, or Control-C.
screen.key(['q', 'C-c'], function (ch, key) {
Promise.all(_.map(coms, (com) => com.shutdown()))
.catch((err) => {
console.error(err);
process.exit(1);
})
.then(() => process.exit(0));
});
// Focus our element.
const commanderWidth = 20;
const width = `${(100 - commanderWidth) / commands.length | 0}%`;
const coms = _.map(commands, (com, i) => {
const boxOpt = _.extend({}, com.boxOpt || {}, {
width,
left: i ? `${i * (100 - commanderWidth) / commands.length | 0}%` : '0',
});
const c = new Command(com.command, com.opt || {}, boxOpt);
c.createBox();
screen.append(c.box);
return c;
});
const commander = new Commander(coms);
commander.createBox();
screen.append(commander.box);
commander.box.focus();
screen.render();
const viewer = new Viewer(coms);
viewer.createBox();
screen.append(viewer.box);
commander.onSelectedChange = (i) => {
viewer.selectedIndex = i;
viewer.box.show();
viewer.box.focus();
viewer.refresh();
screen.render();
screen.program.disableMouse();
};
const delayedRender = _.debounce(() => {
commander.refresh();
viewer.refresh();
screen.render();
}, 100);
_.each(coms, (com) => {
com.run(delayedRender);
});
};