Skip to content

Feature Request: Make the PowerShell Extension profile available as a profile. #4412

Open
@0xNinshu

Description

@0xNinshu

Prerequisites

  • I have written a descriptive issue title.
  • I have searched all issues to ensure it has not already been reported.

Summary

Hello,

I am not good enough with TypeScript/JavaScript to say that I would be able to help actually implement it, but I would like to help if possible.

Currently the extension creates a terminal window and passes the startup scripts to the terminal in code. I would like to propose the idea of fully integrating the terminal created by the extension as.

This would add the following benefits:

  • Users would the ability to have the PowerShell Extension show as one or more profiles in the profile selector.
  • Users can select the PowerShell Extension profile as their default profile in the profile selector.
  • Users can pass arguments to the PowerShell profile at runtime.
  • Make it easier to work with sessions.
  • Existing command workbench.action.terminal.relaunch could be used in place of PowerShell.RestartSession

Users would be able to configure the profile by adding the profile Json to their settings.

{
	"terminal.integrated.profiles.windows": {
		"PowerShell Extension": {
			"title": "PowerShell Extension",
			"env": {
				"${env:Example}": "Test"
			},
			"overrideName": false,
			"args": [],
			"id": "ms-vscode.powershell.PowerShell-Extension",
			"extensionIdentifier": "ms-vscode.powershell"
		}
	}
}

Proposed Design

The way this could be implemented is by adding in the code to have the extension be a terminal provider. Example below taken from the VSCode API reference.

contributes.terminal

Contribute a terminal profile to VS Code, allowing extensions to handle the creation of the profiles. When defined, the profile should appear when creating the terminal profile.

{
  "activationEvents": [
    "onTerminalProfile:my-ext.terminal-profile"
  ],
  "contributes": {
    "terminal": {
      "profiles": [
        {
          "title": "Profile from extension",
          "id": "my-ext.terminal-profile"
        }
      ]
    },
  }
}

When defined, the profile will show up in the terminal profile selector. When activated, handle the creation of the profile by returning terminal options:

vscode.window.registerTerminalProfileProvider('my-ext.terminal-profile', {
  provideProfileOptions(token: vscode.CancellationToken): vscode.ProviderResult<vscode.TerminalOptions | vscode.ExtensionTerminalOptions> {
    return {
      name: 'Profile from extension',
      shellPath: 'bash'
    };
  }
});

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions