Skip to content

Commit b0f9b48

Browse files
authored
Merge pull request #1205 from Flow-Launcher/fix_cmd_command_with_blank
Fix shell cmd command with quote and space
2 parents 0805e85 + dba03c9 commit b0f9b48

File tree

1 file changed

+33
-21
lines changed
  • Plugins/Flow.Launcher.Plugin.Shell

1 file changed

+33
-21
lines changed

Plugins/Flow.Launcher.Plugin.Shell/Main.cs

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -61,24 +61,26 @@ public List<Result> Query(Query query)
6161

6262
if (basedir != null)
6363
{
64-
var autocomplete = Directory.GetFileSystemEntries(basedir).
65-
Select(o => dir + Path.GetFileName(o)).
66-
Where(o => o.StartsWith(cmd, StringComparison.OrdinalIgnoreCase) &&
67-
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase)) &&
68-
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase))).ToList();
64+
var autocomplete =
65+
Directory.GetFileSystemEntries(basedir)
66+
.Select(o => dir + Path.GetFileName(o))
67+
.Where(o => o.StartsWith(cmd, StringComparison.OrdinalIgnoreCase) &&
68+
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase)) &&
69+
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase))).ToList();
70+
6971
autocomplete.Sort();
72+
7073
results.AddRange(autocomplete.ConvertAll(m => new Result
7174
{
7275
Title = m,
7376
IcoPath = Image,
7477
Action = c =>
7578
{
76-
var runAsAdministrator = (
79+
var runAsAdministrator =
7780
c.SpecialKeyState.CtrlPressed &&
7881
c.SpecialKeyState.ShiftPressed &&
7982
!c.SpecialKeyState.AltPressed &&
80-
!c.SpecialKeyState.WinPressed
81-
);
83+
!c.SpecialKeyState.WinPressed;
8284

8385
Execute(Process.Start, PrepareProcessStartInfo(m, runAsAdministrator));
8486
return true;
@@ -113,12 +115,11 @@ private List<Result> GetHistoryCmds(string cmd, Result result)
113115
IcoPath = Image,
114116
Action = c =>
115117
{
116-
var runAsAdministrator = (
118+
var runAsAdministrator =
117119
c.SpecialKeyState.CtrlPressed &&
118120
c.SpecialKeyState.ShiftPressed &&
119121
!c.SpecialKeyState.AltPressed &&
120-
!c.SpecialKeyState.WinPressed
121-
);
122+
!c.SpecialKeyState.WinPressed;
122123

123124
Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator));
124125
return true;
@@ -143,12 +144,11 @@ private Result GetCurrentCmd(string cmd)
143144
IcoPath = Image,
144145
Action = c =>
145146
{
146-
var runAsAdministrator = (
147+
var runAsAdministrator =
147148
c.SpecialKeyState.CtrlPressed &&
148149
c.SpecialKeyState.ShiftPressed &&
149150
!c.SpecialKeyState.AltPressed &&
150-
!c.SpecialKeyState.WinPressed
151-
);
151+
!c.SpecialKeyState.WinPressed;
152152

153153
Execute(Process.Start, PrepareProcessStartInfo(cmd, runAsAdministrator));
154154
return true;
@@ -168,12 +168,11 @@ private List<Result> ResultsFromlHistory()
168168
IcoPath = Image,
169169
Action = c =>
170170
{
171-
var runAsAdministrator = (
171+
var runAsAdministrator =
172172
c.SpecialKeyState.CtrlPressed &&
173173
c.SpecialKeyState.ShiftPressed &&
174174
!c.SpecialKeyState.AltPressed &&
175-
!c.SpecialKeyState.WinPressed
176-
);
175+
!c.SpecialKeyState.WinPressed;
177176

178177
Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator));
179178
return true;
@@ -203,8 +202,21 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin
203202
case Shell.Cmd:
204203
{
205204
info.FileName = "cmd.exe";
206-
info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c");
207-
info.ArgumentList.Add(command);
205+
info.Arguments = $"{(_settings.LeaveShellOpen ? "/k" : "/c")} {command}";
206+
207+
//// Use info.Arguments instead of info.ArgumentList to enable users better control over the arguments they are writing.
208+
//// Previous code using ArgumentList, commands needed to be seperated correctly:
209+
//// Incorrect:
210+
// info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c");
211+
// info.ArgumentList.Add(command); //<== info.ArgumentList.Add("mkdir \"c:\\test new\"");
212+
213+
//// Correct version should be:
214+
//info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c");
215+
//info.ArgumentList.Add("mkdir");
216+
//info.ArgumentList.Add(@"c:\test new");
217+
218+
//https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.argumentlist?view=net-6.0#remarks
219+
208220
break;
209221
}
210222

@@ -366,7 +378,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
366378
Title = context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_different_user"),
367379
Action = c =>
368380
{
369-
Task.Run(() =>Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title)));
381+
Task.Run(() => Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title)));
370382
return true;
371383
},
372384
IcoPath = "Images/user.png"
@@ -396,4 +408,4 @@ public List<Result> LoadContextMenus(Result selectedResult)
396408
return resultlist;
397409
}
398410
}
399-
}
411+
}

0 commit comments

Comments
 (0)