@difizen/libro-terminal 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/command.d.ts.map +1 -1
- package/es/command.js +38 -5
- package/es/manager.d.ts +3 -1
- package/es/manager.d.ts.map +1 -1
- package/es/manager.js +37 -9
- package/es/view.d.ts.map +1 -1
- package/es/view.js +16 -3
- package/package.json +4 -4
- package/src/command.ts +22 -4
- package/src/manager.ts +25 -2
- package/src/view.tsx +15 -1
package/es/command.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAU,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAU,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAU3E,CAAC;AAEF,qBACa,2BACX,YAAW,mBAAmB,EAAE,sBAAsB;IAEjC,WAAW,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC;IAClC,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAC5C,OAAO,EAAE,eAAe,CAAC;IAClD,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;IAS1D,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;CAqClD"}
|
package/es/command.js
CHANGED
|
@@ -24,6 +24,10 @@ export var TerminalCommands = {
|
|
|
24
24
|
id: 'libro-terminal-open',
|
|
25
25
|
label: '新建终端',
|
|
26
26
|
keybind: 'ctrl+`'
|
|
27
|
+
},
|
|
28
|
+
CloseTerminal: {
|
|
29
|
+
id: 'libro-terminal-close',
|
|
30
|
+
label: '关闭终端'
|
|
27
31
|
}
|
|
28
32
|
};
|
|
29
33
|
export var TerminalCommandContribution = (_dec = singleton({
|
|
@@ -52,16 +56,14 @@ export var TerminalCommandContribution = (_dec = singleton({
|
|
|
52
56
|
var _this = this;
|
|
53
57
|
commands.registerCommand(TerminalCommands['OpenTerminal'], {
|
|
54
58
|
execute: function () {
|
|
55
|
-
var _execute = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
59
|
+
var _execute = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(name) {
|
|
56
60
|
var terminalView, slot;
|
|
57
61
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
58
62
|
while (1) switch (_context.prev = _context.next) {
|
|
59
63
|
case 0:
|
|
60
64
|
_context.prev = 0;
|
|
61
65
|
_context.next = 3;
|
|
62
|
-
return _this.viewManager.getOrCreateView(LibroTerminalView,
|
|
63
|
-
id: _this.manager.newTerminalName()
|
|
64
|
-
});
|
|
66
|
+
return _this.viewManager.getOrCreateView(LibroTerminalView, _this.manager.getTerminalArgs(name));
|
|
65
67
|
case 3:
|
|
66
68
|
terminalView = _context.sent;
|
|
67
69
|
_context.next = 6;
|
|
@@ -85,12 +87,43 @@ export var TerminalCommandContribution = (_dec = singleton({
|
|
|
85
87
|
}
|
|
86
88
|
}, _callee, null, [[0, 10]]);
|
|
87
89
|
}));
|
|
88
|
-
function execute() {
|
|
90
|
+
function execute(_x) {
|
|
89
91
|
return _execute.apply(this, arguments);
|
|
90
92
|
}
|
|
91
93
|
return execute;
|
|
92
94
|
}()
|
|
93
95
|
});
|
|
96
|
+
commands.registerCommand(TerminalCommands['CloseTerminal'], {
|
|
97
|
+
execute: function () {
|
|
98
|
+
var _execute2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(name) {
|
|
99
|
+
var terminalView;
|
|
100
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
101
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
102
|
+
case 0:
|
|
103
|
+
_context2.prev = 0;
|
|
104
|
+
_context2.next = 3;
|
|
105
|
+
return _this.viewManager.getOrCreateView(LibroTerminalView, _this.manager.getTerminalArgs(name));
|
|
106
|
+
case 3:
|
|
107
|
+
terminalView = _context2.sent;
|
|
108
|
+
terminalView.dispose();
|
|
109
|
+
_context2.next = 10;
|
|
110
|
+
break;
|
|
111
|
+
case 7:
|
|
112
|
+
_context2.prev = 7;
|
|
113
|
+
_context2.t0 = _context2["catch"](0);
|
|
114
|
+
console.error(_context2.t0);
|
|
115
|
+
case 10:
|
|
116
|
+
case "end":
|
|
117
|
+
return _context2.stop();
|
|
118
|
+
}
|
|
119
|
+
}, _callee2, null, [[0, 7]]);
|
|
120
|
+
}));
|
|
121
|
+
function execute(_x2) {
|
|
122
|
+
return _execute2.apply(this, arguments);
|
|
123
|
+
}
|
|
124
|
+
return execute;
|
|
125
|
+
}()
|
|
126
|
+
});
|
|
94
127
|
}
|
|
95
128
|
}]);
|
|
96
129
|
return TerminalCommandContribution;
|
package/es/manager.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class TerminalManager implements Disposable, Disposed {
|
|
|
14
14
|
protected _ready: Promise<void>;
|
|
15
15
|
protected _runningChanged: Emitter<TerminalModel[]>;
|
|
16
16
|
protected _connectionFailure: Emitter<Error>;
|
|
17
|
+
terminalOptionsCache: Map<any, any>;
|
|
17
18
|
protected _names: string[];
|
|
18
19
|
protected get _models(): TerminalModel[];
|
|
19
20
|
terminalRestAPI: TerminalRestAPI;
|
|
@@ -56,6 +57,7 @@ export declare class TerminalManager implements Disposable, Disposed {
|
|
|
56
57
|
* @returns A new iterator over the running terminals.
|
|
57
58
|
*/
|
|
58
59
|
running(): IterableIterator<TerminalModel>;
|
|
60
|
+
get runningModels(): string[];
|
|
59
61
|
/**
|
|
60
62
|
* Force a refresh of the running terminals.
|
|
61
63
|
*
|
|
@@ -101,6 +103,6 @@ export declare class TerminalManager implements Disposable, Disposed {
|
|
|
101
103
|
*/
|
|
102
104
|
protected _onDisposed(terminalConnection: TerminalConnection): void;
|
|
103
105
|
getOrCreate: (options: TerminalOption) => Promise<TerminalConnection>;
|
|
104
|
-
|
|
106
|
+
getTerminalArgs: (name?: string) => any;
|
|
105
107
|
}
|
|
106
108
|
//# sourceMappingURL=manager.d.ts.map
|
package/es/manager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,OAAO,EAAU,MAAM,mBAAmB,CAAC;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,qBACa,eAAgB,YAAW,UAAU,EAAE,QAAQ;IAC1D,QAAQ,UAAS;IACjB,SAAS,CAAC,QAAQ,UAAS;IAC3B,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC;IAC5B,SAAS,CAAC,oBAAoB,0BAAiC;IAC/D,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,eAAe,2BAAkC;IAC3D,SAAS,CAAC,kBAAkB,iBAAwB;IAGpD,oBAAoB,gBAAa;IAKjC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAEhC,SAAS,KAAK,OAAO,IAAI,aAAa,EAAE,CAIvC;IAEwB,eAAe,EAAE,eAAe,CAAC;IAG1D,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC;;OAEG;gBACmC,gBAAgB,EAAE,gBAAgB;IAwBxE;;OAEG;IACH,IAAI,cAAc,8CAEjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAEzB;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC,CAE3C;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,KAAK,CAAC,KAAK,CAAC,CAEpC;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;IAoBf,SAAS,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB;IAaxD;;;;OAIG;IACH,OAAO,IAAI,gBAAgB,CAAC,aAAa,CAAC;IAI1C,IAAI,aAAa,aAEhB;IAED;;;;;;;;OAQG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMpE;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAelC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCrC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;IAOlE;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;IAQnE,WAAW,YAAmB,cAAc,iCAoB1C;IAGF,eAAe,UAAW,MAAM,SAW9B;CACH"}
|
package/es/manager.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
|
|
2
|
+
var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor, _descriptor2, _descriptor3;
|
|
3
3
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
4
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
5
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -19,12 +19,13 @@ function _initializerWarningHelper(descriptor, context) { throw new Error('Decor
|
|
|
19
19
|
|
|
20
20
|
import { Poll } from '@difizen/libro-common';
|
|
21
21
|
import { NetworkError, ServerConnection } from '@difizen/libro-kernel';
|
|
22
|
+
import { prop } from '@difizen/mana-app';
|
|
22
23
|
import { singleton } from '@difizen/mana-app';
|
|
23
24
|
import { Emitter, inject } from '@difizen/mana-app';
|
|
24
25
|
import { v4 } from 'uuid';
|
|
25
26
|
import { TerminalConnectionFactory } from "./protocol.js";
|
|
26
27
|
import { TerminalRestAPI } from "./restapi.js";
|
|
27
|
-
export var TerminalManager = (_dec = singleton(), _dec2 = inject(TerminalRestAPI),
|
|
28
|
+
export var TerminalManager = (_dec = singleton(), _dec2 = prop(), _dec3 = inject(TerminalRestAPI), _dec4 = inject(TerminalConnectionFactory), _dec(_class = (_class2 = /*#__PURE__*/function () {
|
|
28
29
|
/**
|
|
29
30
|
* Construct a new terminal manager.
|
|
30
31
|
*/
|
|
@@ -36,11 +37,13 @@ export var TerminalManager = (_dec = singleton(), _dec2 = inject(TerminalRestAPI
|
|
|
36
37
|
this._terminalConnections = new Set();
|
|
37
38
|
this._runningChanged = new Emitter();
|
|
38
39
|
this._connectionFailure = new Emitter();
|
|
40
|
+
// 缓存创建terminal的参数
|
|
41
|
+
this.terminalOptionsCache = new Map();
|
|
39
42
|
// As an optimization, we unwrap the models to just store the names.
|
|
40
|
-
this
|
|
41
|
-
_initializerDefineProperty(this, "terminalRestAPI",
|
|
43
|
+
_initializerDefineProperty(this, "_names", _descriptor, this);
|
|
44
|
+
_initializerDefineProperty(this, "terminalRestAPI", _descriptor2, this);
|
|
42
45
|
// @inject(ServerConnection) serverConnection: ServerConnection;
|
|
43
|
-
_initializerDefineProperty(this, "terminalConnectionFactory",
|
|
46
|
+
_initializerDefineProperty(this, "terminalConnectionFactory", _descriptor3, this);
|
|
44
47
|
this.getOrCreate = /*#__PURE__*/function () {
|
|
45
48
|
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(options) {
|
|
46
49
|
var name, cwd, connection, models;
|
|
@@ -99,8 +102,21 @@ export var TerminalManager = (_dec = singleton(), _dec2 = inject(TerminalRestAPI
|
|
|
99
102
|
return _ref.apply(this, arguments);
|
|
100
103
|
};
|
|
101
104
|
}();
|
|
102
|
-
|
|
103
|
-
|
|
105
|
+
// 新建和打开一个已有Terminal,二者所需参数不一样
|
|
106
|
+
this.getTerminalArgs = function (name) {
|
|
107
|
+
// 通过缓存值作为option创建终端
|
|
108
|
+
if (_this.terminalOptionsCache.has(name)) {
|
|
109
|
+
return _this.terminalOptionsCache.get(name);
|
|
110
|
+
}
|
|
111
|
+
if (name) {
|
|
112
|
+
return {
|
|
113
|
+
name: name
|
|
114
|
+
};
|
|
115
|
+
} else {
|
|
116
|
+
return {
|
|
117
|
+
id: v4()
|
|
118
|
+
};
|
|
119
|
+
}
|
|
104
120
|
};
|
|
105
121
|
this.serverConnection = serverConnection;
|
|
106
122
|
//
|
|
@@ -246,6 +262,11 @@ export var TerminalManager = (_dec = singleton(), _dec2 = inject(TerminalRestAPI
|
|
|
246
262
|
value: function running() {
|
|
247
263
|
return this._models[Symbol.iterator]();
|
|
248
264
|
}
|
|
265
|
+
}, {
|
|
266
|
+
key: "runningModels",
|
|
267
|
+
get: function get() {
|
|
268
|
+
return this._names;
|
|
269
|
+
}
|
|
249
270
|
|
|
250
271
|
/**
|
|
251
272
|
* Force a refresh of the running terminals.
|
|
@@ -474,12 +495,19 @@ export var TerminalManager = (_dec = singleton(), _dec2 = inject(TerminalRestAPI
|
|
|
474
495
|
}
|
|
475
496
|
}]);
|
|
476
497
|
return TerminalManager;
|
|
477
|
-
}(), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "
|
|
498
|
+
}(), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "_names", [_dec2], {
|
|
499
|
+
configurable: true,
|
|
500
|
+
enumerable: true,
|
|
501
|
+
writable: true,
|
|
502
|
+
initializer: function initializer() {
|
|
503
|
+
return [];
|
|
504
|
+
}
|
|
505
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "terminalRestAPI", [_dec3], {
|
|
478
506
|
configurable: true,
|
|
479
507
|
enumerable: true,
|
|
480
508
|
writable: true,
|
|
481
509
|
initializer: null
|
|
482
|
-
}),
|
|
510
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "terminalConnectionFactory", [_dec4], {
|
|
483
511
|
configurable: true,
|
|
484
512
|
enumerable: true,
|
|
485
513
|
writable: true,
|
package/es/view.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,OAAO,EAUR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAuB5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,eAAO,MAAM,iBAAiB,0FAc5B,CAAC;AAEH,qBAEa,iBAAkB,SAAQ,gBAAgB;IACrD,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;IAChB,IAAI,2FAAqB;IAClC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACtC,SAAS,CAAC,UAAU,UAAS;IAC7B,SAAS,CAAC,WAAW,SAAM;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAChD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAEpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,uBAA8B;IAEnE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,mBAA0B;IAC7D,QAAQ,CAAC,SAAS,6CAA+B;IAEjD,SAAS,CAAC,QAAQ,CAAC,uBAAuB,mBAA0B;IAEpE,SAAS,CAAC,QAAQ,CAAC,oBAAoB;cAC/B,MAAM;cACN,MAAM;OACT;IAEL,SAAS,CAAC,QAAQ,CAAC,aAAa,kBAAyB;IAEzD,SAAS,CAAC,QAAQ,CAAC,YAAY;aACxB,MAAM;kBACD,aAAa;OACpB;IAEL,SAAS,CAAC,QAAQ,CAAC,iBAAiB,6BAAoC;IAExE,SAAS,CAAC,QAAQ,CAAC,oBAAoB,kBAAyB;IAEhE,SAAS,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAE1C,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE9B,SAAS,CAAC,QAAQ,UAAS;IAE3B,SAAS,CAAC,cAAc,mBAA0B;gBAG5B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB;IACrC,MAAM,EAAE,oBAAoB,EAC5B,YAAY,EAAE,oBAAoB,EACvC,eAAe,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.tsx"],"names":[],"mappings":"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"}
|
package/es/view.js
CHANGED
|
@@ -211,6 +211,7 @@ export var LibroTerminalView = (_dec = transient(), _dec2 = view('libro-terminal
|
|
|
211
211
|
_this.fitAddon.fit();
|
|
212
212
|
};
|
|
213
213
|
_this.onViewResize = function () {
|
|
214
|
+
var _this$container;
|
|
214
215
|
// todo 这里为什么没有触发isAttached
|
|
215
216
|
// if (!this.isVisible || !this.isAttached) {
|
|
216
217
|
// return;
|
|
@@ -219,20 +220,29 @@ export var LibroTerminalView = (_dec = transient(), _dec2 = view('libro-terminal
|
|
|
219
220
|
if (!_this.isVisible) {
|
|
220
221
|
return;
|
|
221
222
|
}
|
|
223
|
+
if ((_this$container = _this.container) !== null && _this$container !== void 0 && _this$container.current) {
|
|
224
|
+
if (_this.container.current.offsetHeight === 0) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (_this.container.current.offsetWidth === 0) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// 触发term的resize 事件
|
|
222
233
|
_this.processResize();
|
|
223
234
|
};
|
|
224
235
|
_this.processResize = function () {
|
|
225
236
|
_this.open();
|
|
226
237
|
_this.resizeTerminal();
|
|
227
|
-
_this.setSessionSize();
|
|
228
238
|
};
|
|
229
239
|
_this.open = function () {
|
|
230
240
|
try {
|
|
231
|
-
var _this$
|
|
241
|
+
var _this$container2;
|
|
232
242
|
if (_this.termOpened) {
|
|
233
243
|
return;
|
|
234
244
|
}
|
|
235
|
-
var node = (_this$
|
|
245
|
+
var node = (_this$container2 = _this.container) === null || _this$container2 === void 0 ? void 0 : _this$container2.current;
|
|
236
246
|
if (node) {
|
|
237
247
|
_this.term.open(node);
|
|
238
248
|
}
|
|
@@ -343,6 +353,7 @@ export var LibroTerminalView = (_dec = transient(), _dec2 = view('libro-terminal
|
|
|
343
353
|
// bind onSizeChanged
|
|
344
354
|
_this.toDispose.push(_this.term.onResize(function (data) {
|
|
345
355
|
_this.onSizeChangedEmitter.fire(data);
|
|
356
|
+
_this.setSessionSize();
|
|
346
357
|
}));
|
|
347
358
|
|
|
348
359
|
// bind ondata
|
|
@@ -380,6 +391,7 @@ export var LibroTerminalView = (_dec = transient(), _dec2 = view('libro-terminal
|
|
|
380
391
|
value: function afterRestore() {
|
|
381
392
|
var _this2 = this;
|
|
382
393
|
this.initConnection().then(function (connection) {
|
|
394
|
+
_this2.terminalManager.terminalOptionsCache.set(connection.name, _this2.options);
|
|
383
395
|
_this2._isReady = true;
|
|
384
396
|
_this2.connection = connection;
|
|
385
397
|
_this2.onReadyEmitter.fire(true);
|
|
@@ -453,6 +465,7 @@ export var LibroTerminalView = (_dec = transient(), _dec2 = view('libro-terminal
|
|
|
453
465
|
console.error("Terminal not shut down: ".concat(reason));
|
|
454
466
|
});
|
|
455
467
|
}
|
|
468
|
+
this.terminalManager.terminalOptionsCache.delete(this.name);
|
|
456
469
|
_get(_getPrototypeOf(LibroTerminalView.prototype), "dispose", this).call(this);
|
|
457
470
|
}
|
|
458
471
|
}, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@difizen/libro-terminal",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"libro"
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"src"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@difizen/libro-core": "^0.1.
|
|
35
|
-
"@difizen/libro-common": "^0.1.
|
|
36
|
-
"@difizen/libro-kernel": "^0.1.
|
|
34
|
+
"@difizen/libro-core": "^0.1.16",
|
|
35
|
+
"@difizen/libro-common": "^0.1.16",
|
|
36
|
+
"@difizen/libro-kernel": "^0.1.16",
|
|
37
37
|
"@ant-design/icons": "^5.1.0",
|
|
38
38
|
"@difizen/mana-app": "latest",
|
|
39
39
|
"lodash.throttle": "^4.1.1",
|
package/src/command.ts
CHANGED
|
@@ -15,6 +15,10 @@ export const TerminalCommands: Record<string, Command & { keybind?: string }> =
|
|
|
15
15
|
label: '新建终端',
|
|
16
16
|
keybind: 'ctrl+`',
|
|
17
17
|
},
|
|
18
|
+
CloseTerminal: {
|
|
19
|
+
id: 'libro-terminal-close',
|
|
20
|
+
label: '关闭终端',
|
|
21
|
+
},
|
|
18
22
|
};
|
|
19
23
|
|
|
20
24
|
@singleton({ contrib: [CommandContribution, KeybindingContribution] })
|
|
@@ -36,15 +40,14 @@ export class TerminalCommandContribution
|
|
|
36
40
|
|
|
37
41
|
registerCommands(commands: CommandRegistry): void {
|
|
38
42
|
commands.registerCommand(TerminalCommands['OpenTerminal'], {
|
|
39
|
-
execute: async () => {
|
|
43
|
+
execute: async (name?: string) => {
|
|
40
44
|
try {
|
|
41
45
|
const terminalView =
|
|
42
46
|
await this.viewManager.getOrCreateView<LibroTerminalView>(
|
|
43
47
|
LibroTerminalView,
|
|
44
|
-
|
|
45
|
-
id: this.manager.newTerminalName(),
|
|
46
|
-
},
|
|
48
|
+
this.manager.getTerminalArgs(name),
|
|
47
49
|
);
|
|
50
|
+
|
|
48
51
|
const slot = await this.config.get(terminalDefaultSlot);
|
|
49
52
|
if (slot) {
|
|
50
53
|
this.slotManager.addView(terminalView, slot, {
|
|
@@ -56,5 +59,20 @@ export class TerminalCommandContribution
|
|
|
56
59
|
}
|
|
57
60
|
},
|
|
58
61
|
});
|
|
62
|
+
commands.registerCommand(TerminalCommands['CloseTerminal'], {
|
|
63
|
+
execute: async (name: string) => {
|
|
64
|
+
try {
|
|
65
|
+
const terminalView =
|
|
66
|
+
await this.viewManager.getOrCreateView<LibroTerminalView>(
|
|
67
|
+
LibroTerminalView,
|
|
68
|
+
this.manager.getTerminalArgs(name),
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
terminalView.dispose();
|
|
72
|
+
} catch (e) {
|
|
73
|
+
console.error(e);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
});
|
|
59
77
|
}
|
|
60
78
|
}
|
package/src/manager.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { Poll } from '@difizen/libro-common';
|
|
5
5
|
import { NetworkError, ServerConnection } from '@difizen/libro-kernel';
|
|
6
6
|
import type { Disposable, Disposed, Event } from '@difizen/mana-app';
|
|
7
|
+
import { prop } from '@difizen/mana-app';
|
|
7
8
|
import { singleton } from '@difizen/mana-app';
|
|
8
9
|
import { Emitter, inject } from '@difizen/mana-app';
|
|
9
10
|
import { v4 } from 'uuid';
|
|
@@ -22,8 +23,15 @@ export class TerminalManager implements Disposable, Disposed {
|
|
|
22
23
|
protected _ready: Promise<void>;
|
|
23
24
|
protected _runningChanged = new Emitter<TerminalModel[]>();
|
|
24
25
|
protected _connectionFailure = new Emitter<Error>();
|
|
26
|
+
|
|
27
|
+
// 缓存创建terminal的参数
|
|
28
|
+
terminalOptionsCache = new Map();
|
|
29
|
+
|
|
25
30
|
// As an optimization, we unwrap the models to just store the names.
|
|
31
|
+
|
|
32
|
+
@prop()
|
|
26
33
|
protected _names: string[] = [];
|
|
34
|
+
|
|
27
35
|
protected get _models(): TerminalModel[] {
|
|
28
36
|
return this._names.map((name) => {
|
|
29
37
|
return { name };
|
|
@@ -143,6 +151,10 @@ export class TerminalManager implements Disposable, Disposed {
|
|
|
143
151
|
return this._models[Symbol.iterator]();
|
|
144
152
|
}
|
|
145
153
|
|
|
154
|
+
get runningModels() {
|
|
155
|
+
return this._names;
|
|
156
|
+
}
|
|
157
|
+
|
|
146
158
|
/**
|
|
147
159
|
* Force a refresh of the running terminals.
|
|
148
160
|
*
|
|
@@ -284,7 +296,18 @@ export class TerminalManager implements Disposable, Disposed {
|
|
|
284
296
|
}
|
|
285
297
|
return connection;
|
|
286
298
|
};
|
|
287
|
-
|
|
288
|
-
|
|
299
|
+
|
|
300
|
+
// 新建和打开一个已有Terminal,二者所需参数不一样
|
|
301
|
+
getTerminalArgs = (name?: string) => {
|
|
302
|
+
// 通过缓存值作为option创建终端
|
|
303
|
+
if (this.terminalOptionsCache.has(name)) {
|
|
304
|
+
return this.terminalOptionsCache.get(name);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (name) {
|
|
308
|
+
return { name: name };
|
|
309
|
+
} else {
|
|
310
|
+
return { id: v4() };
|
|
311
|
+
}
|
|
289
312
|
};
|
|
290
313
|
}
|
package/src/view.tsx
CHANGED
|
@@ -182,6 +182,7 @@ export class LibroTerminalView extends BaseStatefulView {
|
|
|
182
182
|
this.toDispose.push(
|
|
183
183
|
this.term.onResize((data) => {
|
|
184
184
|
this.onSizeChangedEmitter.fire(data);
|
|
185
|
+
this.setSessionSize();
|
|
185
186
|
}),
|
|
186
187
|
);
|
|
187
188
|
|
|
@@ -221,6 +222,7 @@ export class LibroTerminalView extends BaseStatefulView {
|
|
|
221
222
|
override afterRestore() {
|
|
222
223
|
this.initConnection()
|
|
223
224
|
.then((connection) => {
|
|
225
|
+
this.terminalManager.terminalOptionsCache.set(connection.name, this.options);
|
|
224
226
|
this._isReady = true;
|
|
225
227
|
this.connection = connection;
|
|
226
228
|
this.onReadyEmitter.fire(true);
|
|
@@ -265,6 +267,9 @@ export class LibroTerminalView extends BaseStatefulView {
|
|
|
265
267
|
console.error(`Terminal not shut down: ${reason}`);
|
|
266
268
|
});
|
|
267
269
|
}
|
|
270
|
+
|
|
271
|
+
this.terminalManager.terminalOptionsCache.delete(this.name);
|
|
272
|
+
|
|
268
273
|
super.dispose();
|
|
269
274
|
}
|
|
270
275
|
|
|
@@ -455,13 +460,22 @@ export class LibroTerminalView extends BaseStatefulView {
|
|
|
455
460
|
if (!this.isVisible) {
|
|
456
461
|
return;
|
|
457
462
|
}
|
|
463
|
+
if (this.container?.current) {
|
|
464
|
+
if (this.container.current.offsetHeight === 0) {
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
if (this.container.current.offsetWidth === 0) {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// 触发term的resize 事件
|
|
458
473
|
this.processResize();
|
|
459
474
|
};
|
|
460
475
|
|
|
461
476
|
protected processResize = () => {
|
|
462
477
|
this.open();
|
|
463
478
|
this.resizeTerminal();
|
|
464
|
-
this.setSessionSize();
|
|
465
479
|
};
|
|
466
480
|
|
|
467
481
|
protected open = (): void => {
|