mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
[PT Run] Windows Terminal Plugin (#13367)
* run windows terminal plugin * fixes
This commit is contained in:
committed by
GitHub
parent
7daf35d898
commit
cf2ec690db
2
.github/actions/spell-check/expect.txt
vendored
2
.github/actions/spell-check/expect.txt
vendored
@@ -1019,6 +1019,7 @@ ITemplate
|
|||||||
ITEMSTATEICONCLICK
|
ITEMSTATEICONCLICK
|
||||||
ITest
|
ITest
|
||||||
ith
|
ith
|
||||||
|
ITerminal
|
||||||
IThrottled
|
IThrottled
|
||||||
IThumbnail
|
IThumbnail
|
||||||
ITrigger
|
ITrigger
|
||||||
@@ -1068,6 +1069,7 @@ KBDLLHOOKSTRUCT
|
|||||||
kbm
|
kbm
|
||||||
KERNELBASE
|
KERNELBASE
|
||||||
KEYBDINPUT
|
KEYBDINPUT
|
||||||
|
keybindings
|
||||||
keyboardeventhandlers
|
keyboardeventhandlers
|
||||||
keyboardmanager
|
keyboardmanager
|
||||||
keyboardmanagercommon
|
keyboardmanagercommon
|
||||||
|
|||||||
@@ -138,7 +138,8 @@ steps:
|
|||||||
**\Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest.dll
|
**\Microsoft.PowerToys.Run.Plugin.Calculator.UnitTest.dll
|
||||||
**\Microsoft.Plugin.Uri.UnitTests.dll
|
**\Microsoft.Plugin.Uri.UnitTests.dll
|
||||||
**\Wox.Test.dll
|
**\Wox.Test.dll
|
||||||
**\Microsoft.PowerToys.Run.Plugin.System.UnitTests.dll
|
**\Microsoft.PowerToys.Run.Plugin.System.UnitTests.dll
|
||||||
|
**\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.UnitTests.dll
|
||||||
!**\obj\**
|
!**\obj\**
|
||||||
|
|
||||||
# Native dlls
|
# Native dlls
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ build:
|
|||||||
- 'modules\launcher\Plugins\VSCodeWorkspaces\Community.PowerToys.Run.Plugin.VSCodeWorkspaces.dll'
|
- 'modules\launcher\Plugins\VSCodeWorkspaces\Community.PowerToys.Run.Plugin.VSCodeWorkspaces.dll'
|
||||||
- 'modules\launcher\Plugins\Service\Microsoft.PowerToys.Run.Plugin.Service.dll'
|
- 'modules\launcher\Plugins\Service\Microsoft.PowerToys.Run.Plugin.Service.dll'
|
||||||
- 'modules\launcher\Plugins\System\Microsoft.PowerToys.Run.Plugin.System.dll'
|
- 'modules\launcher\Plugins\System\Microsoft.PowerToys.Run.Plugin.System.dll'
|
||||||
|
- 'modules\launcher\Plugins\WindowsTerminal\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.dll'
|
||||||
- 'modules\launcher\PowerLauncher.dll'
|
- 'modules\launcher\PowerLauncher.dll'
|
||||||
- 'modules\launcher\PowerLauncher.exe'
|
- 'modules\launcher\PowerLauncher.exe'
|
||||||
- 'modules\launcher\PowerLauncher.Telemetry.dll'
|
- 'modules\launcher\PowerLauncher.Telemetry.dll'
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PowerLauncher", "src\module
|
|||||||
{5043CECE-E6A7-4867-9CBE-02D27D83747A} = {5043CECE-E6A7-4867-9CBE-02D27D83747A}
|
{5043CECE-E6A7-4867-9CBE-02D27D83747A} = {5043CECE-E6A7-4867-9CBE-02D27D83747A}
|
||||||
{F8B870EB-D5F5-45BA-9CF7-A5C459818820} = {F8B870EB-D5F5-45BA-9CF7-A5C459818820}
|
{F8B870EB-D5F5-45BA-9CF7-A5C459818820} = {F8B870EB-D5F5-45BA-9CF7-A5C459818820}
|
||||||
{74F1B9ED-F59C-4FE7-B473-7B453E30837E} = {74F1B9ED-F59C-4FE7-B473-7B453E30837E}
|
{74F1B9ED-F59C-4FE7-B473-7B453E30837E} = {74F1B9ED-F59C-4FE7-B473-7B453E30837E}
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85} = {A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}
|
||||||
{4BABF3FE-3451-42FD-873F-3C332E18DCEF} = {4BABF3FE-3451-42FD-873F-3C332E18DCEF}
|
{4BABF3FE-3451-42FD-873F-3C332E18DCEF} = {4BABF3FE-3451-42FD-873F-3C332E18DCEF}
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
@@ -367,6 +368,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfThumbnailProvider", "src
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests-PdfThumbnailProvider", "src\modules\previewpane\UnitTests-PdfThumbnailProvider\UnitTests-PdfThumbnailProvider.csproj", "{F40C3397-1834-4530-B2D9-8F8B8456BCDF}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests-PdfThumbnailProvider", "src\modules\previewpane\UnitTests-PdfThumbnailProvider\UnitTests-PdfThumbnailProvider.csproj", "{F40C3397-1834-4530-B2D9-8F8B8456BCDF}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.PowerToys.Run.Plugin.WindowsTerminal", "src\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsTerminal\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.csproj", "{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.PowerToys.Run.Plugin.WindowsTerminal.UnitTests", "src\modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.UnitTests\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.UnitTests.csproj", "{4ED320BC-BA04-4D42-8D15-CBE62151F08B}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
@@ -605,9 +610,7 @@ Global
|
|||||||
{47310AB4-9034-4BD1-8D8B-E88AD21A171B}.Release|x86.ActiveCfg = Release|x64
|
{47310AB4-9034-4BD1-8D8B-E88AD21A171B}.Release|x86.ActiveCfg = Release|x64
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x64.ActiveCfg = Debug|x64
|
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x64.Build.0 = Debug|x64
|
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x64.Build.0 = Debug|x64
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x86.ActiveCfg = Debug|Win32
|
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x86.ActiveCfg = Debug|x64
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x86.Build.0 = Debug|Win32
|
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Debug|x86.Deploy.0 = Debug|Win32
|
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Release|x64.ActiveCfg = Release|x64
|
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Release|x64.ActiveCfg = Release|x64
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Release|x64.Build.0 = Release|x64
|
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Release|x64.Build.0 = Release|x64
|
||||||
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Release|x86.ActiveCfg = Release|Win32
|
{A7D5099E-F0FD-4BF3-8522-5A682759F915}.Release|x86.ActiveCfg = Release|Win32
|
||||||
@@ -965,6 +968,19 @@ Global
|
|||||||
{F40C3397-1834-4530-B2D9-8F8B8456BCDF}.Release|x64.ActiveCfg = Release|x64
|
{F40C3397-1834-4530-B2D9-8F8B8456BCDF}.Release|x64.ActiveCfg = Release|x64
|
||||||
{F40C3397-1834-4530-B2D9-8F8B8456BCDF}.Release|x64.Build.0 = Release|x64
|
{F40C3397-1834-4530-B2D9-8F8B8456BCDF}.Release|x64.Build.0 = Release|x64
|
||||||
{F40C3397-1834-4530-B2D9-8F8B8456BCDF}.Release|x86.ActiveCfg = Release|x64
|
{F40C3397-1834-4530-B2D9-8F8B8456BCDF}.Release|x86.ActiveCfg = Release|x64
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}.Debug|x86.ActiveCfg = Debug|x64
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}.Release|x64.Build.0 = Release|x64
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85}.Release|x86.ActiveCfg = Release|x64
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B}.Debug|x86.ActiveCfg = Debug|x64
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B}.Release|x64.Build.0 = Release|x64
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@@ -1080,6 +1096,8 @@ Global
|
|||||||
{470FBAF9-E1F8-4F3E-8786-198A1C81C8A8} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC}
|
{470FBAF9-E1F8-4F3E-8786-198A1C81C8A8} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC}
|
||||||
{11491FD8-F921-48BF-880C-7FEA185B80A1} = {2F305555-C296-497E-AC20-5FA1B237996A}
|
{11491FD8-F921-48BF-880C-7FEA185B80A1} = {2F305555-C296-497E-AC20-5FA1B237996A}
|
||||||
{F40C3397-1834-4530-B2D9-8F8B8456BCDF} = {2F305555-C296-497E-AC20-5FA1B237996A}
|
{F40C3397-1834-4530-B2D9-8F8B8456BCDF} = {2F305555-C296-497E-AC20-5FA1B237996A}
|
||||||
|
{A2D583F0-B70C-4462-B1F0-8E81AFB7BA85} = {4AFC9975-2456-4C70-94A4-84073C1CED93}
|
||||||
|
{4ED320BC-BA04-4D42-8D15-CBE62151F08B} = {4AFC9975-2456-4C70-94A4-84073C1CED93}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0}
|
SolutionGuid = {C3A2F9D1-7930-4EF4-A6FC-7EE0A99821D0}
|
||||||
|
|||||||
@@ -322,6 +322,9 @@
|
|||||||
<Directory Id="ServicePluginFolder" Name="Service">
|
<Directory Id="ServicePluginFolder" Name="Service">
|
||||||
<Directory Id="ServiceImagesFolder" Name="Images" />
|
<Directory Id="ServiceImagesFolder" Name="Images" />
|
||||||
</Directory>
|
</Directory>
|
||||||
|
<Directory Id="WindowsTerminalPluginFolder" Name="WindowsTerminal">
|
||||||
|
<Directory Id="WindowsTerminalImagesFolder" Name="Images" />
|
||||||
|
</Directory>
|
||||||
<Directory Id="SystemPluginFolder" Name="System">
|
<Directory Id="SystemPluginFolder" Name="System">
|
||||||
<Directory Id="SystemImagesFolder" Name="Images" />
|
<Directory Id="SystemImagesFolder" Name="Images" />
|
||||||
</Directory>
|
</Directory>
|
||||||
@@ -1035,7 +1038,7 @@
|
|||||||
<Fragment>
|
<Fragment>
|
||||||
<!-- Resource directories should be added only if the installer is built on the build farm -->
|
<!-- Resource directories should be added only if the installer is built on the build farm -->
|
||||||
<?ifdef env.IsPipeline?>
|
<?ifdef env.IsPipeline?>
|
||||||
<?foreach ParentDirectory in LauncherInstallFolder;FancyZonesInstallFolder;ImageResizerInstallFolder;ColorPickerInstallFolder;FileExplorerPreviewInstallFolder;CalculatorPluginFolder;FolderPluginFolder;ProgramPluginFolder;ShellPluginFolder;IndexerPluginFolder;UnitConverterPluginFolder;UriPluginFolder;WindowWalkerPluginFolder;RegistryPluginFolder;VSCodeWorkspacesPluginFolder;ServicePluginFolder;SystemPluginFolder;WindowsSettingsPluginFolder?>
|
<?foreach ParentDirectory in LauncherInstallFolder;FancyZonesInstallFolder;ImageResizerInstallFolder;ColorPickerInstallFolder;FileExplorerPreviewInstallFolder;CalculatorPluginFolder;FolderPluginFolder;ProgramPluginFolder;ShellPluginFolder;IndexerPluginFolder;UnitConverterPluginFolder;UriPluginFolder;WindowWalkerPluginFolder;RegistryPluginFolder;VSCodeWorkspacesPluginFolder;ServicePluginFolder;SystemPluginFolder;WindowsSettingsPluginFolder;ServicePluginFolderPluginFolder?>
|
||||||
<DirectoryRef Id="$(var.ParentDirectory)">
|
<DirectoryRef Id="$(var.ParentDirectory)">
|
||||||
<!-- Resource file directories -->
|
<!-- Resource file directories -->
|
||||||
<?foreach Language in $(var.LocLanguageList)?>
|
<?foreach Language in $(var.LocLanguageList)?>
|
||||||
@@ -1132,6 +1135,9 @@
|
|||||||
<Component Id="Launcher_WindowsSettings_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)WindowsSettingsPluginFolder">
|
<Component Id="Launcher_WindowsSettings_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)WindowsSettingsPluginFolder">
|
||||||
<File Id="Launcher_WindowsSettings_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\$(var.Language)\Microsoft.PowerToys.Run.Plugin.WindowsSettings.resources.dll" />
|
<File Id="Launcher_WindowsSettings_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\$(var.Language)\Microsoft.PowerToys.Run.Plugin.WindowsSettings.resources.dll" />
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component Id="Launcher_WindowsTerminal_$(var.IdSafeLanguage)_Component" Directory="Resource$(var.IdSafeLanguage)WindowsTerminalFolder">
|
||||||
|
<File Id="Launcher_WindowsTerminal_$(var.IdSafeLanguage)_File" Source="$(var.BinX64Dir)modules\launcher\Plugins\WindowsTerminal\$(var.Language)\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.resources.dll" />
|
||||||
|
</Component>
|
||||||
<?undef IdSafeLanguage?>
|
<?undef IdSafeLanguage?>
|
||||||
<?endforeach?>
|
<?endforeach?>
|
||||||
<?endif?>
|
<?endif?>
|
||||||
@@ -1325,6 +1331,17 @@
|
|||||||
<File Id="WindowsSettingsLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\Images\WindowsSettings.light.png" />
|
<File Id="WindowsSettingsLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\Microsoft.PowerToys.Run.Plugin.WindowsSettings\Images\WindowsSettings.light.png" />
|
||||||
</Component>
|
</Component>
|
||||||
|
|
||||||
|
<!-- WindowsTerminal Plugin -->
|
||||||
|
<Component Id="WindowsTerminalComponent" Directory="WindowsTerminalPluginFolder" Guid="5392FD11-9A69-4409-A711-748C225F1A18">
|
||||||
|
<?foreach File in plugin.json;Microsoft.PowerToys.Run.Plugin.WindowsTerminal.deps.json;Microsoft.PowerToys.Run.Plugin.WindowsTerminal.dll?>
|
||||||
|
<File Id="WindowsTerminal_$(var.File)" Source="$(var.BinX64Dir)modules\launcher\Plugins\WindowsTerminal\$(var.File)" />
|
||||||
|
<?endforeach?>
|
||||||
|
</Component>
|
||||||
|
<Component Id="WindowsTerminalImagesComponent" Directory="WindowsTerminalImagesFolder" Guid="CDD21BEB-E2F3-4138-A1F8-72FD3B52706A">
|
||||||
|
<File Id="WindowsTerminalDarkIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\WindowsTerminal\Images\WindowsTerminal.dark.png" />
|
||||||
|
<File Id="WindowsTerminalLightIcon" Source="$(var.BinX64Dir)modules\launcher\Plugins\WindowsTerminal\Images\WindowsTerminal.light.png" />
|
||||||
|
</Component>
|
||||||
|
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
</Wix>
|
</Wix>
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
|
||||||
|
<PackageReference Include="MSTest.TestAdapter" Version="2.2.5" />
|
||||||
|
<PackageReference Include="MSTest.TestFramework" Version="2.2.5" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\..\..\codeAnalysis\GlobalSuppressions.cs">
|
||||||
|
<Link>GlobalSuppressions.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<AdditionalFiles Include="..\..\..\..\codeAnalysis\StyleCop.json">
|
||||||
|
<Link>StyleCop.json</Link>
|
||||||
|
</AdditionalFiles>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Microsoft.PowerToys.Run.Plugin.WindowsTerminal\Microsoft.PowerToys.Run.Plugin.WindowsTerminal.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="settings.json">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.Json;
|
||||||
|
using Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.UnitTests
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public class TerminalHelperTests
|
||||||
|
{
|
||||||
|
[DataTestMethod]
|
||||||
|
[DataRow("Windows PowerShell", true, "--window 0 nt --profile \"Windows PowerShell\"")]
|
||||||
|
[DataRow("Windows PowerShell", false, "--profile \"Windows PowerShell\"")]
|
||||||
|
public void ArgumentsTest(string profile, bool openNewTab, string expectedArguments)
|
||||||
|
{
|
||||||
|
var arguments = TerminalHelper.GetArguments(profile, openNewTab);
|
||||||
|
Assert.AreEqual(arguments, expectedArguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void ParseSettingsTest()
|
||||||
|
{
|
||||||
|
var terminal = new TerminalPackage(string.Empty, new Version(), string.Empty, string.Empty, string.Empty);
|
||||||
|
|
||||||
|
var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings.json");
|
||||||
|
var settings = File.ReadAllText(settingsPath);
|
||||||
|
var profiles = TerminalHelper.ParseSettings(terminal, settings);
|
||||||
|
|
||||||
|
Assert.AreEqual(profiles.Count, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DataTestMethod]
|
||||||
|
[DataRow(
|
||||||
|
@"{""guid"":""{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"",""name"":""Windows PowerShell"",""commandline"":""powershell.exe"",""hidden"":true}",
|
||||||
|
"61c54bbd-c2c6-5271-96e7-009a87ff44bf",
|
||||||
|
"Windows PowerShell",
|
||||||
|
true)]
|
||||||
|
[DataRow(
|
||||||
|
@"{""name"":""Windows PowerShell"",""commandline"":""powershell.exe"",""hidden"":false}",
|
||||||
|
null,
|
||||||
|
"Windows PowerShell",
|
||||||
|
false)]
|
||||||
|
public void ParseProfilesTest(string json, string identifier, string name, bool hidden)
|
||||||
|
{
|
||||||
|
var profileElement = JsonDocument.Parse(json).RootElement;
|
||||||
|
var terminal = new TerminalPackage(string.Empty, new Version(), string.Empty, string.Empty, string.Empty);
|
||||||
|
var profile = TerminalHelper.ParseProfile(terminal, profileElement);
|
||||||
|
|
||||||
|
var expectedIdentifier = identifier != null ? new Guid(identifier) : null as Guid?;
|
||||||
|
Assert.AreEqual(profile.Terminal, terminal);
|
||||||
|
Assert.AreEqual(profile.Identifier, expectedIdentifier);
|
||||||
|
Assert.AreEqual(profile.Name, name);
|
||||||
|
Assert.AreEqual(profile.Hidden, hidden);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
// This file was initially generated by Windows Terminal Preview 1.11.2421.0
|
||||||
|
// It should still be usable in newer versions, but newer versions might have additional
|
||||||
|
// settings, help text, or changes that you will not see unless you clear this file
|
||||||
|
// and let us generate a new one for you.
|
||||||
|
|
||||||
|
// To view the default settings, hold "alt" while clicking on the "Settings" button.
|
||||||
|
// For documentation on these settings, see: https://aka.ms/terminal-documentation
|
||||||
|
{
|
||||||
|
"$schema": "https://aka.ms/terminal-profiles-schema",
|
||||||
|
|
||||||
|
"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
||||||
|
|
||||||
|
// You can add more global application settings here.
|
||||||
|
// To learn more about global settings, visit https://aka.ms/terminal-global-settings
|
||||||
|
|
||||||
|
// If enabled, selections are automatically copied to your clipboard.
|
||||||
|
"copyOnSelect": false,
|
||||||
|
|
||||||
|
// If enabled, formatted data is also copied to your clipboard
|
||||||
|
"copyFormatting": false,
|
||||||
|
|
||||||
|
// A profile specifies a command to execute paired with information about how it should look and feel.
|
||||||
|
// Each one of them will appear in the 'New Tab' dropdown,
|
||||||
|
// and can be invoked from the commandline with `wt.exe -p xxx`
|
||||||
|
// To learn more about profiles, visit https://aka.ms/terminal-profile-settings
|
||||||
|
"profiles":
|
||||||
|
{
|
||||||
|
"defaults":
|
||||||
|
{
|
||||||
|
// Put settings here that you want to apply to all profiles.
|
||||||
|
},
|
||||||
|
"list":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
// Make changes here to the powershell.exe profile.
|
||||||
|
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
|
||||||
|
"name": "Windows PowerShell",
|
||||||
|
"commandline": "powershell.exe",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Make changes here to the cmd.exe profile.
|
||||||
|
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
|
||||||
|
"name": "Command Prompt",
|
||||||
|
"commandline": "cmd.exe",
|
||||||
|
"hidden": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
|
||||||
|
"name": "Azure Cloud Shell",
|
||||||
|
"source": "Windows.Terminal.Azure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"guid": "{2ece5bfe-50ed-5f3a-ab87-5cd4baafed2b}",
|
||||||
|
"name": "Git Bash",
|
||||||
|
"source": "Git"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Add custom color schemes to this array.
|
||||||
|
// To learn more about color schemes, visit https://aka.ms/terminal-color-schemes
|
||||||
|
"schemes": [],
|
||||||
|
|
||||||
|
// Add custom actions and keybindings to this array.
|
||||||
|
// To unbind a key combination from your defaults.json, set the command to "unbound".
|
||||||
|
// To learn more about actions and keybindings, visit https://aka.ms/terminal-keybindings
|
||||||
|
"actions":
|
||||||
|
[
|
||||||
|
// Copy and paste are bound to Ctrl+Shift+C and Ctrl+Shift+V in your defaults.json.
|
||||||
|
// These two lines additionally bind them to Ctrl+C and Ctrl+V.
|
||||||
|
// To learn more about selection, visit https://aka.ms/terminal-selection
|
||||||
|
{ "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
|
||||||
|
{ "command": "paste", "keys": "ctrl+v" },
|
||||||
|
|
||||||
|
// Press Ctrl+Shift+F to open the search box
|
||||||
|
{ "command": "find", "keys": "ctrl+shift+f" },
|
||||||
|
|
||||||
|
// Press Alt+Shift+D to open a new pane.
|
||||||
|
// - "split": "auto" makes this pane open in the direction that provides the most surface area.
|
||||||
|
// - "splitMode": "duplicate" makes the new pane use the focused pane's profile.
|
||||||
|
// To learn more about panes, visit https://aka.ms/terminal-panes
|
||||||
|
{ "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+shift+d" }
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers
|
||||||
|
{
|
||||||
|
// Application Activation Manager Class
|
||||||
|
[ComImport]
|
||||||
|
[Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")]
|
||||||
|
public class ApplicationActivationManager : IApplicationActivationManager
|
||||||
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/]
|
||||||
|
public extern IntPtr ActivateApplication([In] string appUserModelId, [In] string arguments, [In] ActivateOptions options, [Out] out uint processId);
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||||
|
public extern IntPtr ActivateForFile([In] string appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] string verb, [Out] out uint processId);
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
|
||||||
|
public extern IntPtr ActivateForProtocol([In] string appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out uint processId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers
|
||||||
|
{
|
||||||
|
// Reference : https://github.com/MicrosoftEdge/edge-launcher/blob/108e63df0b4cb5cd9d5e45aa7a264690851ec51d/MIcrosoftEdgeLauncherCsharp/Program.cs
|
||||||
|
[Flags]
|
||||||
|
public enum ActivateOptions
|
||||||
|
{
|
||||||
|
None = 0x00000000,
|
||||||
|
DesignMode = 0x00000001,
|
||||||
|
NoErrorUI = 0x00000002,
|
||||||
|
NoSplashScreen = 0x00000004,
|
||||||
|
}
|
||||||
|
|
||||||
|
// ApplicationActivationManager
|
||||||
|
[ComImport]
|
||||||
|
[Guid("2e941141-7f97-4756-ba1d-9decde894a3d")]
|
||||||
|
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||||
|
public interface IApplicationActivationManager
|
||||||
|
{
|
||||||
|
IntPtr ActivateApplication([In] string appUserModelId, [In] string arguments, [In] ActivateOptions options, [Out] out uint processId);
|
||||||
|
|
||||||
|
IntPtr ActivateForFile([In] string appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] string verb, [Out] out uint processId);
|
||||||
|
|
||||||
|
IntPtr ActivateForProtocol([In] string appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out uint processId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers
|
||||||
|
{
|
||||||
|
public interface ITerminalQuery
|
||||||
|
{
|
||||||
|
IEnumerable<TerminalProfile> GetProfiles();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers
|
||||||
|
{
|
||||||
|
public static class TerminalHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Return the arguments for launch Windows Terminal
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="profileName">Name of the Terminal profile</param>
|
||||||
|
/// <param name="openNewTab">Whether to launch the profile in a new tab</param>
|
||||||
|
public static string GetArguments(string profileName, bool openNewTab)
|
||||||
|
{
|
||||||
|
return openNewTab ? $"--window 0 nt --profile \"{profileName}\"" : $"--profile \"{profileName}\"";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Return a list of profiles for the Windows Terminal
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="terminal">Windows Terminal package</param>
|
||||||
|
/// <param name="settingsJson">Content of the settings JSON file of the Terminal</param>
|
||||||
|
public static List<TerminalProfile> ParseSettings(TerminalPackage terminal, string settingsJson)
|
||||||
|
{
|
||||||
|
var profiles = new List<TerminalProfile>();
|
||||||
|
|
||||||
|
var options = new JsonDocumentOptions
|
||||||
|
{
|
||||||
|
CommentHandling = JsonCommentHandling.Skip,
|
||||||
|
};
|
||||||
|
|
||||||
|
var json = JsonDocument.Parse(settingsJson, options);
|
||||||
|
|
||||||
|
json.RootElement.TryGetProperty("profiles", out JsonElement profilesElement);
|
||||||
|
if (profilesElement.ValueKind != JsonValueKind.Object)
|
||||||
|
{
|
||||||
|
return profiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
profilesElement.TryGetProperty("list", out JsonElement profilesList);
|
||||||
|
if (profilesList.ValueKind != JsonValueKind.Array)
|
||||||
|
{
|
||||||
|
return profiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var profile in profilesList.EnumerateArray())
|
||||||
|
{
|
||||||
|
profiles.Add(ParseProfile(terminal, profile));
|
||||||
|
}
|
||||||
|
|
||||||
|
return profiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Return a profile for the Windows Terminal
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="terminal">Windows Terminal package</param>
|
||||||
|
/// <param name="profileElement">Profile from the settings JSON file</param>
|
||||||
|
public static TerminalProfile ParseProfile(TerminalPackage terminal, JsonElement profileElement)
|
||||||
|
{
|
||||||
|
profileElement.TryGetProperty("name", out JsonElement nameElement);
|
||||||
|
var name = nameElement.ValueKind == JsonValueKind.String ? nameElement.GetString() : null;
|
||||||
|
|
||||||
|
profileElement.TryGetProperty("hidden", out JsonElement hiddenElement);
|
||||||
|
var hidden = (hiddenElement.ValueKind == JsonValueKind.False || hiddenElement.ValueKind == JsonValueKind.True) && hiddenElement.GetBoolean();
|
||||||
|
|
||||||
|
profileElement.TryGetProperty("guid", out JsonElement guidElement);
|
||||||
|
var guid = guidElement.ValueKind == JsonValueKind.String ? Guid.Parse(guidElement.GetString()) : null as Guid?;
|
||||||
|
|
||||||
|
return new TerminalProfile(terminal, name, guid, hidden);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Principal;
|
||||||
|
using Windows.Management.Deployment;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers
|
||||||
|
{
|
||||||
|
public class TerminalQuery : ITerminalQuery
|
||||||
|
{
|
||||||
|
private readonly PackageManager _packageManager;
|
||||||
|
|
||||||
|
private static ReadOnlyCollection<string> Packages => new List<string>
|
||||||
|
{
|
||||||
|
"Microsoft.WindowsTerminal",
|
||||||
|
"Microsoft.WindowsTerminalPreview",
|
||||||
|
}.AsReadOnly();
|
||||||
|
|
||||||
|
private IEnumerable<TerminalPackage> Terminals => GetTerminals();
|
||||||
|
|
||||||
|
public TerminalQuery()
|
||||||
|
{
|
||||||
|
_packageManager = new PackageManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<TerminalProfile> GetProfiles()
|
||||||
|
{
|
||||||
|
var profiles = new List<TerminalProfile>();
|
||||||
|
|
||||||
|
foreach (var terminal in Terminals)
|
||||||
|
{
|
||||||
|
if (!File.Exists(terminal.SettingsPath))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var settingsJson = File.ReadAllText(terminal.SettingsPath);
|
||||||
|
profiles.AddRange(TerminalHelper.ParseSettings(terminal, settingsJson));
|
||||||
|
}
|
||||||
|
|
||||||
|
return profiles.OrderBy(p => p.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<TerminalPackage> GetTerminals()
|
||||||
|
{
|
||||||
|
var user = WindowsIdentity.GetCurrent().User;
|
||||||
|
var localAppDataPath = Environment.GetEnvironmentVariable("LOCALAPPDATA");
|
||||||
|
|
||||||
|
foreach (var p in _packageManager.FindPackagesForUser(user.Value).Where(p => Packages.Contains(p.Id.Name)))
|
||||||
|
{
|
||||||
|
var aumid = p.GetAppListEntries().Single().AppUserModelId;
|
||||||
|
var version = new Version(p.Id.Version.Major, p.Id.Version.Minor, p.Id.Version.Build, p.Id.Version.Revision);
|
||||||
|
var settingsPath = Path.Combine(localAppDataPath, "Packages", p.Id.FamilyName, "LocalState", "settings.json");
|
||||||
|
yield return new TerminalPackage(aumid, version, p.DisplayName, settingsPath, p.Logo.LocalPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 648 B |
Binary file not shown.
|
After Width: | Height: | Size: 603 B |
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"Projects": [
|
||||||
|
{
|
||||||
|
"LanguageSet": "Azure_Languages",
|
||||||
|
"LocItems": [
|
||||||
|
{
|
||||||
|
"SourceFile": "src\\modules\\launcher\\Plugins\\Microsoft.PowerToys.Run.Plugin.WindowsTerminal\\Properties\\Resources.resx",
|
||||||
|
"CopyOption": "LangIDOnName",
|
||||||
|
"OutputPath": "src\\modules\\launcher\\Plugins\\Microsoft.PowerToys.Run.Plugin.WindowsTerminal\\Properties"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Helpers;
|
||||||
|
using Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Properties;
|
||||||
|
using Microsoft.PowerToys.Settings.UI.Library;
|
||||||
|
using Wox.Infrastructure;
|
||||||
|
using Wox.Plugin;
|
||||||
|
using Wox.Plugin.Logger;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal
|
||||||
|
{
|
||||||
|
public class Main : IPlugin, IContextMenu, IPluginI18n, ISettingProvider
|
||||||
|
{
|
||||||
|
private const string OpenNewTab = nameof(OpenNewTab);
|
||||||
|
private const string ShowHiddenProfiles = nameof(ShowHiddenProfiles);
|
||||||
|
private readonly ITerminalQuery _terminalQuery = new TerminalQuery();
|
||||||
|
private PluginInitContext _context;
|
||||||
|
private bool _openNewTab;
|
||||||
|
private bool _showHiddenProfiles;
|
||||||
|
private Dictionary<string, BitmapImage> _logoCache = new Dictionary<string, BitmapImage>();
|
||||||
|
|
||||||
|
public string Name => Resources.plugin_name;
|
||||||
|
|
||||||
|
public string Description => Resources.plugin_description;
|
||||||
|
|
||||||
|
public IEnumerable<PluginAdditionalOption> AdditionalOptions => new List<PluginAdditionalOption>()
|
||||||
|
{
|
||||||
|
new PluginAdditionalOption()
|
||||||
|
{
|
||||||
|
Key = OpenNewTab,
|
||||||
|
DisplayLabel = Resources.open_new_tab,
|
||||||
|
Value = false,
|
||||||
|
},
|
||||||
|
|
||||||
|
new PluginAdditionalOption()
|
||||||
|
{
|
||||||
|
Key = ShowHiddenProfiles,
|
||||||
|
DisplayLabel = Resources.show_hidden_profiles,
|
||||||
|
Value = false,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
public void Init(PluginInitContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Result> Query(Query query)
|
||||||
|
{
|
||||||
|
var search = query?.Search ?? string.Empty;
|
||||||
|
var profiles = _terminalQuery.GetProfiles();
|
||||||
|
|
||||||
|
var result = new List<Result>();
|
||||||
|
|
||||||
|
foreach (var profile in profiles)
|
||||||
|
{
|
||||||
|
if (profile.Hidden && !_showHiddenProfiles)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Action keyword only or search query match
|
||||||
|
if ((!string.IsNullOrWhiteSpace(query.ActionKeyword) && string.IsNullOrWhiteSpace(search)) || StringMatcher.FuzzySearch(search, profile.Name).Success)
|
||||||
|
{
|
||||||
|
result.Add(new Result
|
||||||
|
{
|
||||||
|
Title = profile.Name,
|
||||||
|
SubTitle = profile.Terminal.DisplayName,
|
||||||
|
Icon = () => GetLogo(profile.Terminal),
|
||||||
|
Action = _ =>
|
||||||
|
{
|
||||||
|
Launch(profile.Terminal.AppUserModelId, profile.Name);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
ContextData = profile,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
|
||||||
|
{
|
||||||
|
if (!(selectedResult?.ContextData is TerminalProfile))
|
||||||
|
{
|
||||||
|
return new List<ContextMenuResult>();
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = new List<ContextMenuResult>();
|
||||||
|
|
||||||
|
if (selectedResult.ContextData is TerminalProfile profile)
|
||||||
|
{
|
||||||
|
result.Add(new ContextMenuResult
|
||||||
|
{
|
||||||
|
Title = Resources.run_as_administrator,
|
||||||
|
Glyph = "\xE7EF",
|
||||||
|
FontFamily = "Segoe MDL2 Assets",
|
||||||
|
AcceleratorKey = Key.Enter,
|
||||||
|
AcceleratorModifiers = ModifierKeys.Control | ModifierKeys.Shift,
|
||||||
|
Action = _ =>
|
||||||
|
{
|
||||||
|
LaunchElevated(profile.Terminal.AppUserModelId, profile.Name);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetTranslatedPluginTitle()
|
||||||
|
{
|
||||||
|
return Resources.plugin_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetTranslatedPluginDescription()
|
||||||
|
{
|
||||||
|
return Resources.plugin_description;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Launch(string id, string profile)
|
||||||
|
{
|
||||||
|
var appManager = new ApplicationActivationManager();
|
||||||
|
const ActivateOptions noFlags = ActivateOptions.None;
|
||||||
|
var queryArguments = TerminalHelper.GetArguments(profile, _openNewTab);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
appManager.ActivateApplication(id, queryArguments, noFlags, out var unusedPid);
|
||||||
|
}
|
||||||
|
#pragma warning disable CA1031 // Do not catch general exception types
|
||||||
|
catch (Exception ex)
|
||||||
|
#pragma warning restore CA1031 // Do not catch general exception types
|
||||||
|
{
|
||||||
|
var name = "Plugin: " + Resources.plugin_name;
|
||||||
|
var message = Resources.run_terminal_failed;
|
||||||
|
Log.Exception("Failed to open Windows Terminal", ex, GetType());
|
||||||
|
_context.API.ShowMsg(name, message, string.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LaunchElevated(string id, string profile)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string path = "shell:AppsFolder\\" + id;
|
||||||
|
Helper.OpenInShell(path, TerminalHelper.GetArguments(profile, _openNewTab), runAsAdmin: true);
|
||||||
|
}
|
||||||
|
#pragma warning disable CA1031 // Do not catch general exception types
|
||||||
|
catch (Exception ex)
|
||||||
|
#pragma warning restore CA1031 // Do not catch general exception types
|
||||||
|
{
|
||||||
|
var name = "Plugin: " + Resources.plugin_name;
|
||||||
|
var message = Resources.run_terminal_failed;
|
||||||
|
Log.Exception("Failed to open Windows Terminal", ex, GetType());
|
||||||
|
_context.API.ShowMsg(name, message, string.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Control CreateSettingPanel()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateSettings(PowerLauncherPluginSettings settings)
|
||||||
|
{
|
||||||
|
var openNewTab = false;
|
||||||
|
var showHiddenProfiles = false;
|
||||||
|
|
||||||
|
if (settings != null && settings.AdditionalOptions != null)
|
||||||
|
{
|
||||||
|
openNewTab = settings.AdditionalOptions.FirstOrDefault(x => x.Key == OpenNewTab)?.Value ?? false;
|
||||||
|
showHiddenProfiles = settings.AdditionalOptions.FirstOrDefault(x => x.Key == ShowHiddenProfiles)?.Value ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_openNewTab = openNewTab;
|
||||||
|
_showHiddenProfiles = showHiddenProfiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ImageSource GetLogo(TerminalPackage terminal)
|
||||||
|
{
|
||||||
|
var aumid = terminal.AppUserModelId;
|
||||||
|
|
||||||
|
if (!_logoCache.ContainsKey(aumid))
|
||||||
|
{
|
||||||
|
_logoCache.Add(aumid, terminal.GetLogo());
|
||||||
|
}
|
||||||
|
|
||||||
|
return _logoCache[aumid];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<Import Project="..\..\..\..\Version.props" />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
<RootNamespace>Microsoft.PowerToys.Run.Plugin.WindowsTerminal</RootNamespace>
|
||||||
|
<AssemblyName>Microsoft.PowerToys.Run.Plugin.WindowsTerminal</AssemblyName>
|
||||||
|
<Version>$(Version).0</Version>
|
||||||
|
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||||
|
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
|
||||||
|
<Platforms>x64</Platforms>
|
||||||
|
<NeutralLanguage>en-US</NeutralLanguage>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<OutputPath>..\..\..\..\..\x64\Debug\modules\launcher\Plugins\WindowsTerminal\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<LangVersion>8.0</LangVersion>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<OutputPath>..\..\..\..\..\x64\Release\modules\launcher\Plugins\WindowsTerminal\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<LangVersion>8.0</LangVersion>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Wox.Infrastructure\Wox.Infrastructure.csproj" />
|
||||||
|
<ProjectReference Include="..\..\Wox.Plugin\Wox.Plugin.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="plugin.json">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\..\..\..\codeAnalysis\GlobalSuppressions.cs">
|
||||||
|
<Link>GlobalSuppressions.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<AdditionalFiles Include="..\..\..\..\codeAnalysis\StyleCop.json">
|
||||||
|
<Link>StyleCop.json</Link>
|
||||||
|
</AdditionalFiles>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="StyleCop.Analyzers">
|
||||||
|
<Version>1.1.118</Version>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Properties\Resources.Designer.cs">
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Update="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Images\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="Images\WindowsTerminal.dark.png">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="Images\WindowsTerminal.light.png">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.PowerToys.Run.Plugin.WindowsTerminal.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Open profiles in a new tab.
|
||||||
|
/// </summary>
|
||||||
|
internal static string open_new_tab {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("open_new_tab", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Open Windows Terminal profiles..
|
||||||
|
/// </summary>
|
||||||
|
internal static string plugin_description {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("plugin_description", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Windows Terminal.
|
||||||
|
/// </summary>
|
||||||
|
internal static string plugin_name {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("plugin_name", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Run as administrator (Ctrl+Shift+Enter).
|
||||||
|
/// </summary>
|
||||||
|
internal static string run_as_administrator {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("run_as_administrator", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Failed to open Windows Terminal.
|
||||||
|
/// </summary>
|
||||||
|
internal static string run_terminal_failed {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("run_terminal_failed", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Show hidden profiles.
|
||||||
|
/// </summary>
|
||||||
|
internal static string show_hidden_profiles {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("show_hidden_profiles", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="open_new_tab" xml:space="preserve">
|
||||||
|
<value>Open profiles in a new tab</value>
|
||||||
|
</data>
|
||||||
|
<data name="plugin_description" xml:space="preserve">
|
||||||
|
<value>Open Windows Terminal profiles.</value>
|
||||||
|
</data>
|
||||||
|
<data name="plugin_name" xml:space="preserve">
|
||||||
|
<value>Windows Terminal</value>
|
||||||
|
</data>
|
||||||
|
<data name="run_as_administrator" xml:space="preserve">
|
||||||
|
<value>Run as administrator (Ctrl+Shift+Enter)</value>
|
||||||
|
</data>
|
||||||
|
<data name="run_terminal_failed" xml:space="preserve">
|
||||||
|
<value>Failed to open Windows Terminal</value>
|
||||||
|
</data>
|
||||||
|
<data name="show_hidden_profiles" xml:space="preserve">
|
||||||
|
<value>Show hidden profiles</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using Wox.Infrastructure.Image;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal
|
||||||
|
{
|
||||||
|
public class TerminalPackage
|
||||||
|
{
|
||||||
|
public string AppUserModelId { get; }
|
||||||
|
|
||||||
|
public Version Version { get; }
|
||||||
|
|
||||||
|
public string DisplayName { get; }
|
||||||
|
|
||||||
|
public string SettingsPath { get; }
|
||||||
|
|
||||||
|
public string LogoPath { get; }
|
||||||
|
|
||||||
|
public TerminalPackage(string appUserModelId, Version version, string displayName, string settingsPath, string logoPath)
|
||||||
|
{
|
||||||
|
AppUserModelId = appUserModelId;
|
||||||
|
Version = version;
|
||||||
|
DisplayName = displayName;
|
||||||
|
SettingsPath = settingsPath;
|
||||||
|
LogoPath = logoPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BitmapImage GetLogo()
|
||||||
|
{
|
||||||
|
if (File.Exists(LogoPath))
|
||||||
|
{
|
||||||
|
var memoryStream = new MemoryStream();
|
||||||
|
using (var fileStream = File.OpenRead(LogoPath))
|
||||||
|
{
|
||||||
|
fileStream.CopyTo(memoryStream);
|
||||||
|
memoryStream.Position = 0;
|
||||||
|
|
||||||
|
var image = new BitmapImage();
|
||||||
|
image.BeginInit();
|
||||||
|
image.StreamSource = memoryStream;
|
||||||
|
image.EndInit();
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new BitmapImage(new Uri(ImageLoader.ErrorIconPath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Run.Plugin.WindowsTerminal
|
||||||
|
{
|
||||||
|
public class TerminalProfile
|
||||||
|
{
|
||||||
|
public TerminalPackage Terminal { get; }
|
||||||
|
|
||||||
|
public string Name { get; }
|
||||||
|
|
||||||
|
public Guid? Identifier { get; }
|
||||||
|
|
||||||
|
public bool Hidden { get; }
|
||||||
|
|
||||||
|
public TerminalProfile(TerminalPackage terminal, string name, Guid? identifier, bool hidden)
|
||||||
|
{
|
||||||
|
Terminal = terminal;
|
||||||
|
Name = name;
|
||||||
|
Identifier = identifier;
|
||||||
|
Hidden = hidden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"ID": "F59BA85006B14389A72A0EA756695F1D",
|
||||||
|
"Disabled": true,
|
||||||
|
"ActionKeyword": "_",
|
||||||
|
"IsGlobal": true,
|
||||||
|
"Name": "Windows Terminal",
|
||||||
|
"Author": "davidegiacometti",
|
||||||
|
"Version": "1.0.0",
|
||||||
|
"Language": "csharp",
|
||||||
|
"Website": "https://aka.ms/powertoys",
|
||||||
|
"ExecuteFileName": "Microsoft.PowerToys.Run.Plugin.WindowsTerminal.dll",
|
||||||
|
"IcoPathDark": "Images\\WindowsTerminal.dark.png",
|
||||||
|
"IcoPathLight": "Images\\WindowsTerminal.light.png"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user