@@ -201,94 +201,101 @@ private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdmin
201
201
switch ( _settings . Shell )
202
202
{
203
203
case Shell . Cmd :
204
- {
205
- if ( _settings . UseWindowsTerminal )
206
- {
207
- info . FileName = "wt.exe" ;
208
- info . ArgumentList . Add ( "cmd" ) ;
209
- }
210
- else
211
204
{
212
- info . FileName = "cmd.exe" ;
213
- }
205
+ if ( _settings . UseWindowsTerminal )
206
+ {
207
+ info . FileName = "wt.exe" ;
208
+ info . ArgumentList . Add ( "cmd" ) ;
209
+ }
210
+ else
211
+ {
212
+ info . FileName = "cmd.exe" ;
213
+ }
214
214
215
- 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" : "" ) } ") ;
216
- break ;
217
- }
215
+ 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" : "" ) } ") ;
216
+ break ;
217
+ }
218
218
219
219
case Shell . Powershell :
220
- {
221
- if ( _settings . UseWindowsTerminal )
222
- {
223
- info . FileName = "wt.exe" ;
224
- info . ArgumentList . Add ( "powershell" ) ;
225
- }
226
- else
227
220
{
228
- info . FileName = "powershell.exe" ;
229
- }
230
- if ( _settings . LeaveShellOpen )
231
- {
232
- info . ArgumentList . Add ( "-NoExit" ) ;
233
- info . ArgumentList . Add ( command ) ;
234
- }
235
- else
236
- {
237
- info . ArgumentList . Add ( "-Command" ) ;
238
- info . ArgumentList . Add ( $ "{ command } \\ ; { ( _settings . CloseShellAfterPress ? $ "Write-Host '{ Context . API . GetTranslation ( "flowlauncher_plugin_cmd_press_any_key_to_close" ) } '\\ ; [System.Console]::ReadKey()\\ ; exit" : "" ) } ") ;
221
+ // Using just a ; doesn't work with wt, as it's used to create a new tab for the terminal window
222
+ // \\ must be escaped for it to work properly, or breaking it into multiple arguments
223
+ var addedCharacter = _settings . UseWindowsTerminal ? "\\ " : "" ;
224
+ if ( _settings . UseWindowsTerminal )
225
+ {
226
+ info . FileName = "wt.exe" ;
227
+ info . ArgumentList . Add ( "powershell" ) ;
228
+ }
229
+ else
230
+ {
231
+ info . FileName = "powershell.exe" ;
232
+ }
233
+ if ( _settings . LeaveShellOpen )
234
+ {
235
+ info . ArgumentList . Add ( "-NoExit" ) ;
236
+ info . ArgumentList . Add ( command ) ;
237
+ }
238
+ else
239
+ {
240
+ info . ArgumentList . Add ( "-Command" ) ;
241
+ info . ArgumentList . Add ( $ "{ command } { addedCharacter } ; { ( _settings . CloseShellAfterPress ? $ "Write-Host '{ Context . API . GetTranslation ( "flowlauncher_plugin_cmd_press_any_key_to_close" ) } '{ addedCharacter } ; [System.Console]::ReadKey(){ addedCharacter } ; exit" : "" ) } ") ;
242
+ }
243
+ break ;
239
244
}
240
- break ;
241
- }
242
245
243
246
case Shell . Pwsh :
244
- {
245
- if ( _settings . UseWindowsTerminal )
246
- {
247
- info . FileName = "wt.exe" ;
248
- info . ArgumentList . Add ( "pwsh" ) ;
249
- }
250
- else
251
- {
252
- info . FileName = "pwsh.exe" ;
253
- }
254
- if ( _settings . LeaveShellOpen )
255
247
{
256
- info . ArgumentList . Add ( "-NoExit" ) ;
248
+ // Using just a ; doesn't work with wt, as it's used to create a new tab for the terminal window
249
+ // \\ must be escaped for it to work properly, or breaking it into multiple arguments
250
+ var addedCharacter = _settings . UseWindowsTerminal ? "\\ " : "" ;
251
+ if ( _settings . UseWindowsTerminal )
252
+ {
253
+ info . FileName = "wt.exe" ;
254
+ info . ArgumentList . Add ( "pwsh" ) ;
255
+ }
256
+ else
257
+ {
258
+ info . FileName = "pwsh.exe" ;
259
+ }
260
+ if ( _settings . LeaveShellOpen )
261
+ {
262
+ info . ArgumentList . Add ( "-NoExit" ) ;
263
+ }
264
+ info . ArgumentList . Add ( "-Command" ) ;
265
+ info . ArgumentList . Add ( $ "{ command } { addedCharacter } ; { ( _settings . CloseShellAfterPress ? $ "Write-Host '{ Context . API . GetTranslation ( "flowlauncher_plugin_cmd_press_any_key_to_close" ) } '{ addedCharacter } ; [System.Console]::ReadKey(){ addedCharacter } ; exit" : "" ) } ") ;
266
+ break ;
257
267
}
258
- info . ArgumentList . Add ( "-Command" ) ;
259
- info . ArgumentList . Add ( $ "{ command } \\ ; { ( _settings . CloseShellAfterPress ? $ "Write-Host '{ Context . API . GetTranslation ( "flowlauncher_plugin_cmd_press_any_key_to_close" ) } '\\ ; [System.Console]::ReadKey()\\ ; exit" : "" ) } ") ;
260
- break ;
261
- }
262
268
263
269
case Shell . RunCommand :
264
- {
265
- var parts = command . Split ( new [ ]
266
- {
267
- ' '
268
- } , 2 ) ;
269
- if ( parts . Length == 2 )
270
270
{
271
- var filename = parts [ 0 ] ;
272
- if ( ExistInPath ( filename ) )
271
+ var parts = command . Split ( new [ ]
273
272
{
274
- var arguments = parts [ 1 ] ;
275
- info . FileName = filename ;
276
- info . ArgumentList . Add ( arguments ) ;
273
+ ' '
274
+ } , 2 ) ;
275
+ if ( parts . Length == 2 )
276
+ {
277
+ var filename = parts [ 0 ] ;
278
+ if ( ExistInPath ( filename ) )
279
+ {
280
+ var arguments = parts [ 1 ] ;
281
+ info . FileName = filename ;
282
+ info . ArgumentList . Add ( arguments ) ;
283
+ }
284
+ else
285
+ {
286
+ info . FileName = command ;
287
+ }
277
288
}
278
289
else
279
290
{
280
291
info . FileName = command ;
281
292
}
282
- }
283
- else
284
- {
285
- info . FileName = command ;
286
- }
287
293
288
- info . UseShellExecute = true ;
294
+ info . UseShellExecute = true ;
295
+
296
+ break ;
297
+ }
289
298
290
- break ;
291
- }
292
299
default :
293
300
throw new NotImplementedException ( ) ;
294
301
}
0 commit comments