@opensumi/ide-terminal-next 3.5.1-next-1730948411.0 → 3.5.1-next-1730963433.0

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.
Files changed (63) hide show
  1. package/lib/browser/component/resize.view.d.ts +1 -3
  2. package/lib/browser/component/resize.view.d.ts.map +1 -1
  3. package/lib/browser/component/resize.view.js +24 -20
  4. package/lib/browser/component/resize.view.js.map +1 -1
  5. package/lib/browser/component/tab.item.d.ts +2 -6
  6. package/lib/browser/component/tab.item.d.ts.map +1 -1
  7. package/lib/browser/component/tab.item.js +32 -24
  8. package/lib/browser/component/tab.item.js.map +1 -1
  9. package/lib/browser/component/tab.view.d.ts +1 -3
  10. package/lib/browser/component/tab.view.d.ts.map +1 -1
  11. package/lib/browser/component/tab.view.js +5 -9
  12. package/lib/browser/component/tab.view.js.map +1 -1
  13. package/lib/browser/component/terminal.view.d.ts +1 -3
  14. package/lib/browser/component/terminal.view.d.ts.map +1 -1
  15. package/lib/browser/component/terminal.view.js +8 -7
  16. package/lib/browser/component/terminal.view.js.map +1 -1
  17. package/lib/browser/contribution/terminal.command.d.ts.map +1 -1
  18. package/lib/browser/contribution/terminal.command.js +24 -19
  19. package/lib/browser/contribution/terminal.command.js.map +1 -1
  20. package/lib/browser/terminal.api.d.ts.map +1 -1
  21. package/lib/browser/terminal.api.js +5 -2
  22. package/lib/browser/terminal.api.js.map +1 -1
  23. package/lib/browser/terminal.client.d.ts.map +1 -1
  24. package/lib/browser/terminal.client.js +8 -4
  25. package/lib/browser/terminal.client.js.map +1 -1
  26. package/lib/browser/terminal.controller.d.ts.map +1 -1
  27. package/lib/browser/terminal.controller.js +12 -15
  28. package/lib/browser/terminal.controller.js.map +1 -1
  29. package/lib/browser/terminal.render.d.ts +2 -6
  30. package/lib/browser/terminal.render.d.ts.map +1 -1
  31. package/lib/browser/terminal.search.js +1 -1
  32. package/lib/browser/terminal.search.js.map +1 -1
  33. package/lib/browser/terminal.view.d.ts +19 -22
  34. package/lib/browser/terminal.view.d.ts.map +1 -1
  35. package/lib/browser/terminal.view.js +121 -214
  36. package/lib/browser/terminal.view.js.map +1 -1
  37. package/lib/common/controller.d.ts +7 -6
  38. package/lib/common/controller.d.ts.map +1 -1
  39. package/lib/common/controller.js.map +1 -1
  40. package/lib/common/render.d.ts +2 -5
  41. package/lib/common/render.d.ts.map +1 -1
  42. package/lib/common/render.js.map +1 -1
  43. package/lib/common/resize.d.ts +10 -9
  44. package/lib/common/resize.d.ts.map +1 -1
  45. package/package.json +18 -17
  46. package/src/browser/component/resize.view.tsx +69 -54
  47. package/src/browser/component/tab.item.tsx +43 -32
  48. package/src/browser/component/tab.view.tsx +11 -16
  49. package/src/browser/component/terminal.view.tsx +11 -8
  50. package/src/browser/contribution/terminal.command.ts +26 -20
  51. package/src/browser/terminal.api.ts +6 -2
  52. package/src/browser/terminal.client.ts +8 -4
  53. package/src/browser/terminal.controller.ts +12 -18
  54. package/src/browser/terminal.search.ts +1 -1
  55. package/src/browser/terminal.view.ts +132 -127
  56. package/src/common/controller.ts +7 -8
  57. package/src/common/render.ts +2 -5
  58. package/src/common/resize.ts +13 -9
  59. package/lib/browser/component/terminal.select.d.ts +0 -6
  60. package/lib/browser/component/terminal.select.d.ts.map +0 -1
  61. package/lib/browser/component/terminal.select.js +0 -19
  62. package/lib/browser/component/terminal.select.js.map +0 -1
  63. package/src/browser/component/terminal.select.tsx +0 -29
@@ -114,7 +114,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
114
114
  },
