From f708ad9ffdb823282e522b31608289e68beefcd2 Mon Sep 17 00:00:00 2001 From: Azakidev Date: Tue, 4 Feb 2025 23:18:21 +0100 Subject: [PATCH 1/5] Add Windows Terminal to Shell Plugin --- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 27 +++++++++++++++++++ .../Flow.Launcher.Plugin.Shell/Settings.cs | 2 ++ .../ShellSetting.xaml | 4 ++- .../ShellSetting.xaml.cs | 4 +++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index 921c6bc2169..a192b890046 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -279,6 +279,33 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin break; } + case Shell.TerminalPWSH: + { + info.filename = "wt.exe" + info.ArgumentList.Add("pwsh"); + if (_settings.LeaveShellOpen) + { + info.ArgumentList.Add("-NoExit"); + } + info.ArgumentList.Add("-Command"); + info.ArgumentList.Add(command); + break; + } + case Shell.TerminalCMD: + { + info.filename = "wt.exe" + info.ArgumentList.Add("cmd"); + if (_settings.LeaveShellOpen) + { + info.ArgumentList.Add("/k"); + } + else + { + info.ArgumentList.Add("/c"); + } + info.ArgumentList.Add(command); + break; + } default: throw new NotImplementedException(); } diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs b/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs index 6f47d5d17d9..75cc56618bb 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs @@ -39,5 +39,7 @@ public enum Shell Powershell = 1, RunCommand = 2, Pwsh = 3, + TerminalPWSH = 4, + TerminalCMD = 5, } } diff --git a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml index 2f02ef7238a..22f4ff22dd9 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml @@ -43,12 +43,14 @@ Content="{DynamicResource flowlauncher_plugin_cmd_always_run_as_administrator}" /> CMD PowerShell Pwsh + Terminal (Pwsh) + Terminal (CMD) RunCommand diff --git a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs index 24365f2aa71..e981f8b74e1 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs @@ -91,6 +91,8 @@ private void CMDSetting_OnLoaded(object sender, RoutedEventArgs re) Shell.Cmd => 0, Shell.Powershell => 1, Shell.Pwsh => 2, + Shell.TerminalPWSH = 3, + Shell.TerminalCMD = 4, _ => ShellComboBox.Items.Count - 1 }; @@ -101,6 +103,8 @@ private void CMDSetting_OnLoaded(object sender, RoutedEventArgs re) 0 => Shell.Cmd, 1 => Shell.Powershell, 2 => Shell.Pwsh, + 3 => Shell.TerminalPWSH, + 4 => Shell.TerminalCMD, _ => Shell.RunCommand }; LeaveShellOpen.IsEnabled = _settings.Shell != Shell.RunCommand; From ff2f0c375cd90ff721739cdc68e406b4ecdae4d3 Mon Sep 17 00:00:00 2001 From: Azakidev Date: Tue, 4 Feb 2025 23:39:29 +0100 Subject: [PATCH 2/5] Fix typos --- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 4 ++-- Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index a192b890046..60c8ba1a822 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -281,7 +281,7 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin } case Shell.TerminalPWSH: { - info.filename = "wt.exe" + info.filename = "wt.exe"; info.ArgumentList.Add("pwsh"); if (_settings.LeaveShellOpen) { @@ -293,7 +293,7 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin } case Shell.TerminalCMD: { - info.filename = "wt.exe" + info.filename = "wt.exe"; info.ArgumentList.Add("cmd"); if (_settings.LeaveShellOpen) { diff --git a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs index e981f8b74e1..eaac8731a79 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml.cs @@ -91,8 +91,8 @@ private void CMDSetting_OnLoaded(object sender, RoutedEventArgs re) Shell.Cmd => 0, Shell.Powershell => 1, Shell.Pwsh => 2, - Shell.TerminalPWSH = 3, - Shell.TerminalCMD = 4, + Shell.TerminalPWSH => 3, + Shell.TerminalCMD => 4, _ => ShellComboBox.Items.Count - 1 }; From 3596a77b343bd0a0332a7cde43228bb9affcaaa3 Mon Sep 17 00:00:00 2001 From: Azakidev Date: Tue, 4 Feb 2025 23:54:04 +0100 Subject: [PATCH 3/5] Fix the rest of my mistakes --- Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 4 ++-- Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index 60c8ba1a822..fc8746e41de 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -281,7 +281,7 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin } case Shell.TerminalPWSH: { - info.filename = "wt.exe"; + info.FileName = "wt.exe"; info.ArgumentList.Add("pwsh"); if (_settings.LeaveShellOpen) { @@ -293,7 +293,7 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin } case Shell.TerminalCMD: { - info.filename = "wt.exe"; + info.FileName = "wt.exe"; info.ArgumentList.Add("cmd"); if (_settings.LeaveShellOpen) { diff --git a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml index 22f4ff22dd9..7e35a872f59 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml @@ -43,7 +43,7 @@ Content="{DynamicResource flowlauncher_plugin_cmd_always_run_as_administrator}" /> CMD From 5bb3d724c026e7cc2bd8b22079cd4e94173f14e1 Mon Sep 17 00:00:00 2001 From: Azakidev Date: Thu, 6 Feb 2025 00:22:41 +0100 Subject: [PATCH 4/5] Use a checkbox instead of separate entries --- .../Languages/en.xaml | 3 +- .../Languages/es-419.xaml | 1 + .../Languages/es.xaml | 1 + Plugins/Flow.Launcher.Plugin.Shell/Main.cs | 77 ++++++++----------- .../Flow.Launcher.Plugin.Shell/Settings.cs | 4 +- .../ShellSetting.xaml | 13 +++- .../ShellSetting.xaml.cs | 16 +++- 7 files changed, 57 insertions(+), 58 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/en.xaml index 52aaf3c27f9..645a0e14fd7 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/en.xaml @@ -7,6 +7,7 @@ Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator + Use Windows Terminal Run as different user Shell Allows to execute system commands from Flow Launcher @@ -15,4 +16,4 @@ Run As Administrator Copy the command Only show number of most used commands: - \ No newline at end of file + diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml index 5ee2c43b4f2..f3ef0df0ae3 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml @@ -6,6 +6,7 @@ Press any key to close this window... No cerrar Símbolo del Sistema tras ejecutar el comando Siempre ejecutar como administrador + Ejecutar en la Terminal de Windows Ejecutar como otro usuario Shell Allows to execute system commands from Flow Launcher diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml index a3ee35ef8c4..ee3193b16e4 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml @@ -6,6 +6,7 @@ Pulsar cualquier tecla para cerrar esta ventana... No cerrar el símbolo del sistema después de la ejecución del comando Ejecutar siempre como administrador + Ejecutar en la Terminal de Windows Ejecutar como usuario diferente Terminal Permite ejecutar comandos del sistema desde Flow Launcher diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index fc8746e41de..7f1f4bd4da3 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -202,28 +202,31 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin { case Shell.Cmd: { - info.FileName = "cmd.exe"; - info.Arguments = $"{(_settings.LeaveShellOpen ? "/k" : "/c")} {command} {(_settings.CloseShellAfterPress ? $"&& echo {context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")} && pause > nul /c" : "")}"; - - //// Use info.Arguments instead of info.ArgumentList to enable users better control over the arguments they are writing. - //// Previous code using ArgumentList, commands needed to be separated correctly: - //// Incorrect: - // info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c"); - // info.ArgumentList.Add(command); //<== info.ArgumentList.Add("mkdir \"c:\\test new\""); - - //// Correct version should be: - //info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c"); - //info.ArgumentList.Add("mkdir"); - //info.ArgumentList.Add(@"c:\test new"); - - //https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.argumentlist?view=net-6.0#remarks + if (_settings.UseWindowsTerminal) + { + info.FileName = "wt.exe"; + info.ArgumentList.Add("cmd"); + } + else + { + info.FileName = "cmd.exe"; + } + info.ArgumentList.Add($"{(_settings.LeaveShellOpen ? "/k" : "/c")} {command} {(_settings.CloseShellAfterPress ? $"&& echo {context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")} && pause > nul /c" : "")}"); break; } case Shell.Powershell: { - info.FileName = "powershell.exe"; + if (_settings.UseWindowsTerminal) + { + info.FileName = "wt.exe"; + info.ArgumentList.Add("powershell"); + } + else + { + info.FileName = "powershell.exe"; + } if (_settings.LeaveShellOpen) { info.ArgumentList.Add("-NoExit"); @@ -232,21 +235,28 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin else { info.ArgumentList.Add("-Command"); - info.ArgumentList.Add($"{command}; {(_settings.CloseShellAfterPress ? $"Write-Host '{context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")}'; [System.Console]::ReadKey(); exit" : "")}"); + info.ArgumentList.Add($"{command}\\; {(_settings.CloseShellAfterPress ? $"Write-Host '{context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")}'\\; [System.Console]::ReadKey()\\; exit" : "")}"); } break; } case Shell.Pwsh: { - info.FileName = "pwsh.exe"; + if (_settings.UseWindowsTerminal) + { + info.FileName = "wt.exe"; + info.ArgumentList.Add("pwsh"); + } + else + { + info.FileName = "pwsh.exe"; + } if (_settings.LeaveShellOpen) { info.ArgumentList.Add("-NoExit"); } info.ArgumentList.Add("-Command"); - info.ArgumentList.Add($"{command}; {(_settings.CloseShellAfterPress ? $"Write-Host '{context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")}'; [System.Console]::ReadKey(); exit" : "")}"); - + info.ArgumentList.Add($"{command}\\; {(_settings.CloseShellAfterPress ? $"Write-Host '{context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close")}'\\; [System.Console]::ReadKey()\\; exit" : "")}"); break; } @@ -279,33 +289,6 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin break; } - case Shell.TerminalPWSH: - { - info.FileName = "wt.exe"; - info.ArgumentList.Add("pwsh"); - if (_settings.LeaveShellOpen) - { - info.ArgumentList.Add("-NoExit"); - } - info.ArgumentList.Add("-Command"); - info.ArgumentList.Add(command); - break; - } - case Shell.TerminalCMD: - { - info.FileName = "wt.exe"; - info.ArgumentList.Add("cmd"); - if (_settings.LeaveShellOpen) - { - info.ArgumentList.Add("/k"); - } - else - { - info.ArgumentList.Add("/c"); - } - info.ArgumentList.Add(command); - break; - } default: throw new NotImplementedException(); } diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs b/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs index 75cc56618bb..9ce2293a200 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Settings.cs @@ -14,6 +14,8 @@ public class Settings public bool RunAsAdministrator { get; set; } = true; + public bool UseWindowsTerminal { get; set; } = false; + public bool ShowOnlyMostUsedCMDs { get; set; } public int ShowOnlyMostUsedCMDsNumber { get; set; } @@ -39,7 +41,5 @@ public enum Shell Powershell = 1, RunCommand = 2, Pwsh = 3, - TerminalPWSH = 4, - TerminalCMD = 5, } } diff --git a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml index 7e35a872f59..8a3b7f11533 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/ShellSetting.xaml @@ -16,6 +16,7 @@ + + CMD PowerShell Pwsh - Terminal (Pwsh) - Terminal (CMD) RunCommand - + + { + _settings.UseWindowsTerminal = true; + }; + + UseWindowsTerminal.Unchecked += (o, e) => + { + _settings.UseWindowsTerminal = false; + }; + ReplaceWinR.Checked += (o, e) => { _settings.ReplaceWinR = true; @@ -91,8 +103,6 @@ private void CMDSetting_OnLoaded(object sender, RoutedEventArgs re) Shell.Cmd => 0, Shell.Powershell => 1, Shell.Pwsh => 2, - Shell.TerminalPWSH => 3, - Shell.TerminalCMD => 4, _ => ShellComboBox.Items.Count - 1 }; @@ -103,8 +113,6 @@ private void CMDSetting_OnLoaded(object sender, RoutedEventArgs re) 0 => Shell.Cmd, 1 => Shell.Powershell, 2 => Shell.Pwsh, - 3 => Shell.TerminalPWSH, - 4 => Shell.TerminalCMD, _ => Shell.RunCommand }; LeaveShellOpen.IsEnabled = _settings.Shell != Shell.RunCommand; From 6c081e12a4c97e432dc69d5a262f97d3010f7a14 Mon Sep 17 00:00:00 2001 From: Azakidev Date: Sat, 8 Feb 2025 19:26:36 +0100 Subject: [PATCH 5/5] Revert the translation files --- Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml | 1 - Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml | 1 - 2 files changed, 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml index f3ef0df0ae3..5ee2c43b4f2 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml @@ -6,7 +6,6 @@ Press any key to close this window... No cerrar Símbolo del Sistema tras ejecutar el comando Siempre ejecutar como administrador - Ejecutar en la Terminal de Windows Ejecutar como otro usuario Shell Allows to execute system commands from Flow Launcher diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml index ee3193b16e4..a3ee35ef8c4 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml @@ -6,7 +6,6 @@ Pulsar cualquier tecla para cerrar esta ventana... No cerrar el símbolo del sistema después de la ejecución del comando Ejecutar siempre como administrador - Ejecutar en la Terminal de Windows Ejecutar como usuario diferente Terminal Permite ejecutar comandos del sistema desde Flow Launcher