7d503a4352
Adds a `Microsoft.Terminal.Remoting.dll` to our solution. This DLL will be responsible for all the Monarch/Peasant work that's been described in #7240 & #8135. This PR does _not_ implement the Monarch/Peasant architecture in any significant way. The goal of this PR is to just to establish the project layout, and the most basic connections. This should make reviewing the actual meat of the implementation (in a later PR) easier. It will also give us the opportunity to include some of the basic weird things we're doing (with `CoRegisterClass`) in the Terminal _now_, and get them selfhosted, before building on them too much. This PR does have windows registering the `Monarch` class with COM. When windows are created, they'll as the Monarch if they should create a new window or not. In this PR, the Monarch will always reply "yes, please make a new window". Similar to other projects in our solution, we're adding 3 projects here: * `Microsoft.Terminal.Remoting.lib`: the actual implementation, as a static lib. * `Microsoft.Terminal.Remoting.dll`: The implementation linked as a DLL, for use in `WindowsTerminal.exe`. * `Remoting.UnitTests.dll`: A unit test dll that links with the static lib. There are plenty of TODOs scattered about the code. Clearly, most of this isn't implemented yet, but I do have more WIP branches. I'm using [`projects/5`](https://github.com/microsoft/terminal/projects/5) as my notation for TODOs that are too small for an issue, but are part of the whole Process Model 2.0 work. ## References * #5000 - this is the process model megathread * #7240 - The process model 2.0 spec. * #8135 - the window management spec. (please review me, I have 0/3 signoffs even after the discussion we had 😢) * #8171 - the Monarch/peasant sample. (please review me, I have 1/2) ## PR Checklist * [x] Closes nothing, this is just infrastructure * [x] I work here * [x] Tests added/passed * [n/a] Requires documentation to be updated |
||
---|---|---|
.. | ||
bcx.cmd | ||
bcz.cmd | ||
bx.cmd | ||
bx.ps1 | ||
bz.cmd | ||
ConsoleTypes.natvis | ||
echokey.cmd | ||
Generate-CodepointWidthsFromUCD.ps1 | ||
GenerateAppxFromManifest.ps1 | ||
GenerateHeaderForJson.ps1 | ||
Get-OSSConhostLog.ps1 | ||
openbash.cmd | ||
opencon.cmd | ||
OpenConsole.psm1 | ||
openps.cmd | ||
openvt.cmd | ||
packages.config | ||
razzle.cmd | ||
README.md | ||
runformat.cmd | ||
runft.cmd | ||
runuia.cmd | ||
runut.cmd | ||
testcon.cmd | ||
tests.xml | ||
vso_ut.cmd | ||
WindbgExtension.js |
OpenConsole Tools
These are a collection of tools and scripts to make your life building the OpenConsole project easier. Many of them are designed to be functional clones of tools that we used to use when developing inside the Windows build system.
Razzle
This is a script that quickly sets up your environment variables so that these tools can run easily. It's named after another script used by Windows developers to similar effect.
- It adds msbuild to your path.
- It adds the tools directory to your path as well, so all these scripts are easily available.
- It executes
\tools\.razzlerc.cmd
to add any other personal configuration to your environment as well, or creates one if it doesn't exist. - It sets up the default build configuration to be 'Debug'. If you'd like to
manually specify a build configuration, pass the parameter
dbg
for Debug, andrel
for Release.
bcz
bcz
can quick be used to clean and build the project. By default, it builds
the %DEFAULT_CONFIGURATION%
configuration, which is Debug
if you use razzle.cmd
.
bcz dbg
can be used to manually build the Debug configuration.bcz rel
can be used to manually build the Release configuration.
opencon (and openbash, openps)
opencon
can be used to launch the last built OpenConsole binary. If given an
argument, it will try and run that program in the launched window. Otherwise it
will default to cmd.exe.
openbash
is similar, it immediately launches bash.exe (the Windows Subsystem
for Linux entrypoint) in your ~
directory.
Likewise, openps
launches powershell.
runformat
runformat
will format the c++ code to match our coding style.
testcon, runut, runft
runut
will automatically run all of the unit tests through TAEF. runft
will
run the feature tests, and testcon
runs all of them. They'll pass any
arguments through to TAEF, so you can more finely control the testing.
A recommended workflow is the following command:
bcz dbg && runut /name:*<name of test>*
Where <name of test>
is the name of the test testing the relevant feature area
you're working on. For example, if I was working on the VT Mouse input support,
I would use MouseInputTest
as that string, to isolate the mouse input tests.
If you'd like to run all the tests, just ignore the /name
param:
bcz dbg && runut
To make sure your code is ready for a pull request, run the build, then launch the built console, then run the tests in it. The built console will inherit all of the razzle environment, so you can immediately start using the macros:
bcz
opencon
testcon
(in the new console window)runformat
If they all come out green, then you're ready for a pull request!