From e4e1b5b43d93060291b1e3a3181530333e30c828 Mon Sep 17 00:00:00 2001 From: Heiko <61519853+htcfreek@users.noreply.github.com> Date: Mon, 13 Feb 2023 20:15:25 +0100 Subject: [PATCH] [PTRun][Program]Run commands: Support for MSC and CPL (#23668) * code changes * spell fix * dev docs * update tests * Code improvement --- doc/devdocs/modules/launcher/plugins/program.md | 3 +++ .../Programs/Win32Tests.cs | 17 ++++++++++++++++- .../ProgramPluginSettings.cs | 2 ++ .../Programs/Win32Program.cs | 10 ++++++++-- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/doc/devdocs/modules/launcher/plugins/program.md b/doc/devdocs/modules/launcher/plugins/program.md index 1e99e1d44d..1c3d86ba07 100644 --- a/doc/devdocs/modules/launcher/plugins/program.md +++ b/doc/devdocs/modules/launcher/plugins/program.md @@ -42,3 +42,6 @@ There are broadly two different categories of applications: ### Additional Notes - Arguments can be provided to the program plugin by entering them after `--` (a double dash). - The localization is done using the `Localization Helper`from `Wox.Plugin.Common` hosted at runtime in a variable of plugin's main class. +- The `Run commands` differ in two points from the normal `Win32Programs`: + - The result title contains the executable type. + - The file types `.cpl` and `.msc` are supported too. diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Programs/Win32Tests.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Programs/Win32Tests.cs index 0a543b3e7d..8aaa3dd949 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Programs/Win32Tests.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Program.UnitTests/Programs/Win32Tests.cs @@ -592,12 +592,27 @@ namespace Microsoft.Plugin.Program.UnitTests.Programs var mock = new Mock(); StringMatcher.Instance = new StringMatcher(); + // Act + var result = _chrome.Result("chrome", string.Empty, mock.Object); + + // Assert + // Using Ordinal since this is used internally + Assert.IsTrue(result.Title.Equals(_chrome.Name, StringComparison.Ordinal)); + Assert.IsFalse(result.Title.Equals(_chrome.Description, StringComparison.Ordinal)); + } + + [TestMethod] + public void RunCommandsShouldSetExecutableNameAsTitleWhileCreatingResult() + { + var mock = new Mock(); + StringMatcher.Instance = new StringMatcher(); + // Act var result = _cmderRunCommand.Result("cmder", string.Empty, mock.Object); // Assert // Using Ordinal since this is used internally - Assert.IsTrue(result.Title.Equals(_cmderRunCommand.Name, StringComparison.Ordinal)); + Assert.IsTrue(result.Title.Equals(_cmderRunCommand.ExecutableName, StringComparison.Ordinal)); Assert.IsFalse(result.Title.Equals(_cmderRunCommand.Description, StringComparison.Ordinal)); } diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramPluginSettings.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramPluginSettings.cs index 7fab608c86..d78e758b1e 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramPluginSettings.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/ProgramPluginSettings.cs @@ -17,6 +17,8 @@ namespace Microsoft.Plugin.Program public List ProgramSuffixes { get; set; } = new List() { "bat", "appref-ms", "exe", "lnk", "url" }; + public List RunCommandSuffixes { get; set; } = new List() { "bat", "appref-ms", "exe", "lnk", "url", "cpl", "msc" }; + public bool EnableStartMenuSource { get; set; } = true; public bool EnableDesktopSource { get; set; } = true; diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs index b6f76cf3ec..3faa318a1f 100644 --- a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs +++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs @@ -91,7 +91,7 @@ namespace Microsoft.Plugin.Program.Programs private const string ShortcutExtension = "lnk"; private const string ApplicationReferenceExtension = "appref-ms"; private const string InternetShortcutExtension = "url"; - private static readonly HashSet ExecutableApplicationExtensions = new HashSet(StringComparer.OrdinalIgnoreCase) { "exe", "bat", "bin", "com", "msc", "msi", "cmd", "ps1", "job", "msp", "mst", "sct", "ws", "wsh", "wsf" }; + private static readonly HashSet ExecutableApplicationExtensions = new HashSet(StringComparer.OrdinalIgnoreCase) { "exe", "bat", "bin", "com", "cpl", "msc", "msi", "cmd", "ps1", "job", "msp", "mst", "sct", "ws", "wsh", "wsf" }; private const string ProxyWebApp = "_proxy.exe"; private const string AppIdArgument = "--app-id"; @@ -255,6 +255,12 @@ namespace Microsoft.Plugin.Program.Programs }, }; + // Adjust title of RunCommand result + if (AppType == ApplicationType.RunCommand) + { + result.Title = ExecutableName; + } + result.TitleHighlightData = StringMatcher.FuzzySearch(query, result.Title).MatchData; // Using CurrentCulture since this is user facing @@ -1005,7 +1011,7 @@ namespace Microsoft.Plugin.Program.Programs // Run commands are always set as AppType "RunCommand" var runCommandSources = new (bool IsEnabled, Func> GetPaths)[] { - (settings.EnablePathEnvironmentVariableSource, () => PathEnvironmentProgramPaths(settings.ProgramSuffixes)), + (settings.EnablePathEnvironmentVariableSource, () => PathEnvironmentProgramPaths(settings.RunCommandSuffixes)), }; var disabledProgramsList = settings.DisabledProgramSources;