115
115
  {
116
116
  execute: () => {
117
- const group = this.view.currentGroup;
117
+ const group = this.view.currentGroup.get();
118
118
  if (!group) {
119
119
  return;
120
120
  }
@@ -161,7 +161,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
161
161
  },
162
162
  {
163
163
  execute: async () => {
164
- const widgetId = this.view.currentWidgetId;
164
+ const widgetId = this.view.currentWidgetId.get();
165
165
  if (widgetId) {
166
166
  this.view.removeWidget(widgetId);
167
167
  }
@@ -193,7 +193,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
193
193
  },
194
194
  {
195
195
  execute: () => {
196
- const widgetId = this.view.currentWidgetId;
196
+ const widgetId = this.view.currentWidgetId.get();
197
197
  const client = this.terminalController.findClientFromWidgetId(widgetId);
198
198
  if (client) {
199
199
  client.selectAll();
@@ -209,7 +209,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
209
209
  },
210
210
  {
211
211
  execute: () => {
212
- const current = this.view.currentWidgetId;
212
+ const current = this.view.currentWidgetId.get();
213
213
  const client = this.terminalController.findClientFromWidgetId(current);
214
214
  if (client) {
215
215
  client.clear();
@@ -267,7 +267,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
267
267
 
268
268
  registry.registerCommand(TERMINAL_COMMANDS.COPY, {
269
269
  execute: async () => {
270
- const current = this.view.currentWidgetId;
270
+ const current = this.view.currentWidgetId.get();
271
271
  const client = this.terminalController.findClientFromWidgetId(current);
272
272
  if (client) {
273
273
  await this.clipboardService.writeText(client.getSelection());
@@ -277,7 +277,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
277
277
 
278
278
  registry.registerCommand(TERMINAL_COMMANDS.PASTE, {
279
279
  execute: async () => {
280
- const current = this.view.currentWidgetId;
280
+ const current = this.view.currentWidgetId.get();
281
281
  const client = this.terminalController.findClientFromWidgetId(current);
282
282
  if (client) {
283
283
  client.paste(await this.clipboardService.readText());
@@ -287,7 +287,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
287
287
 
288
288
  registry.registerCommand(TERMINAL_COMMANDS.SELECT_ALL, {
289
289
  execute: () => {
290
- const current = this.view.currentWidgetId;
290
+ const current = this.view.currentWidgetId.get();
291
291
  const client = this.terminalController.findClientFromWidgetId(current);
292
292
  if (client) {
293
293
  client.selectAll();
@@ -297,9 +297,10 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
297
297
 
298
298
  registry.registerCommand(TERMINAL_COMMANDS.RE_LAUNCH, {
299
299
  execute: () => {
300
- const groups = this.view.groups;
300
+ const groups = this.view.groups.get();
301
301
  for (const group of groups) {
302
- group.widgets.forEach((widget) => {
302
+ const widgets = group.widgets.get();
303
+ widgets.forEach((widget) => {
303
304
  const client = this.terminalController.findClientFromWidgetId(widget.id);
304
305
  if (client) {
305
306
  client.reset();
@@ -318,8 +319,8 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
318
319
 
319
320
  registry.registerCommand(TERMINAL_COMMANDS.FOCUS_NEXT_TERMINAL, {
320
321
  execute: () => {
321
- const group = this.view.currentGroup;
322
- if (group.widgets.length <= 1) {
322
+ const group = this.view.currentGroup.get();
323
+ if (group && group.widgets.get().length <= 1) {
323
324
  return;
324
325
  }
325
326
  const client = this.getNextOrPrevTerminalClient('next');
@@ -329,8 +330,8 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
329
330
 
330
331
  registry.registerCommand(TERMINAL_COMMANDS.FOCUS_PREVIOUS_TERMINAL, {
331
332
  execute: () => {
332
- const group = this.view.currentGroup;
333
- if (group.widgets.length <= 1) {
333
+ const group = this.view.currentGroup.get();
334
+ if (group && group.widgets.get().length <= 1) {
334
335
  return;
335
336
  }
336
337
  const client = this.getNextOrPrevTerminalClient('prev');
@@ -340,7 +341,7 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
340
341
 
341
342
  registry.registerCommand(TERMINAL_COMMANDS.KILL_PROCESS, {
342
343
  execute: async () => {
343
- const current = this.view.currentWidgetId;
344
+ const current = this.view.currentWidgetId.get();
344
345
  const client = this.terminalController.findClientFromWidgetId(current);
345
346
  if (client) {
346
347
  const select = client.getSelection();
@@ -357,17 +358,22 @@ export class TerminalCommandContribution implements CommandContribution, ClientA
357
358
  }
358
359
 
359
360
  private getNextOrPrevTerminalClient(kind: 'next' | 'prev'): ITerminalClient | undefined {
360
- const group = this.view.currentGroup;
361
- const currentIdx = group.widgets.findIndex((w) => w.id === this.view.currentWidgetId);
361
+ const group = this.view.currentGroup.get();
362
+ if (!group) {
363
+ return;
364
+ }
365
+
366
+ const widgets = group.widgets.get();
367
+ const currentIdx = widgets.findIndex((w) => w.id === this.view.currentWidgetId.get());
362
368
 
363
- let index;
369
+ let index: number;
364
370
  if (kind === 'next') {
365
- index = currentIdx === group.widgets.length - 1 ? 0 : currentIdx + 1;
371
+ index = currentIdx === widgets.length - 1 ? 0 : currentIdx + 1;
366
372
  } else {
367
- index = currentIdx === 0 ? group.widgets.length - 1 : currentIdx - 1;
373
+ index = currentIdx === 0 ? widgets.length - 1 : currentIdx - 1;
368
374
  }
369
375
 
370
- const widget = group.widgets[index];
376
+ const widget = widgets[index];
371
377
  return this.terminalController.findClientFromWidgetId(widget.id);
372
378
  }
373
379
  }
@@ -2,6 +2,7 @@ import capitalize from 'lodash/capitalize';
2
2
 
3
3
  import { Autowired, Injectable } from '@opensumi/di';
4
4
  import { Emitter, Event } from '@opensumi/ide-core-common';
5
+ import { transaction } from '@opensumi/ide-monaco/lib/common/observable';
5
6
 
6
7
  import {
7
8
  ITerminalApiService,
@@ -67,7 +68,7 @@ export class TerminalApiService implements ITerminalApiService {
67
68
  return Array.from(this.controller.clients.values()).map((v) => ({
68
69
  id: v.id,
69
70
  name: v.name,
70
- isActive: this.view.currentWidgetId === v.id,
71
+ isActive: this.view.currentWidgetId.get() === v.id,
71
72
  }));
72
73
  }
73
74
 
@@ -164,7 +165,10 @@ export class TerminalApiService implements ITerminalApiService {
164
165
  const groupIndex = this.view.createGroup();
165
166
  const group = this.view.getGroup(groupIndex);
166
167
  const widget = this.view.createWidget(group, widgetId, false, true);
167
- widget.name = capitalize(uniqName);
168
+ transaction((tx) => {
169
+ widget.name.set(capitalize(uniqName), tx);
170
+ });
171
+
168
172
  this.view.selectWidget(widgetId);
169
173
 
170
174
  widget.onRender(() => {
@@ -17,6 +17,7 @@ import {
17
17
  } from '@opensumi/ide-core-common';
18
18
  import { WorkbenchEditorService } from '@opensumi/ide-editor/lib/common';
19
19
  import { IFileServiceClient } from '@opensumi/ide-file-service/lib/common';
20
+ import { transaction } from '@opensumi/ide-monaco/lib/common/observable';
20
21
  import { IMessageService } from '@opensumi/ide-overlay';
21
22
  import { IVariableResolverService } from '@opensumi/ide-variable/lib/common';
22
23
  import { IWorkspaceService } from '@opensumi/ide-workspace/lib/common';
@@ -191,7 +192,9 @@ export class TerminalClient extends Disposable implements ITerminalClient {
191
192
  this.addDispose(
192
193
  this.internalService.onProcessChange((e) => {
193
194
  if (e.sessionId === this.id) {
194
- this.widget.processName = e.processName;
195
+ transaction((tx) => {
196
+ this.widget.processName.set(e.processName, tx);
197
+ });
195
198
  }
196
199
  }),
197
200
  );
@@ -281,8 +284,9 @@ export class TerminalClient extends Disposable implements ITerminalClient {
281
284
  if (!options.cwd) {
282
285
  // resolve cwd from the group first widget
283
286
  const group = widget.group;
284
- if (group.widgets.length > 1 && group.widgets[0]) {
285
- const cwd = await this.internalService.getCwd(group.widgets[0].id);
287
+ const widgets = group.widgets.get();
288
+ if (widgets.length > 1 && widgets[0]) {
289
+ const cwd = await this.internalService.getCwd(widgets[0].id);
286
290
  if (cwd) {
287
291
  options.cwd = cwd;
288
292
  }
@@ -755,7 +759,7 @@ export class TerminalClient extends Disposable implements ITerminalClient {
755
759
  }
756
760
 
757
761
  updateTerminalName(options: { name: string }) {
758
- if (!this.name && !this._widget.name) {
762
+ if (!this.name && !this._widget.name.get()) {
759
763
  this._widget.rename(options.name || this.name);
760
764
  }
761
765
  }
@@ -321,16 +321,6 @@ export class TerminalController extends WithEventBus implements ITerminalControl
321
321
  let firstAvailableId = '';
322
322
  const { groups, current } = history;
323
323
 
324
- // const ids: (string | { client: string })[] = [];
325
-
326
- // groups.forEach((widgets) => ids.push(...widgets.map((widget) => widget.client)));
327
-
328
- // 之前OpenSumi的Check终端活跃机制是有问题的,暂时不启用,这部分逻辑在PtyService会兜住
329
- // const checked = await this.service.check(ids.map((id) => (typeof id === 'string' ? id : id.clientId)));
330
- // if (!checked) {
331
- // return;
332
- // }
333
-
334
324
  for (const widgets of groups) {
335
325
  if (!widgets) {
336
326
  continue;
@@ -397,7 +387,7 @@ export class TerminalController extends WithEventBus implements ITerminalControl
397
387
  await Promise.all(promises);
398
388
  }
399
389
 
400
- const selectedIndex = this.terminalView.groups.findIndex((group) => group.widgetsMap.has(currentWidgetId));
390
+ const selectedIndex = this.terminalView.groups.get().findIndex((group) => group.widgetsMap.has(currentWidgetId));
401
391
 
402
392
  if (selectedIndex > -1 && currentWidgetId) {
403
393
  this.terminalView.selectWidget(currentWidgetId);
@@ -501,7 +491,7 @@ export class TerminalController extends WithEventBus implements ITerminalControl
501
491
  this.terminalView.selectWidget(current.id);
502
492
  } else {
503
493
  this.terminalView.selectGroup(
504
- this.terminalView.currentGroupIndex > -1 ? this.terminalView.currentGroupIndex : 0,
494
+ this.terminalView.currentGroupIndex.get() > -1 ? this.terminalView.currentGroupIndex.get() : 0,
505
495
  );
506
496
  }
507
497
  }),
@@ -521,7 +511,7 @@ export class TerminalController extends WithEventBus implements ITerminalControl
521
511
  this.terminalView.selectWidget(widget.id);
522
512
  } else {
523
513
  this.terminalView.selectGroup(
524
- this.terminalView.currentGroupIndex > -1 ? this.terminalView.currentGroupIndex : 0,
514
+ this.terminalView.currentGroupIndex.get() > -1 ? this.terminalView.currentGroupIndex.get() : 0,
525
515
  );
526
516
  }
527
517
  }
@@ -569,11 +559,12 @@ export class TerminalController extends WithEventBus implements ITerminalControl
569
559
 
570
560
  toJSON() {
571
561
  const groups: { client: string }[][] = [];
572
- let cClient = this._clients.get(this.terminalView.currentWidgetId);
573
- this.terminalView.groups.forEach((wGroup) => {
562
+ let cClient = this._clients.get(this.terminalView.currentWidgetId.get());
563
+ this.terminalView.groups.get().forEach((wGroup) => {
574
564
  const group: { client: string }[] = [];
575
565
 
576
- wGroup.widgets.forEach((widget) => {
566
+ const widgets = wGroup.widgets.get();
567
+ widgets.forEach((widget) => {
577
568
  const client = this._clients.get(widget.id);
578
569
  const disablePersistence =
579
570
  !this.preferenceService.get(CodeTerminalSettingId.EnablePersistentSessions) ||
@@ -723,13 +714,16 @@ export class TerminalController extends WithEventBus implements ITerminalControl
723
714
  }
724
715
 
725
716
  clearCurrentGroup() {
726
- this.terminalView.currentGroup &&
727
- this.terminalView.currentGroup.widgets.forEach((widget) => {
717
+ const group = this.terminalView.currentGroup.get();
718
+ if (group) {
719
+ const widgets = group.widgets.get();
720
+ widgets.forEach((widget) => {
728
721
  const client = this._clients.get(widget.id);
729
722
  if (client) {
730
723
  client.clear();
731
724
  }
732
725
  });
726
+ }
733
727
  }
734
728
 
735
729
  clearAllGroups() {
@@ -24,7 +24,7 @@ export class TerminalSearchService implements ITerminalSearchService {
24
24
  onVisibleChange: Event<boolean> = this._onVisibleChange.event;
25
25
 
26
26
  get client(): ITerminalClient | undefined {
27
- return this.controller.findClientFromWidgetId(this.terminalView.currentWidget.id);
27
+ return this.controller.findClientFromWidgetId(this.terminalView.currentWidget.get().id);
28
28
  }
29
29
 
30
30
  open() {