microsoft / terminal

The new Windows Terminal and the original Windows console host, all in the same place!
MIT License
95.5k stars 8.31k forks source link

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

Open MicheleCicciottiWork opened 5 years ago

MicheleCicciottiWork commented 5 years ago

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:

zadjii-msft commented 5 years ago

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.

DHowett-MSFT commented 5 years ago

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 5 years ago

Probably dependent on #1564.