diff --git a/static/js/components/app-main/index.js b/static/js/components/app-main/index.js index eff6af8..ab97560 100644 --- a/static/js/components/app-main/index.js +++ b/static/js/components/app-main/index.js @@ -161,18 +161,21 @@ module.exports = Vue.component('app-main', { context.expandCommand = trigger && trigger.contains(target); }, false); - window.TERMSTR = ''; - ipc.on('emulator', function (event, type, project, data){ - worker.postMessage({ action: 'write', name: project.name, data: data + '' }); - - window.TERMSTR += JSON.stringify(data.toString()) + '\n'; + switch (type) { + case 'data': + data = data.toString(); + break; + case 'error': + data = '\u001b[31m发生错误: \u001b[0m' + data.toString(); + break; + case 'close': + data = '\u001b[32m命令执行完成\u001b[0m'; + break; + } + worker.postMessage({ action: 'write', name: project.name, data: data.toString() }); // event.sender.send('emulator', project, 'stop'); }); - - window.doWrite = function (){ - require('fs').writeFile('./screen.text', window.TERMSTR); - }; }, ready: function (){ var context = this; @@ -183,8 +186,6 @@ module.exports = Vue.component('app-main', { } }; - window.worker = worker; - openXTerm(this.project.name); } }); \ No newline at end of file diff --git a/static/js/components/app-main/terminal-worker.js b/static/js/components/app-main/terminal-worker.js index 78edc05..0fb22a8 100644 --- a/static/js/components/app-main/terminal-worker.js +++ b/static/js/components/app-main/terminal-worker.js @@ -6,6 +6,7 @@ importScripts('../../terminal/index.js'); +var ACTIVE; var RUNTIMECACHE = {}; function send(name, xterm){ @@ -16,22 +17,37 @@ function send(name, xterm){ } onmessage = function (event){ + var xterm; var message = event.data; switch (message.action) { case 'open': - RUNTIMECACHE[message.name] = RUNTIMECACHE[message.name] || new AnsiTerminal(120, 60, 0); - send(message.name, RUNTIMECACHE[message.name]); + xterm = RUNTIMECACHE[message.name]; + + if (!xterm) { + xterm = new AnsiTerminal(120, 60, 0); + xterm.newline_mode = true; + RUNTIMECACHE[message.name] = xterm; + } + + ACTIVE = message.name; + + send(message.name, xterm); break; case 'close': delete RUNTIMECACHE[message.name]; break; case 'write': - var xterm = RUNTIMECACHE[message.name]; + xterm = RUNTIMECACHE[message.name]; - xterm.write(message.data); - - send(message.name, xterm); + if (ACTIVE === message.name) { + xterm.write(message.data); + send(message.name, xterm); + } else { + setTimeout(function (){ + xterm.write(message.data); + }, 16); + } break; } };