diff --git a/src/extension.ts b/src/extension.ts index d2a12d34..058a431c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,5 +1,5 @@ import { commands, ExtensionContext, LogOutputChannel, Terminal, Uri, window } from 'vscode'; -import { PythonEnvironment, PythonEnvironmentApi } from './api'; +import { PythonEnvironment, PythonEnvironmentApi, PythonProjectCreator } from './api'; import { ensureCorrectVersion } from './common/extVersion'; import { registerTools } from './common/lm.apis'; import { registerLogger, traceError, traceInfo } from './common/logging'; @@ -265,12 +265,37 @@ export async function activate(context: ExtensionContext): Promise { - const selected = await newProjectSelection(projectCreators.getProjectCreators()); - if (selected) { - await selected.create(); - } - }), + commands.registerCommand( + 'python-envs.createNewProjectFromTemplate', + async (projectType: string, quickCreate: boolean, newProjectName: string, newProjectPath: string) => { + if (quickCreate) { + if (!projectType || !newProjectName || !newProjectPath) { + throw new Error('Project type, name, and path are required for quick create.'); + } + const creators = projectCreators.getProjectCreators(); + let selected: PythonProjectCreator | undefined; + if (projectType === 'python-package') { + selected = creators.find((c) => c.name === 'newPackage'); + } + if (projectType === 'python-script') { + selected = creators.find((c) => c.name === 'newScript'); + } + if (!selected) { + throw new Error(`Project creator for type "${projectType}" not found.`); + } + await selected.create({ + quickCreate: true, + name: newProjectName, + rootUri: Uri.file(newProjectPath), + }); + } else { + const selected = await newProjectSelection(projectCreators.getProjectCreators()); + if (selected) { + await selected.create(); + } + } + }, + ), terminalActivation.onDidChangeTerminalActivationState(async (e) => { await setActivateMenuButtonContext(e.terminal, e.environment, e.activated); }),