Skip to content

Commit b7bebc8

Browse files
committed
use old Arguments instead of ArgumentList to prevent auto escape quote in commands
1 parent 15fd62a commit b7bebc8

File tree

1 file changed

+19
-16
lines changed
  • Plugins/Flow.Launcher.Plugin.Shell

1 file changed

+19
-16
lines changed

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

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,9 @@ 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 = Directory.GetFileSystemEntries(basedir).Select(o => dir + Path.GetFileName(o)).Where(o => o.StartsWith(cmd, StringComparison.OrdinalIgnoreCase) &&
65+
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase)) &&
66+
!results.Any(p => o.Equals(p.Title, StringComparison.OrdinalIgnoreCase))).ToList();
6967
autocomplete.Sort();
7068
results.AddRange(autocomplete.ConvertAll(m => new Result
7169
{
@@ -78,7 +76,7 @@ public List<Result> Query(Query query)
7876
c.SpecialKeyState.ShiftPressed &&
7977
!c.SpecialKeyState.AltPressed &&
8078
!c.SpecialKeyState.WinPressed
81-
);
79+
);
8280

8381
Execute(Process.Start, PrepareProcessStartInfo(m, runAsAdministrator));
8482
return true;
@@ -118,7 +116,7 @@ private List<Result> GetHistoryCmds(string cmd, Result result)
118116
c.SpecialKeyState.ShiftPressed &&
119117
!c.SpecialKeyState.AltPressed &&
120118
!c.SpecialKeyState.WinPressed
121-
);
119+
);
122120

123121
Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator));
124122
return true;
@@ -148,7 +146,7 @@ private Result GetCurrentCmd(string cmd)
148146
c.SpecialKeyState.ShiftPressed &&
149147
!c.SpecialKeyState.AltPressed &&
150148
!c.SpecialKeyState.WinPressed
151-
);
149+
);
152150

153151
Execute(Process.Start, PrepareProcessStartInfo(cmd, runAsAdministrator));
154152
return true;
@@ -173,7 +171,7 @@ private List<Result> ResultsFromlHistory()
173171
c.SpecialKeyState.ShiftPressed &&
174172
!c.SpecialKeyState.AltPressed &&
175173
!c.SpecialKeyState.WinPressed
176-
);
174+
);
177175

178176
Execute(Process.Start, PrepareProcessStartInfo(m.Key, runAsAdministrator));
179177
return true;
@@ -195,16 +193,18 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin
195193

196194
ProcessStartInfo info = new()
197195
{
198-
Verb = runAsAdministratorArg,
199-
WorkingDirectory = workingDirectory,
196+
Verb = runAsAdministratorArg, WorkingDirectory = workingDirectory,
200197
};
201198
switch (_settings.Shell)
202199
{
203200
case Shell.Cmd:
204201
{
205202
info.FileName = "cmd.exe";
206-
info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c");
207-
info.ArgumentList.Add(command);
203+
info.Arguments = $"{(_settings.LeaveShellOpen ? "/k" : "/c")} {command}";
204+
205+
// ArgumentList may break original shell command separation with quote.
206+
// info.ArgumentList.Add(_settings.LeaveShellOpen ? "/k" : "/c");
207+
// info.ArgumentList.Add(command);
208208
break;
209209
}
210210

@@ -226,7 +226,10 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin
226226

227227
case Shell.RunCommand:
228228
{
229-
var parts = command.Split(new[] { ' ' }, 2);
229+
var parts = command.Split(new[]
230+
{
231+
' '
232+
}, 2);
230233
if (parts.Length == 2)
231234
{
232235
var filename = parts[0];
@@ -366,7 +369,7 @@ public List<Result> LoadContextMenus(Result selectedResult)
366369
Title = context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_different_user"),
367370
Action = c =>
368371
{
369-
Task.Run(() =>Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title)));
372+
Task.Run(() => Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title)));
370373
return true;
371374
},
372375
IcoPath = "Images/user.png"
@@ -396,4 +399,4 @@ public List<Result> LoadContextMenus(Result selectedResult)
396399
return resultlist;
397400
}
398401
}
399-
}
402+
}

0 commit comments

Comments
 (0)