diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index bed46425dc1..dd8a05b0f75 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -61,24 +61,26 @@ public List Query(Query query) if (basedir != null) { - var autocomplete = Directory.GetFileSystemEntries(basedir). - Select(o => dir + Path.GetFileName(o)). - Where(o => o.StartsWith(cmd, StringComparison.OrdinalIgnoreCase) && - !results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase)) && - !results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase))).ToList(); + var autocomplete = + Directory.GetFileSystemEntries(basedir) + .Select(o => dir + Path.GetFileName(o)) + .Where(o => o.StartsWith(cmd, StringComparison.OrdinalIgnoreCase) && + !results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase)) && + !results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase))).ToList(); + autocomplete.Sort(); + results.AddRange(autocomplete.ConvertAll(m => new Result { Title = m, IcoPath = Image, Action = c => { - var runAsAdministrator = ( + var runAsAdministrator = c.SpecialKeyState.CtrlPressed && c.SpecialKeyState.ShiftPressed && !c.SpecialKeyState.AltPressed && - !c.SpecialKeyState.WinPressed - ); + !c.SpecialKeyState.WinPressed; Execute(Process.Start, PrepareProcessStartInfo(m, runAsAdministrator)); return true; @@ -113,12 +115,11 @@ private List GetHistoryCmds(string cmd, Result result) IcoPath = Image, Action = c => { - var runAsAdministrator = ( + var runAsAdministrator = c.SpecialKeyState.CtrlPressed && c.SpecialKeyState.ShiftPressed && !c.SpecialKeyState.AltPressed && - !c.SpecialKeyState.WinPressed - ); + !c.SpecialKeyState.WinPressed; Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator)); return true; @@ -143,12 +144,11 @@ private Result GetCurrentCmd(string cmd) IcoPath = Image, Action = c => { - var runAsAdministrator = ( + var runAsAdministrator = c.SpecialKeyState.CtrlPressed && c.SpecialKeyState.ShiftPressed && !c.SpecialKeyState.AltPressed && - !c.SpecialKeyState.WinPressed - ); + !c.SpecialKeyState.WinPressed; Execute(Process.Start, PrepareProcessStartInfo(cmd, runAsAdministrator)); return true; @@ -168,12 +168,11 @@ private List ResultsFromlHistory() IcoPath = Image, Action = c => { - var runAsAdministrator = ( + var runAsAdministrator = c.SpecialKeyState.CtrlPressed && c.SpecialKeyState.ShiftPressed && !c.SpecialKeyState.AltPressed && - !c.SpecialKeyState.WinPressed - ); + !c.SpecialKeyState.WinPressed; Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator)); return true; @@ -203,8 +202,21 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin case Shell.Cmd: { info.FileName = "cmd.exe"; - info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c"); - info.ArgumentList.Add(command); + info.Arguments = $"{(_settings.LeaveShellOpen ? "/k" : "/c")} {command}"; + + //// 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 seperated 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 + break; } @@ -366,7 +378,7 @@ public List LoadContextMenus(Result selectedResult) Title = context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_different_user"), Action = c => { - Task.Run(() =>Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title))); + Task.Run(() => Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title))); return true; }, IcoPath = "Images/user.png" @@ -396,4 +408,4 @@ public List LoadContextMenus(Result selectedResult) return resultlist; } } -} +} \ No newline at end of file