This PR adds some notes from #4570 to the [UsingCommandlineArguments.md](https://github.com/microsoft/terminal/blob/master/doc/user-docs/UsingCommandlineArguments.md) doc. Hopefully, this should add clarity on how to use sub-commands in the `wt` commandline from within Powershell. * [x] Closes #4570 * [x] I work here * [x] This is docs
7.6 KiB
author, created on, last updated
| author | created on | last updated |
|---|---|---|
| Mike Griese @zadjii-msft | 2020-01-16 | 2020-01-17 |
Using the wt.exe Commandline
As of #4023, the Windows Terminal now supports accepting arguments on the
commandline, to enable launching the Terminal in a non-default configuration.
This document serves as a reference for all the parameters you can currently
pass, and gives some examples of how to use the wt commandline.
NOTE: If you're running the Terminal built straight from the repo, you'll need to use
wtd.exeandwtdinstead ofwt.exeandwt.
Reference
Options
--help,-h,-?,/?,
Display the help message.
Subcommands
new-tab
new-tab [terminal_parameters]
Opens a new tab with the given customizations. On its first invocation, also
opens a new window. Subsequent new-tab commands will all open new tabs in the
same window. [1]
Parameters:
[terminal_parameters]: See [terminal_parameters].
split-pane
split-pane [-H,--horizontal|-V,--vertical] [terminal_parameters]
Creates a new pane in the currently focused tab by splitting the given pane vertically or horizontally. [1]
Parameters:
-H,--horizontal,-V,--vertical: Used to indicate which direction to split the pane.-Vis "vertically" (think[|]), and-His "horizontally" (think[-]). If omitted, defaults to "auto", which splits the current pane in whatever the larger dimension is. If both-Hand-Vare provided, defaults to vertical.[terminal_parameters]: See [terminal_parameters].
focus-tab
focus-tab [--target,-t tab-index]|[--next,-n]|[--previous,-p]
Moves focus to a given tab.
Parameters:
--target,-t tab-index: moves focus to the tab at indextab-index. If omitted, defaults to0(the first tab). Will display an error if combined with either of--nextor--previous.-n,--next: Move focus to the next tab. Will display an error if combined with either of--previousor--target.-p,--previous: Move focus to the previous tab. Will display an error if combined with either of--nextor--target.
[terminal_parameters]
Some of the preceding commands are used to create a new terminal instance.
These commands are listed above as accepting [terminal_parameters] as a
parameter. For these commands, [terminal_parameters] can be any of the
following:
[--profile,-p profile-name] [--startingDirectory,-d starting-directory] [commandline]
--profile,-p profile-name: Use the given profile to open the new tab/pane, whereprofile-nameis thenameorguidof a profile. Ifprofile-namedoes not match any profiles, uses the default.--startingDirectory,-d starting-directory: Overrides the value ofstartingDirectoryof the specified profile, to start instarting-directoryinstead.commandline: A commandline to replace the default commandline of the selected profile. If the user wants to use a;in this commandline, it should be escaped as\;.
Notes
- [1]: If you try to run a
wtcommandline while running in a Windows Terminal window, the commandline will always create a new window by default. Being able to runwtcommandlines in the current window is planned in the future - for more information, refer to #4472.
Examples
Open Windows Terminal in the current directory
wt -d .
This will launch a new Windows Terminal window in the current working directory.
It will use your default profile, but instead of using the startingDirectory
property from that it will use the current path. This is especially useful for
launching the Windows Terminal in a directory you currently have open in an
explorer.exe window.
Opening with multiple panes
If you want to open with multiple panes in the same tab all at once, you can use
the split-pane command to create new panes.
Consider the following commandline:
wt ; split-pane -p "Windows PowerShell" ; split-pane -H wsl.exe
This creates a new Windows Terminal window with one tab, and 3 panes:
wt: Creates the new tab with the default profilesplit-pane -p "Windows PowerShell": This will create a new pane, split from the parent with the default profile. This pane will open with the "Windows PowerShell" profilesplit-pane -H wsl.exe: This will create a third pane, slit horizontally from the "Windows PowerShell" pane. It will be running the default profile, and will usewsl.exeas the commandline (instead of the default profile'scommandline).
Using multiple commands from PowerShell
The Windows Terminal uses the semicolon character ; as a delimiter for
separating subcommands in the wt commandline. Unfortunately, powershell also
uses ; as a command separator. To work around this you can use the following
tricks to help run multiple wt sub commands from powershell. In all the
following examples, we'll be creating a new Terminal window with three panes -
one running cmd, one with powershell, and a last one running wsl.
In each of the following examples, we're using the Start-Process command to
run wt. For more information on why we're using Start-Process, see "Using
start" below.
Single quoted parameters (if you aren't calculating anything):
In this example, we'll wrap all the parameters to wt in single quotes (')
start wt 'new-tab "cmd"; split-pane -p "Windows PowerShell" ; split-pane -H wsl.exe'
Escaped quotes (if you need variables):
If you'd like to pass a value contained in a variable to the wt commandline,
instead use the following syntax:
$ThirdPane = "wsl.exe"
start wt "new-tab cmd; split-pane -p `"Windows PowerShell`" ; split-pane -H $ThirdPane"
Note the usage of ` to escape the double-quotes (") around "Windows
Powershell" in the -p parameter to the split-pane sub-command.
Using start
All the above examples explicitly used start to launch the Terminal.
In the following examples, we're going to not use start to run the
commandline. Instead, we'll try two other methods of escaping the commandline:
- Only escaping the semicolons so that
powershellwill ignore them and pass them straight towt. - Using
--%, so powershell will treat the rest of the commandline as arguments to the application.
wt new-tab "cmd" `; split-pane -p "Windows PowerShell" `; split-pane -H wsl.exe
wt --% new-tab cmd ; split-pane -p "Windows PowerShell" ; split-pane -H wsl.exe
In both these examples, the newly created Windows Terminal window will create the window by correctly parsing all the provided commandline arguments.
However, these methods are not recommended currently, as Powershell will wait
for the newly-created Terminal window to be closed before returning control to
Powershell. By default, Powershell will always wait for Windows Store
applications (like the Windows Terminal) to close before returning to the
prompt. Note that this is different than the behavior of cmd, which will return
to the prompt immediately. See
Powershell/PowerShell#9970
for more details on this bug.