Feature request: create new profile from .lnk file #2509

Open
opened 2026-01-30 22:57:06 +00:00 by claunia · 3 comments
Owner

Originally created by @MicheleCicciottiWork on GitHub (Jul 3, 2019).

Summary of the new feature/enhancement

Development environments, such as Visual Studio, SDKs, etc. install shortcuts that open command prompts with a pre-configured environment (e.g. "x64 Native Tools Command Prompt for VS 2019"). It's tedious and error prone to copy settings from these shortcuts. Terminal should do it automatically, either on a shortcut-by-shortcut basis, or even better letting you dynamically import a whole directory of shortcuts

Proposed technical implementation details

Until Terminal has a UI for creating and editing profiles, this feature will simply involve changes to the schema of profiles.json

I propose a new key for profile dictionaries, let's call it "importDefaultsFromLnk", which can specify a path to a shell link (.lnk) file. A profile can contain a single importDefaultsFromLnk field and nothing else, and all settings will come from the shell link and its NT_CONSOLE_PROPS and NT_FE_CONSOLE_PROPS data blocks (except those that don't make sense for Terminal, of course, like NT_CONSOLE_PROPS::dwWindowOrigin); the name field would default to the file's display name (IShellItem::GetDisplayName), so that it would automatically hide the extension and/or load a localized description that might be present. If other profile fields are explicitly specified, they'll override settings from the shell link. A null value for a field could be used to mean "override with the Terminal default"

Importing a set of shortcuts from a directory (e.g. all shortcuts in Programs folder "Visual Studio 2019\Visual Studio Tools\VC", or even better all shortcuts under "Visual Studio 2019\Visual Studio Tools", recursively) could be done naively, with a profile field that we might call "importProfilesFromDirectory", but unlike importing a single shortcut this feature has non-trivial implications, including but not limited to:

  • should profiles imported from a directory be grouped in a sub-menu of the "new tab" menu?
  • what about recursively imported profiles? should there be sub-sub-menus?
  • how do we specify a dynamically imported profile in globals\defaultProfile?
Originally created by @MicheleCicciottiWork on GitHub (Jul 3, 2019). # Summary of the new feature/enhancement Development environments, such as Visual Studio, SDKs, etc. install shortcuts that open command prompts with a pre-configured environment (e.g. "x64 Native Tools Command Prompt for VS 2019"). It's tedious and error prone to copy settings from these shortcuts. Terminal should do it automatically, either on a shortcut-by-shortcut basis, or even better letting you dynamically import a whole directory of shortcuts # Proposed technical implementation details Until Terminal has a UI for creating and editing profiles, this feature will simply involve changes to the schema of profiles.json I propose a new key for profile dictionaries, let's call it "`importDefaultsFromLnk`", which can specify a path to a shell link (.lnk) file. A profile can contain a single `importDefaultsFromLnk` field and nothing else, and all settings will come from the shell link and its `NT_CONSOLE_PROPS` and `NT_FE_CONSOLE_PROPS` data blocks (except those that don't make sense for Terminal, of course, like `NT_CONSOLE_PROPS::dwWindowOrigin`); the `name` field would default to the file's display name (`IShellItem::GetDisplayName`), so that it would automatically hide the extension and/or load a localized description that might be present. If other profile fields are explicitly specified, they'll override settings from the shell link. A `null` value for a field could be used to mean "override with the Terminal default" Importing a set of shortcuts from a directory (e.g. all shortcuts in Programs folder "Visual Studio 2019\Visual Studio Tools\VC", or even better all shortcuts under "Visual Studio 2019\Visual Studio Tools", recursively) could be done naively, with a profile field that we might call "`importProfilesFromDirectory`", but unlike importing a single shortcut this feature has non-trivial implications, including but not limited to: - should profiles imported from a directory be grouped in a sub-menu of the "new tab" menu? - what about recursively imported profiles? should there be sub-sub-menus? - how do we specify a dynamically imported profile in `globals\defaultProfile`?
claunia added the Issue-FeatureHelp WantedArea-SettingsProduct-Terminal labels 2026-01-30 22:57:06 +00:00
Author
Owner

@zadjii-msft commented on GitHub (Jul 3, 2019):

Would this make more sense as a tool to try and turn a shortcut into a profile you could put in your profiles.json, as opposed to something built in? That would have the downside of not syncing the settings with the shortcut, but it would leave all of the terminal settings in one place. I'd be wary of running something like this on every launch, since it might dramatically reduce startup time - something we're discussing over in #1258.

I don't hate this idea, and it's definitely unique enough to stand on its own. That being said, I'd want to flush it out more before someone goes hog wild implementing it.

@zadjii-msft commented on GitHub (Jul 3, 2019): Would this make more sense as a tool to try and turn a shortcut into a profile you could put in your profiles.json, as opposed to something built in? That would have the downside of not syncing the settings with the shortcut, but it would leave all of the terminal settings in one place. I'd be wary of running something like this on every launch, since it _might_ dramatically reduce startup time - something we're discussing over in #1258. I don't hate this idea, and it's definitely unique enough to stand on its own. That being said, I'd want to flush it out more before someone goes hog wild implementing it.
Author
Owner

@DHowett-MSFT commented on GitHub (Jul 8, 2019):

I think it would be very cool if our settings supported a one-way "import .lnk". It shouldn't have to be a separate tool, since we've got all the code in the codebase right now, in C++, so we could just make it a shared component.

I do agree with the Terminal Backlog milestone, though.

@DHowett-MSFT commented on GitHub (Jul 8, 2019): I think it would be very cool if our settings supported a one-way "import `.lnk`". It shouldn't have to be a separate tool, since we've got all the code in the codebase _right now_, in C++, so we could just make it a shared component. I do agree with the _Terminal Backlog_ milestone, though.
Author
Owner

@DHowett-MSFT commented on GitHub (Jul 8, 2019):

Probably dependent on #1564.

@DHowett-MSFT commented on GitHub (Jul 8, 2019): Probably dependent on #1564.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#2509