diff --git a/out/extension.js b/out/extension.js new file mode 100644 index 0000000..f5fe29a --- /dev/null +++ b/out/extension.js @@ -0,0 +1,84 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.deactivate = exports.activate = void 0; +const vscode = require("vscode"); +function activate(context) { + console.log('Terminal Tab Extension is now active!'); + // 注册打开终端标签页命令 + const openTerminalTabCommand = vscode.commands.registerCommand('terminalTab.open', async () => { + await openTerminalInEditor(); + }); + // 注册在当前目录打开终端标签页命令 + const openInCurrentDirCommand = vscode.commands.registerCommand('terminalTab.openInCurrentDirectory', async (uri) => { + let cwd; + if (uri && uri.fsPath) { + // 从右键菜单获取路径 + const fs = require('fs'); + const stat = fs.statSync(uri.fsPath); + if (stat.isDirectory()) { + cwd = uri.fsPath; + } + else { + cwd = uri.fsPath.substring(0, uri.fsPath.lastIndexOf('\\') || uri.fsPath.lastIndexOf('/')); + } + } + else { + // 从当前活动编辑器获取路径 + const activeEditor = vscode.window.activeTextEditor; + if (activeEditor) { + const filePath = activeEditor.document.uri.fsPath; + cwd = filePath.substring(0, filePath.lastIndexOf('\\') || filePath.lastIndexOf('/')); + } + } + await openTerminalInEditor(cwd); + }); + context.subscriptions.push(openTerminalTabCommand, openInCurrentDirCommand); +} +exports.activate = activate; +async function openTerminalInEditor(cwd) { + const config = vscode.workspace.getConfiguration('terminalTab'); + const preserveFocus = config.get('preserveFocus') || false; + // 先执行向右拆分命令,创建右侧编辑器组 + await vscode.commands.executeCommand('workbench.action.splitEditorRight'); + // 创建终端选项,在编辑器中打开 + const terminalOptions = { + name: 'Qoder CLI', + cwd: cwd, + location: vscode.TerminalLocation.Editor + }; + // 创建终端 + const terminal = vscode.window.createTerminal(terminalOptions); + // 显示终端 + terminal.show(preserveFocus); + // 发送 qodercli 命令 + terminal.sendText('qodercli', true); + // 锁定编辑器组 + setTimeout(async () => { + await lockTerminalTab(terminal); + }, 500); +} +async function lockTerminalTab(terminal) { + // VS Code API 限制:无法直接通过 API 锁定标签页 + // 但我们可以通过以下方式模拟锁定行为: + // 1. 监听终端关闭事件,如果是我们的终端,可以提示用户 + const disposable = vscode.window.onDidCloseTerminal((closedTerminal) => { + if (closedTerminal === terminal) { + // 终端已关闭,清理资源 + disposable.dispose(); + } + }); + // 2. 尝试通过命令锁定编辑器组(如果支持) + try { + // 使用 VS Code 内置命令锁定编辑器组 + await vscode.commands.executeCommand('workbench.action.lockEditorGroup'); + } + catch (error) { + // 命令可能不存在,忽略错误 + console.log('Lock editor group command not available'); + } +} +function deactivate() { + console.log('Terminal Tab Extension is now deactivated!'); +} +exports.deactivate = deactivate; +//# sourceMappingURL=extension.js.map \ No newline at end of file diff --git a/out/extension.js.map b/out/extension.js.map new file mode 100644 index 0000000..63605c2 --- /dev/null +++ b/out/extension.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out/toolProvider.js b/out/toolProvider.js new file mode 100644 index 0000000..dd86e15 --- /dev/null +++ b/out/toolProvider.js @@ -0,0 +1,2 @@ +"use strict"; +//# sourceMappingURL=toolProvider.js.map \ No newline at end of file diff --git a/out/toolProvider.js.map b/out/toolProvider.js.map new file mode 100644 index 0000000..e0255e8 --- /dev/null +++ b/out/toolProvider.js.map @@ -0,0 +1 @@ +{"version":3,"file":"toolProvider.js","sourceRoot":"","sources":["../src/toolProvider.ts"],"names":[],"mappings":""} \ No newline at end of file