Hello friends, we have a new Windows Terminal Preview release! Windows Terminal Preview 1.22 is a large release that contains new features such as Sixel image support (a LARGE community contribution!), Grapheme Cluster Support, the Snippets Pane, Quick Fixes in CMD, and a new Cooked Read popup in CMD to name a few!
We are also updating Windows Terminal stable to version 1.21 which will include all of the features from this previous blog post. For those that use Input Method Editor (IME), you will notice that we have improved our IME integration in Windows Terminal 1.21. We strive to make a globally-conscious product, so we’d love to hear your feedback! 皆さん、ぜひ新しい IME Integration をお試しください!
You can install Windows Terminal and Windows Terminal Preview from the Microsoft Store, from the GitHub releases page, or by using winget. If you are interested in our bleeding edge features, you can also download Windows Terminal Canary from our GitHub repo.
Now let’s talk about Windows Terminal Preview 1.22!
Sixel Image Support
Sixel image support has been one of our top feature requests in the Windows Terminal repository. Thanks to the help of @j4james, our amazing community member, we were able to make this request a reality.
To display Sixels in Windows Terminal, you will need a tool to encode sixels like libsixel or chafa. For the sake of this blog, I will be using libsixel, which contains img2sixel
.
In this first example, I used img2sixel
to display my .png as a sixel in Windows Terminal.
This sixel image support also provides a way to display image output without having to open up another window.
In this second example, I piped my matplotlib
plot into img2sixel
which allowed the output to be displayed in my active terminal window (as opposed to a new window.)
Grapheme Cluster Support
Have you ever entered an emoji in your terminal and saw your cursor move forward a few more spaces than you expected? No more! We’re now finally joining the ranks of other terminal emulators in supporting grapheme clusters!
With grapheme clusters, a program can use multiple code points to express a single user-perceived character. For instance, the polar bear emoji “🐻❄️” is the combination of a bear face “🐻” and a snowflake “❄”, glued together with a zero-width joiner. Older versions of Windows Terminal would not understand this and treat them as individual emojis. Depending on the text renderer you would then either see “🐻❄️ ” or “🐻 ❄” instead of the correct “🐻❄️”
Grapheme clusters doesn’t only help display emojis but other characters as well, like combining diacritical marks.
For those needing compatibility with UNIX based applications that don’t support grapheme clusters yet, we’ve also added support for their “wcswidth” based measurement.
Snippets Pane
Have you ever woken up at 3:00 AM after getting paged for a SEV1 and frantically struggled to remember what commands you need to revive a production cluster? Well, maybe the Snippets Pane can help with that…
Snippets are commands that you can save in your settings.json
file. The Snippets Pane is our new UI surface for you to see all your Snippets and send them to your command line.
To add a Snippet to your settings.json
file, you will need to add a new object that contains a command
and a name
in the actions
object similar to this:
"actions":
[
{
"command":
{
"action": "sendInput",
"input": "git checkout -b"
},
"name": "git new branch"
}
]
In this object, command
contains an action
and an input
. action
should always be set to sendInput
and input
should be the command that you want to send. Lastly, you will want set name
to the name of your Snippet.
After you have created a Snippet, you will be able to see it in the Snippets Pane. You can invoke the Snippets Pane by searching for it in the Command Palette and clicking on the “Open snippets pane” option (you can also assign this as a keybinding action in the Settings > Action as well.)
To see the command, click on the name of the Snippet. To send the command to your command line, click on the “play” button next to the command.
If you have no idea about what Snippets to add to the Snippets Pane or stuck on writing your first few Snippets, then @zadjii-msft wrote a handy script for you to use to help you populate some Snippets from Commands.dev.
Fans of the Suggestions UI completion menu will also notice that their Snippets will show up as Suggestions in the Suggestions UI! (We’ve also updated the Suggestions UI to display the description
property!)
Quick Fixes in CMD
For all you CMD lovers, Windows Terminal has a new feature called Quick Fix. Now, whenever you enter an unrecognized command in CMD and that command is affliated with an existing WinGet package, you will see a Quick Fix appear on the left side of your terminal window.
Double-clicking on the Quick Fix will recommend you a winget install
command to install the package that you are missing to run that command.
Similar to the Microsoft.WinGet.CommandNotFound PowerShell module, Quick Fixes in CMD is meant to give you assistance in the terminal without having you leave the context of your terminal.
New Cooked Read Popup in CMD
We have also changed the Cooked Read popup UI (used for F7 and friends) in CMD. It now draws beneath the prompt (pushing the screen up) and has a modern TUI scrollbar.
New Hosting Subsystem
This 1.22 Preview release also replaces the old console hosting subsystem (ConPTY v1) with a completely new one that promises higher fidelity for VT applications, 2x the I/O speed for VT heavy workloads (SGR), up to 16x the I/O speed for plaintext workloads, more reliability, better resizing and reflow, and more! It’s light years ahead of where we were, and serves as the basis for many other improvements.
Please, please, please let us know if you run into any weird console application issues. We’ve tried fan favorites like Far Manager, Z*TREE GOLD, Yori, and more in our quest to make sure it is a great experience for all our users 🙂
Usability Updates
⚡ Actions now have their own IDs, and key bindings just point at them; we’ve made changes to how this works to improve the action and binding experience in future versions
⚡ Actions like splitPane
, sendInput: someinput
, and quit
can now be added directly to the New Tab dropdown menu
⚡ Snippets can now be saved directly from the command line with the wt x-save
(thanks @e82eric!)
⚡ Ctrl+Shift+. will now open the Suggestions UI which contains Snippets and Suggestions. You can now also bind the quickFix
action to open a menu containing only WinGet suggestions (as of today, on Windows 24H2)
⚡ You can now search with regular expressions in Terminal (and conhost!)
⚡ Command/input previews will now display in line with the cursor, in italic, in the right font… Which you can display in RGB with the fun {profile}.experimental.rainbowSuggestions
setting (boolean, default false
)
⚡ Pixel shader authors rejoice! If your shader fails to compile, you’ll now get a useful error message! (thank you @blitzRahul!)
⚡ Vintage console applications will no longer get corrupted responses from ReadConsoleOutput when Raster Fonts are enabled
⚡ We have brought the new Windows 24H2 API out to the ConPTY NuGet package
⚡ We have enabled “automatically mark prompts” (for shell integration) by default
⚡ We now track and log changes to settings. To see these code changes, please see pull request #17678
⚡ We now log action dispatch occurrences. To see these code changes, please see pull request #17718
UI Updates
✨ We’ve rewritten how selection colors work! They will now be drawn with appropriate contrast, at the exact color you specify, with a foreground that is black or white (whichever is most visible!)
✨ The search box will no longer cover up search results in the top right unless there’s nowhere to scroll (thanks again @e82eric!)
✨ Terminal now comes with shiny new icons for the Visual Studio Developer Shells!
✨ We have restored the …s in some command palette names to help users find them
✨ The command palette has lost some extraneous animations, so it should feel much faster
✨ You can now configure the theme for the Settings UI separately from the application with {theme}.settings.theme
(enum light
, dark
, system
; default: system
) (thanks @bundagaard!)
VT (Virtual Terminal) Updates
🖥️ You can now configure the “Answerback” message sent in response to ENQ using the profile setting answerbackMessage
(string, default: null
) (conhost users: HKCU\Console AnswerbackMessage REG_SZ
) (thanks @j4james!)
🖥️ We now support the DEC VT paging operations, NP
PP
PPA
PPR
and PPB
, as well as DECPCCM
(page cursor coupling mode) and DECRQDE
(request displayed extent) (thanks again @j4james!)
🖥️ Applications can now request the entire color palette using DECRQTSR
DECCTR
(CSI 1 ; Pt $ u
) (thanks yet again @j4james!)
🖥️ Applications can now query the cursor shape set with DECSCUSR
using DECRQSS
(DCS $ q SP q ST
) (thank you again @j4james!)
🖥️ Applications can now query the size of character cells (CSI 16 t
) and the entire text area (CSI 14 t
), with a response measured in pixels (thanks to @j4james!)
🖥️ Applications can now query the color palette with OSC 4 ?
, and the default foreground (OSC 10 ?
), background (OSC 11 ?
), cursor (OSC 12 ?
) and selection colors (OSC 17 ?
)
🖥️ Applications can now change the selection color using OSC 17
🖥️ Reports generated in response to VT requests are once again given priority over other input
🖥️ ConPTY: responses longer than 4kb will no longer be corrupted (thanks @j4james!)
Bug Fixes
🐛 Terminal will now more reliably save your session when your computer reboots to update
🐛 Background colors will no longer bleed over the edges of the screen when D2D is in use (such as over RDP to a VM)
🐛 Curly underlines will now render properly on double-width DECDWL
and double-height DECDHL
lines
🐛 Cursor invalidation once again works properly on double-width or double-height lines (thank you @j4james!)
🐛 Cursor movement over ConPTY now works properly on double-width or double-height lines (thanks again @j4james!)
🐛 The rendering of curly underlines has been improved (special thanks to @smprather for reporting this bug!)
🐛 The Suggestions UI will no longer try to grab the PowerShell “ghost text” out of your input line
🐛 You can once again cancel overwriting a key binding in the Settings UI
🐛 You can once again disable the detection of URLs
🐛 You can once again use Ctrl+D and Enter in a disconnected pane
Performance, Reliability, and Code Health Updates
🔥 Scrolling the screen will now result in less GPU traffic
🔥 Terminal now makes fewer copies (and heap allocations) when writing input to the console app
🔥 AtlasEngine will no longer over-read a memory buffer when setting up a GPU texture
🔥 Closing a window when you have an unfocusedAppearance
set will no longer result in unscheduled disassembly of your terminal
🔥 Session restoration now works more reliably when the entire scrollback is full
🔥 We’ve made some improvements to how we handle movement across rectangles for copy operations
Windows Terminal 1.22 Preview is packed with lots of updates. For a full list of changes and which versions of Windows Terminal those changes were backported to, please visit our Discussions page on the Windows Terminal GitHub repository for more information.
Top contributors
We love working with the community and recognizing those who made an impact for each release. Here are the community members who helped out for this one!
Contributors who created the most merged pull requests
🏆 j4james
Contributors who opened the most non-duplicate issues
🏆 Zeroes1
Contributors who provided the most comments on pull requests
🏆 j4james
🏆 e82eric
We would also like to give a special thanks to @abhijeeth-babu, @jbyuki, and @thadguidry, for their help on our documentation efforts!
Thank you!
We hope you enjoy this release of Windows Terminal 1.22 Preview! This is a rather large preview release so it will take some time for these features to eventually move onto Windows Terminal stable.
More information on these new features can be found on our docs site and if you find any bugs or have feature requests, feel free to file them on GitHub.
If you have any questions you can reach out to Christopher Nguyen (@nguyen_dows) on X (formerly Twitter.)
Thank you!
For sixel support, is transparency planned so far?
Great job so far!
Edit: Somehow it spammed the same comment 6 times, no idea what caused that..
Love these new features! 👏
Could you please give more details on the new hosting subsystem? Is it something available to 3rd-party terminals? Are there some new APIs to consume the new reflow capabilities?
Any terminal that compiles their own ConPTY from our GitHub repository will be able to use these improvements. We'll likely create a new prebuilt nuget package of it in the coming months so that terminals like wezterm and contour can consume it more easily. The version of ConPTY that's built into the OS can only be updated with the next proper OS upgrade which will only happen in a few years I bet.
The improved reflow...