From f7d726359c80e250b2cbc2f5a70f9ad750e2b51e Mon Sep 17 00:00:00 2001 From: xujingli <1220341948@qq.com> Date: Thu, 25 Jan 2024 20:21:43 +0800 Subject: [PATCH] fix: lint:prettier error --- .changeset/kind-geese-think.md | 32 +++++++++++++++++++ .../collapse/collapse-content.tsx | 6 +++- .../collapse/index.tsx | 7 ++-- .../collapse/kernel-collapse-content-item.tsx | 6 ++-- .../kernel-and-terminal-panel-view.tsx | 25 +++++++++++---- packages/libro-terminal/src/command.ts | 19 +++++++++++ packages/libro-terminal/src/manager.ts | 9 ++++++ packages/libro-terminal/src/view.tsx | 4 +++ 8 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 .changeset/kind-geese-think.md diff --git a/.changeset/kind-geese-think.md b/.changeset/kind-geese-think.md new file mode 100644 index 000000000..649d0145b --- /dev/null +++ b/.changeset/kind-geese-think.md @@ -0,0 +1,32 @@ +--- +'@difizen/libro-docs': patch +'@difizen/libro-code-cell': patch +'@difizen/libro-code-editor': patch +'@difizen/libro-codemirror': patch +'@difizen/libro-cofine-editor': patch +'@difizen/libro-cofine-editor-contribution': patch +'@difizen/libro-cofine-editor-core': patch +'@difizen/libro-cofine-textmate': patch +'@difizen/libro-common': patch +'@difizen/libro-core': patch +'@difizen/libro-jupyter': patch +'@difizen/libro-kernel': patch +'@difizen/libro-l10n': patch +'@difizen/libro-lab': patch +'@difizen/libro-lsp': patch +'@difizen/libro-markdown': patch +'@difizen/libro-markdown-cell': patch +'@difizen/libro-output': patch +'@difizen/libro-prompt-cell': patch +'@difizen/libro-raw-cell': patch +'@difizen/libro-rendermime': patch +'@difizen/libro-search': patch +'@difizen/libro-search-code-cell': patch +'@difizen/libro-shared-model': patch +'@difizen/libro-terminal': patch +'@difizen/libro-toc': patch +'@difizen/libro-virtualized': patch +'@difizen/libro-widget': patch +--- + +Fix: Make Terminals opened from left panel same as the one you created, instead of creating a new terminal view. diff --git a/packages/libro-lab/src/kernel-and-terminal-panel/collapse/collapse-content.tsx b/packages/libro-lab/src/kernel-and-terminal-panel/collapse/collapse-content.tsx index d53d4aebb..3c4bfbef4 100644 --- a/packages/libro-lab/src/kernel-and-terminal-panel/collapse/collapse-content.tsx +++ b/packages/libro-lab/src/kernel-and-terminal-panel/collapse/collapse-content.tsx @@ -1,6 +1,7 @@ import { CloseOutlined } from '@ant-design/icons'; import { TerminalCommands } from '@difizen/libro-terminal'; import { CommandRegistry, useInject } from '@difizen/mana-app'; +import { message } from 'antd'; import React from 'react'; import { @@ -58,7 +59,10 @@ export const LibroCollapseContent: React.FC = (props: Props) => { e.stopPropagation(); e.preventDefault(); if (item.shutdown) { - item.shutdown(); + item.shutdown().catch((error) => { + message.error(`shutdown ${props.type} failed`); + console.error(error); + }); } }} > diff --git a/packages/libro-lab/src/kernel-and-terminal-panel/collapse/index.tsx b/packages/libro-lab/src/kernel-and-terminal-panel/collapse/index.tsx index 30c4dd387..3b85071e4 100644 --- a/packages/libro-lab/src/kernel-and-terminal-panel/collapse/index.tsx +++ b/packages/libro-lab/src/kernel-and-terminal-panel/collapse/index.tsx @@ -1,6 +1,6 @@ import { CaretDownOutlined, CaretRightOutlined } from '@ant-design/icons'; import { ViewContext } from '@difizen/mana-app'; -import { Empty, Popconfirm } from 'antd'; +import { Empty, message, Popconfirm } from 'antd'; import React, { useState } from 'react'; import type { SaveableTabView } from '../../index.js'; @@ -110,7 +110,10 @@ export const LibroCollapse: React.FC = (props: Props) => { cancelText="取消" onConfirm={() => { if (props.shutdownAll) { - props.shutdownAll(); + props.shutdownAll().catch((e) => { + message.error(`shutdown all ${props.type}s error`); + console.error(e); + }); } }} > diff --git a/packages/libro-lab/src/kernel-and-terminal-panel/collapse/kernel-collapse-content-item.tsx b/packages/libro-lab/src/kernel-and-terminal-panel/collapse/kernel-collapse-content-item.tsx index 7ddbe01cc..3a5f26420 100644 --- a/packages/libro-lab/src/kernel-and-terminal-panel/collapse/kernel-collapse-content-item.tsx +++ b/packages/libro-lab/src/kernel-and-terminal-panel/collapse/kernel-collapse-content-item.tsx @@ -35,9 +35,11 @@ export const LibroKernelCollapseContentItem: React.FC = (props: Props) =>
{item.name}
{ + onClick={async (e) => { if (item.shutdown) { - item.shutdown(); + item.shutdown().catch((error) => { + console.error(error); + }); } e.preventDefault(); e.stopPropagation(); diff --git a/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx b/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx index 08e46ed00..41d05c6f8 100644 --- a/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx +++ b/packages/libro-lab/src/kernel-and-terminal-panel/kernel-and-terminal-panel-view.tsx @@ -1,9 +1,10 @@ import { LibroKernelManager, LibroSessionManager } from '@difizen/libro-kernel'; import type { ILanguageServerManager, TLanguageServerId } from '@difizen/libro-lsp'; import { ILSPDocumentConnectionManager } from '@difizen/libro-lsp'; -import { TerminalManager } from '@difizen/libro-terminal'; +import { TerminalCommands, TerminalManager } from '@difizen/libro-terminal'; import { BaseView, + CommandRegistry, inject, singleton, useInject, @@ -36,6 +37,7 @@ const PanelRender: React.FC = () => { terminalManager, lspManager, lspConnectionManager, + commandRegistry, } = instance; const [kernelItems, setKernelItems] = useState< @@ -62,7 +64,7 @@ const PanelRender: React.FC = () => { id: key, name: `${key} (${session.spec.languages.join('/')})`, shutdown: async () => - lspConnectionManager.disconnectServer(key as TLanguageServerId), + await lspConnectionManager.disconnectServer(key as TLanguageServerId), }); }); @@ -95,7 +97,7 @@ const PanelRender: React.FC = () => { items.set(kernel.id, { id: kernel.id, name: kernel.name, - shutdown: async () => libroKernelManager.shutdown(kernel.id), + shutdown: async () => await libroKernelManager.shutdown(kernel.id), notebooks: [ { sessionId: session.id, name: session.name, path: session.path }, ], @@ -120,7 +122,13 @@ const PanelRender: React.FC = () => { items.push({ id: 'terminal/' + terminal, name: terminal, - shutdown: async () => terminalManager.shutdown(terminal), + shutdown: async () => { + await terminalManager.shutdown(terminal); + commandRegistry.executeCommand( + TerminalCommands['CloseTerminal'].id, + terminal, + ); + }, }); } @@ -154,18 +162,18 @@ const PanelRender: React.FC = () => { items={kernelItems} shutdownAll={async () => { await libroKernelManager.shutdownAll(); - libroSessionManager.refreshRunning(); + await libroSessionManager.refreshRunning(); }} /> terminalManager.shutdownAll()} + shutdownAll={async () => await terminalManager.shutdownAll()} /> lspConnectionManager.disconnectAllServers()} + shutdownAll={async () => await lspConnectionManager.disconnectAllServers()} />
); @@ -185,6 +193,7 @@ export class KernelAndTerminalPanelView extends BaseView { terminalManager: TerminalManager; lspConnectionManager: ILSPDocumentConnectionManager; lspManager: ILanguageServerManager; + commandRegistry: CommandRegistry; constructor( @inject(LibroKernelManager) libroKernelManager: LibroKernelManager, @@ -192,6 +201,7 @@ export class KernelAndTerminalPanelView extends BaseView { @inject(TerminalManager) terminalManager: TerminalManager, @inject(ILSPDocumentConnectionManager) lspDocumentConnectionManager: ILSPDocumentConnectionManager, + @inject(CommandRegistry) commandRegistry: CommandRegistry, ) { super(); this.title.icon = ; @@ -202,6 +212,7 @@ export class KernelAndTerminalPanelView extends BaseView { this.terminalManager = terminalManager; this.lspConnectionManager = lspDocumentConnectionManager; this.lspManager = lspDocumentConnectionManager.languageServerManager; + this.commandRegistry = commandRegistry; } getAllOpenedTabView(): SaveableTabView { diff --git a/packages/libro-terminal/src/command.ts b/packages/libro-terminal/src/command.ts index e460f2440..2fca6ccb4 100644 --- a/packages/libro-terminal/src/command.ts +++ b/packages/libro-terminal/src/command.ts @@ -15,6 +15,10 @@ export const TerminalCommands: Record = label: '新建终端', keybind: 'ctrl+`', }, + CloseTerminal: { + id: 'libro-terminal-close', + label: '关闭终端', + }, }; @singleton({ contrib: [CommandContribution, KeybindingContribution] }) @@ -55,5 +59,20 @@ export class TerminalCommandContribution } }, }); + commands.registerCommand(TerminalCommands['CloseTerminal'], { + execute: async (name: string) => { + try { + const terminalView = + await this.viewManager.getOrCreateView( + LibroTerminalView, + this.manager.getTerminalArgs(name), + ); + + terminalView.dispose(); + } catch (e) { + console.error(e); + } + }, + }); } } diff --git a/packages/libro-terminal/src/manager.ts b/packages/libro-terminal/src/manager.ts index c38701f7b..140de7734 100644 --- a/packages/libro-terminal/src/manager.ts +++ b/packages/libro-terminal/src/manager.ts @@ -23,6 +23,10 @@ export class TerminalManager implements Disposable, Disposed { protected _ready: Promise; protected _runningChanged = new Emitter(); protected _connectionFailure = new Emitter(); + + // 缓存创建terminal的参数 + terminalOptionsCache = new Map(); + // As an optimization, we unwrap the models to just store the names. @prop() @@ -295,6 +299,11 @@ export class TerminalManager implements Disposable, Disposed { // 新建和打开一个已有Terminal,二者所需参数不一样 getTerminalArgs = (name?: string) => { + // 通过缓存值作为option创建终端 + if (this.terminalOptionsCache.has(name)) { + return this.terminalOptionsCache.get(name); + } + if (name) { return { name: name }; } else { diff --git a/packages/libro-terminal/src/view.tsx b/packages/libro-terminal/src/view.tsx index bad401dd0..9265bb916 100644 --- a/packages/libro-terminal/src/view.tsx +++ b/packages/libro-terminal/src/view.tsx @@ -222,6 +222,7 @@ export class LibroTerminalView extends BaseStatefulView { override afterRestore() { this.initConnection() .then((connection) => { + this.terminalManager.terminalOptionsCache.set(connection.name, this.options); this._isReady = true; this.connection = connection; this.onReadyEmitter.fire(true); @@ -266,6 +267,9 @@ export class LibroTerminalView extends BaseStatefulView { console.error(`Terminal not shut down: ${reason}`); }); } + + this.terminalManager.terminalOptionsCache.delete(this.name); + super.dispose(); }