I hope you are optimizing "performance" for latency which is the most important metric for a pleasant experience of them all [1]. The current WSL Terminal absolutely excels in that regard.
All GPU based terminal emulators I tried so far make latency worse. You have to do away with double buffering and V-Sync for small changes (or on key-press-events) to get in the sub 1ms range.
LARGE portions of the new terminal's codebase are taken straight from the code of the existing conhost.exe, so hopefully we'll keep all the performance we already had.
This is an absolutely epic post you've linked, I'll make sure to share with the team.
My biggest issue with the windows terminal is my programs pausing without me noticing. Took me forever to figure out disabling “quick edit” fixes this- apparently programs just pause completely if you have text selected? Something I keep managing to do on accident without noticing. There is almost no indication, other than the fact my loading bar froze or my program appears to be stuck.
Disabling quick edit helps, but now I can’t select text at all.
Ironically, this is actually a behavior lots of developers do want.
The new Terminal fortunately gives us much more flexibility for customizing it's behavior with user settings, so we'll be able to support either pausing output or not, depending on what the user prefers.
Having your selection reset because another line got added to the log you're tail-ing is maddening, having the output pause while you're selecting is convenient --though it probably should have a timeout or some such.
LOL yea, seems like the media embargo ended before the actual announcement.
We don't have a link to share quite yet. The first preview builds that will be available from the store will be coming soon(tm). The "now available" part seems to be referencing a part of Jha's keynote that I don't want to spoil quite yet :)
Yes it's using ConPTY as a backend, which means all Windows commandline apps will work in it out of the box.
Lol I should have updated that issue - in the most recent Windows release, we added a feature to conhost to actually disable the overscroll (under Properties... Terminal... Disable Scroll-Forward). See [this blog post](https://devblogs.microsoft.com/commandline/new-experimental-...)
It's all C++ code. We're using the relatively new XAML Islands framework to allow us to host UWP XAML content in a Win32 process. A lot of the core is C++/WinRT, which is magic that lets you call most WinRT (UWP) APIs from C++ without having to deal with CX.
I'd say the vast majority of the codebase is pure C++, without the C++/winrt magic.
The renderer we're using is DX-based, which provides a pretty substantial perf improvement over the old GDI-based one conhost uses.
C++/WinRT isn't magic, it's just C++ header files. C++ templates are turing complete, which might have something to do with the implementation I'm not sure.
(I only say this because I see a lot of undeserved bad blood around C++/CX and UWP. The legit criticisms of UWP is that if you go to the Microsoft Store and search for any app, you'll get seven apps and ebooks trying to mislead me into buying them and probably not actually the one you want - but that's not a technical issue at all.)
On the WSL2 piece, is this continuing the direction of WSL1 (syscall emulation) or going for a hypervisor based route to enable compatibility with things like Docker?
When I had to use Windows for work I would run gnome-terminal inside WSL and VcXsrv just to get a usable terminal emulator, because I use vim/tmux exclusively for writing code. So thank you for making something that will save Unix people from insanity :)
Does this new terminal support Unix/Linux style shortcuts? Another unrelated thing I’d love to see for WSL is windows-XDG integration, so for example the XDG Browser variable would be set to open the default Windows web browser.
The best part of working on the Terminal is that we can feel free to add new features to it's codebase without breaking backwards compatibility, which why such a feature was never added to conhost in the first place
- sudo for editing protected files (using nano to edit the hosts file in system32 for example)
- Good copy/paste functionality, something robust, maybe like linux with the middle click or normal shortcuts is ok
- Non blocking stdio when scrolling out of focus (not sure if this still exists)
- Split screens like iterm2 or terminator. Adjustable, with different colors for each, with the ability to save profiles so they get restored every time the terminal starts up.
- Smart notifications. If a compile/transpile finishes, our scripts could emit an event to the terminal similar to the bell, to produce a gentle notification. Right now the bell results into the taskbar item becoming orange, but it doesn't go away on its own.
- In Cmder when I have multiple split screens, they register as multiple windows, when I hover over the application on the task bar. Split screens should register as one window in my opinion.
- Right clicking on the application's taskbar icon should give an option to launch a new terminal or a new terminal from a saved profile.
Very excited about this. I've been following the terminal progress in W10 since it started. Every time something like this happens (this by far the largest), it feels like Christmas.
Not directly related to the terminal, but any updates on the file system slowness issues?
Just to clarify (because TC is shit journalism that’s muddying the console/shell distinction): this is an entirely new replacement for conhost.exe, and PowerShell is staying the same?
Will cmd, PowerShell and WSL all use the new terminal by default?
Unfortunately, registering a "default terminal application" is _not_ something that's made the cut quite yet. It's something we have plans for, but unfortunately not the dev resources for yet. So for the time being, you'll have to launch the Terminal directly to launch it, and running cmd/powershell will still open in conhost.exe.
I don't think we have our release strategy exactly set in stone yet, but I believe the plan is to have a weekly/nightly app users can download that'll be less stable, and an official app, that'll be much more stable.
That's not too bad, considering the primary use of a better terminal would be for WSL use. Can we expect the stable app to launch at the same time as weeklies/nightlies, or will there be a delay?
Probably a bit of a delay - I wouldn't expect a stable v1 of this before late this year. We have a LOT of features we want to add to the new Terminal, so it'll likely be a while before we get into the stabilization phase
Go influence UAC team please. Make sudo first class citizen and just the same as on linux (or comparable). Please let me sudo something without UAC window and new process ...
Actually we spent MONTHS debating the pros and cons of adding a sudo on Windows.
Curiously, Windows is more secure than linux because it _doesn't_ have a sudo.
In Windows, any application can set messages to another window at the same integrity level with SendMessage/PostMessage.
If you had a `sudo` on windows, you could have a medium-IL terminal window which is talking to a high-IL process (running with the hypothetical sudo), and any other medium-il process could drive the console, effectively creating an escalation of privilege attack vector.
You are answering my hopes and dreams for a Windows Terminal. The only thing I need after this is split terminals like how iTerm works (so I can have a big one, a small, thing one below it, one on the side, etc). This helps SO MUCH when doing likes like complicated deployments and I need to monitor many systems at once.
Is this open source? Is there a way for me to help contribute back? Thanks for the hard work!
I'd say if you're looking for linux commandline applications, I'd recommend the Windows Subsystem for Linux, which lets linux binaries run unmodified on Windows.
As far as package managers are concerned, I've had lots of success with Chocolatey. If developers are willing to port their commandline applications to Windows, then I'm sure they'd be welcome additions to Chocolatey
The article talks about "GPU-accelerated text rendering" - can you speak more about what this means in terms of visual performance? Also, are there plans to add subpixel antialiasing (maybe it's part of this)?
What that means is we're using DX/DWrite for text rendering. The old console used GDI to render text, and GDI's text rendering was CPU bound.
By using the GPU for text rendering, we can process more text faster on the CPU, without the rendering of the text getting in the way.
If we're not already doing subpixel AA, then I think it's certainly something we could look into. I'm not really our DX guy, but it DX supports it, I think we could use it.
1. It's actually largely based off the original terminal on Windows, conhost.exe. We were able to re-use a lot of the codebase for the core of the implementation, with a thin new UI layer. This means that enhancements to the terminal will also help enhance the inbox console.
2. I spent a LOT of time looking at using xterm.js, and eventually decided against it. The main factor was that although it would provide us a nearly complete VT implementation, it was critically tied to the JS ecosystem, and no matter how much time we spent engineering it, we'd still be coupled to having a webview render text. So we instead decided to write it in C++, which meant that we'd initially have less VT compatibility, but our perf would be better in the long run.
I just looked at the Terminus project page[0] and I'm really impressed that they seem to have run an entire linux emulator in the browser just to show off a terminal.
The design is actually super prototype-y right now. the UX team is still polishing the design, but I believe the final answer is yes, we'll be trying to be visually in-line with the new chromium-powered Edge
Honestly, I'm not sure I'm the right person to elaborate upon the extensions model. If our PM Rich shows up in this thread, hopefully he'll be able to elaborate. I'll point him this way, but as he's at the conference today, I doubt he'll get a chance to :/