5072 Commits
Author SHA1 Message Date
aphrody-dev f8b3cf09a1 docs(aphrody): bench-render.md, build complet Release x64 vert avec BackendD3D12 2026-10-09 19:43:00 +02:00
aphrody-dev 7d63196069 docs(aphrody): build Release x64 réussi en 14,1 min, deploy restant 2026-10-09 19:41:14 +02:00
aphrody-dev 4146739d3d docs(aphrody): état de l'outillage au 2026-10-09 et commandes restantes (build, deploy, profils, mesures) 2026-10-09 19:37:15 +02:00
aphrody-dev d178192ea5 feat(aphrody): bench-render.ts compare D3D11 et D3D12 (débit seq/couleurs, PresentMon, mémoire CPU/GPU) ; bench-render.md : méthode, état et étapes restantes (build complet, tests, deploy, mesures) 2026-10-09 19:36:42 +02:00
aphrody-dev 2ab6d30aba feat(atlas): BackendD3D12 natif (atlas DirectWrite/D2D via D3D11On12, swap chain flip à file D3D12, 3 trames en vol, anneau d'upload, root signatures et PSO précompilés, shaders personnalisés multi-passes t0-t3 et entrées temps/curseur, repli D3D11) et paramètre direct3d12 (schéma, UI en-US/fr-FR, test de sérialisation) 2026-10-09 19:36:42 +02:00
aphrody-dev 9566761aa6 fix(aphrody): build borné par la mémoire virtuelle libre (MultiToolTask, CL_MPCount, /m:N) pour éviter les échecs PCH C3859/C1076 sur un hôte chargé, WT_JOBS pour le fixer 2026-10-09 19:26:29 +02:00
aphrody-dev 1d1cbe02de fix(aphrody): environnement VsDevCmd dédoublonné sans tenir compte de la casse (Path et PATH sur les runners GitHub faisaient échouer CL.exe) 2026-10-09 19:20:47 +02:00
aphrody-dev e5e700a905 fix(aphrody): sync intègre origin/aphrody avant le rebase pour que le push forcé ne perde aucun commit 2026-10-09 19:19:20 +02:00
aphrody-dev 65ac295794 fix(aphrody): MSBuild appelé par son chemin dans l'instance VS, fragment livré avec les schémas Aphrody M3 générés, CI qui installe les composants UWP, README de l'outillage 2026-10-09 19:11:33 +02:00
aphrody-dev 459f92bd43 fix(aphrody): setup échoue explicitement si des composants VS restent absents après l'installeur, refuse de lancer l'installeur pendant un MSBuild, restauration sans réutilisation des nœuds MSBuild 2026-10-09 19:05:44 +02:00
aphrody-dev 397a2cea31 feat(aphrody): suite du backend Direct3D 12 et de l'outillage Bun 2026-10-09 19:00:56 +02:00
aphrody-dev 34fe871ea7 feat(aphrody): outillage Bun (setup, build, deploy, sync, bench, profils et fragment), workflow de build aphrody, préparation de BackendD3D au partage avec le backend Direct3D 12 2026-10-09 18:59:14 +02:00
Windows Console Service BotandConsole Service Bot 6676c6f938 Localization Updates - experimental badge - 10/07/2026 03:04:58 (#20775)
Co-authored-by: Console Service Bot <consvc@microsoft.com>
2026-10-08 03:46:25 +00:00
Dustin L. Howett 099afa48ed cooked: properly tear down popups when we fail to parse user input (#20779)
Throwing an exception all the way out of COOKED_READ_DATA::Read is
deleterious for the health of the application. We fail to unbind the
waiter and may leave a dangling pointer around for some applications
(and for some NPC security researchers to think provides an EoP, but
does not.)

This also moves us away from std::stoi in the history pop-up path
entirely.
2026-10-08 01:17:13 +02:00
Leonard Hecker 5951f69654 Fix several ScrollConsoleScreenBuffer ConPTY issues (#20774)
- Fixed #20772 by fully committing to lazy DA1 capabilities path via
  `VtIo::SetDeviceAttributes`. It accidentally only did so with enabled
  cursor inheritance before.
- Fixed #20773 by fixing the source/destination rectangle alignment
  in the non-DECCRA path of `ScrollConsoleScreenBuffer`.

Also closes MSFT-64450466.

As a drive-by:
- Fixed the DECCRA path not restoring cursor attributes in conhost.
- Reduced memory use in the non-DECCRA path.
- Added a `IL/DL` sequence fast-pass for `ScrollConsoleScreenBuffer`.
- Fixed a broken bounds checks in `Read/WriteConsoleOutputWImplHelper`.
- Fixed the TraceLogging definition for `SMALL_RECT`.
2026-10-08 01:16:58 +02:00
Dustin L. Howett 767f832d26 Remove ControlInteractivity and ControlCore from TermControl API (#20745)
Consumers have no need to know about these, and can instead deal with a
new opaque `IContentHandle`. Exposing them offered too much latitude to
do the "wrong thing" with TermControl's constituent types. Even _if_ we
were doing something cross-process, the upper layer doesn't need to use
our implementation details.

In doing this, I've also removed the unused Content::Attached event.
2026-10-07 23:12:45 +00:00
TheJesper aba31713b5 Preserve ENHANCED_KEY for direct key events (Alt up, F7 down) (#20619)
Our window message intercepts Alt key-up (and F7 key-down) to handle
them before XAML messes them up. These events get forwarded through
IDirectKeyListener, but the ENHANCED_KEY bit from `lParam` was being
lost.

Verified manually.

Closes #18120
2026-10-07 23:11:16 +00:00
Dustin L. Howett d2fac6ef8b Go back to using implementation types in TermControl (#20721)
This reverts a large part of #10051 and moves us back to using the
native `implementation`-namespace types from TermControl to talk to
ControlInteractivity and ControlCore.

I started down this rabbit hole because I was trying to get rid of
InteractivityAutomationPeer, and I learned that we introduced it as a
go-between for the process-split TermControl/Interactivity.

InteractviityAutomationPeer is not required, and removing it lets us get
rid of some other mild annoyances:

- We don't need to _push_ the bounds of the control down into
Interactivity any longer
- Likewise for padding

Bounds and padding can simply be read directly from the control.

I also undid the move from HANDLE to uint64_t which was only required
for projecting HANDLEs.

The only thing we risked losing out on was automatic event revokers, but
this pull request adds `winrt::auto_revoke` support directly to
`til::event`. It is suitably terrifying. It is certainly UB.
2026-10-07 17:32:55 -05:00
Leonard Hecker 2d417e4eda Minor improvements to til::parse_(un)signed (#20778)
* Allow an explicit `+` prefix like other parsers
* Reject invalid bases
* Fix UB during `uint64_t` -> `T` cast in `parse_signed`
2026-10-07 17:27:02 -05:00
PankajBhojwani 35f29bd316 Add an experimental badge in the SUI for experimental settings (#20748)
For experimental settings, display a bright yellow badge next to it. So,
as part of this, removed "experimental" from the descriptions since the
badge is indicating that already.

Closes #20687
2026-10-06 12:57:21 -05:00
Leonard Hecker b7752edc52 Restore KKP flags when disabling ASB (#20768)
`_kittyFlags` represents the current buffer flags. When you enable the
ASB, we reset `_kittyFlags` to 0. When you disable the ASB, we restore
the flags from the `_kittyMainStack`. Boom, broken. We never pushed
anything into the `_kittyMainStack` in the first place.

The gets rid of `_kittyFlags`. To make it neat, I also replaced
the heap vector with a static array + length.

Closes #20763
2026-10-06 12:56:34 -05:00
Leonard Hecker 72e7b0630c Avoid loading keyboard layouts for KKP US mappings (#20769)
Replaces `LoadKeyboardLayoutW` with a static LUT.
No more random US keyboards in your language picker.

Closes #20761
2026-10-06 16:31:19 +02:00
PankajBhojwani 805068781c Add automation name for the delete shortcut button (#20767)
It didn't have one before, so screen readers were just reading out
"button". This commit fixes that, screen readers now read out "delete
shortcut button"

Closes #20601
2026-10-05 23:53:17 +00:00
OmarMashalandLeonard Hecker 159bda66f6 Suppress VT mouse release for Ctrl+click on OSC 8 hyperlinks (#20756)
Fixes the unmatched VT mouse release sent when Ctrl+clicking an OSC 8
hyperlink.

Closes #20630

Co-authored-by: Leonard Hecker <lhecker@microsoft.com>
2026-10-05 23:28:55 +00:00
Windows Console Service BotandConsole Service Bot 2b5336c1fc Localization Updates - main - 09/30/2026 21:12:36 (#20752)
Co-authored-by: Console Service Bot <consvc@microsoft.com>
2026-09-30 21:53:17 +00:00
Dustin L. Howett e289c45d96 Revert "Fix PGO tests (#20560)" (#20750)
This reverts commit 1507c46524.

The root cause of the PGO failure is documented in #20749. Also, the PR
#20560 didn't actually _fix_ them. :P

Note that this DOES NOT FIX the PGO build.
2026-09-30 15:16:20 -05:00
Sebastien Tardif 4e2b8bd926 Only open File Explorer from OpenCWD when CWD is a real directory (#20697)
OpenCWD now no-ops unless the terminal working directory is an existing
directory, then opens that folder. It no longer passes the raw OSC
string to `explorer.exe` as parameters.

Refs #12859 (the original action asked to do nothing when no CWD is set)

OpenCWD was introduced in #18013.

`ControlCore::OpenCWD` is the command-palette action `Terminal.OpenCWD`.
It used:

```cpp
ShellExecute(nullptr, nullptr, L"explorer", workingDirectory.c_str(), nullptr, SW_SHOW);
```

The working-directory string comes from OSC 7 (`file:` URI, then
`PathCreateFromUrlW`) or OSC 9;9. Both only require
`til::is_legal_path`, which allows `:` and `/`. So a remote host can set
CWD to `https://example.com`, `shell:...`, or `/select,...`. Invoking
Open CWD then ran Explorer with that text as `lpParameters`.

Duplicate-tab and related paths already call `Utils::IsValidDirectory`
before trusting this string (`TerminalPage.cpp`,
`TerminalPaneContent.cpp`). Open CWD now does the same, then
`ShellExecute`s the directory path as `lpFile` so Explorer switches
cannot be supplied as parameters.

If the CWD is empty or not a directory, the action does nothing.
2026-09-30 00:14:35 +00:00
Dustin L. Howett a3c89e64a4 Move AutoScroll down into Interactivity with a render timer (#20710)
This pull request builds on the render timer infrastructure in #19330
and the pointer ID work in #20017 to move automatic scrolling down into
the Interactivity layer.

Leonard tells me that this is an acceptable use of the render timer
infrastructure because it directly results in a new frame or new content
being rendered (therefore, it does not spin the renderer for no reason.)

Much of the code is the same. I recommend reviewing with:

```
git diff --color-moved=dimmed-zebra --color-moved-ws=ignore-all-space (git merge-base origin/main origin/dev/duhowett/wpf-1-autoscroll-to-interactivity) origin/dev/duhowett/wpf-1-autoscroll-to-interactivity
```
2026-09-29 18:39:10 -05:00
Dustin L. Howett fc218b6fb1 version: bump to 1.27 on main (#20744) 2026-09-29 23:18:19 +00:00
PankajBhojwani 456c3a8ce8 Display reason for launch at login setting being disabled by OS setting (#20743)
Closes #20685
2026-09-29 22:09:47 +00:00
OmarMashalandLeonard Hecker 8f2412ae33 Always open duplicated tabs next to source tab (#20565)
Closes #20355

Co-authored-by: Leonard Hecker <lhecker@microsoft.com>
2026-09-29 13:46:46 -05:00
盗天叔叔 f1ddcbe4df Fix broken links (#20699) 2026-09-29 14:43:13 +00:00
Leonard Hecker 0626dc1457 Fix 5s lags when using OSC 52 clipboard copy (#20728)
Hilarious repro: `printf "\e]0;A\a\e]52;c;Qg==\a"`

This issue is exactly what happens when you Ctrl+X in a clean file in
msedit and it freezes Windows Terminal. It's because it puts a "•" in
the title and copies the text.

It triggers a title and clipboard change in the same frame which causes
the UI and VT thread to deadlock trying to get the console lock.
2026-09-28 15:11:15 +00:00
Dustin L. Howett bb0541e7a9 Move MIDI audio timer off Dispatcher to a threadpool (#20711)
The MIDI audio cancellation handler doesn't really need to run on the UI
thread, and this breaks our dependency on DispatcherTimer.
2026-09-27 01:52:30 +02:00
Leonard Hecker fda72a0709 Fix several Present issues in AtlasEngine (#20723)
* D3D uses deferred execution where render commands are collected as
  descriptors in a ring buffer before they're sent off to the GPU.
  When you don't call `Flush()` (or `Present()` which implies `Flush()`)
  it'll fill up 100s of MB of memory rapidly.
  This PR solves it in two ways:
  * Call `Flush()` whenever we can't call `Present()`
  * Make calling `Flush()` unnecessary by checking if we need to render
    anything in the first place.
* This immediately results in an issue: Not rendering means the frame
  latency waitable object yields immediately (because we can't wait on
  it twice). The solution is to wait 16ms before trying again.
* If the display is off, DWM will not deque frames. `Present1()` will
  indicate this (`DXGI_STATUS_OCCLUDED`) but it's not a failure so we
  don't handle it. Because of this we'll fill the queue to its maximum
  (64 frames). Once the display is on again, DWM will deque at V-Sync
  rate, but since we render as fast as the frame latency waitable
  object, also signaled at V-Sync rate, we'll push frames at the same
  rate they're dequeued, causing a 64-frame latency (~1.1s at 60Hz).
  `SetMaximumFrameLatency(1)` doesn't change this.
  The solution is that we don't limit waiting on the frame latency
  waitable object to just 100ms, but `INFINITE`.
* Since that fix causes the renderer to wait potentially forever,
  a mechanism to cancel waits on shutdown is necessary.
  This also uncovered a flaw in the current design, wherein it blocks
  the UI thread for up to 100ms every time you close or move a tab
  on a low frame rate (or no active) display.

Closes #20226
Closes #20342
Closes #20716

## Validation Steps Performed
* Continuously render, scroll up -> no GPU use ✅
2026-09-26 00:59:39 +00:00
Dustin L. Howett f823ca2ef6 core, atlas: properly handle no-swapchain-handle situations (#20722)
When ControlCore is set up to target an HWND, there will not be a swap
chain handle.

When there's not going to be a swap chain handle or a listener who cares
about it, don't bother with the event registration (save memory on a
useless object) and don't bother sending the event.

Supersedes #20712
2026-09-25 23:33:57 +00:00
Dustin L. Howett 0b94a7ea04 Core, Interactivity: allow our creator to provide a DispatcherQueue (#20713)
This is in advance of the UWP/WPF unification work, where we need to
provide a dispatcher from the WPF side. It should be a no-op today, but
we could also move _loading_ the dispatcher up to TermControl (XAML).
2026-09-22 17:38:33 -05:00
Dustin L. Howett 60fbd9af80 build: include the attempt number on the log artifact (#20714)
This prevents retry builds from failing because `logs-x64-Release` (or
whatever) already exists.

`build-platform-config` is not published if the prior steps fail, and
furthermore its name is a contract with the later stages, so I've left
it alone.
2026-09-22 21:46:29 +00:00
Windows Console Service BotandConsole Service Bot 7c92ecd037 Localization Updates - Settings Expanders (#20690)
Co-authored-by: Console Service Bot <consvc@microsoft.com>
2026-09-18 03:43:32 +00:00
Dustin L. Howett 077f9cf5ec build: add our ServiceTree ID to our loc submissions (#20695) 2026-09-17 19:42:53 -05:00
Dustin L. Howett 9694946ae2 build: use the latest compiler *of the same version* (#20689)
There is a bug in the MSVC Preview compiler v14.52.

This fixes our CI failures and the broken exception handler for
ConptyConnection.

Closes #20677
2026-09-16 00:45:53 +00:00
Carlos ZamoraandDustin L. Howett c0c72e95f3 Update profile subpages (#20336)
## Summary of the Pull Request
Updates the individual profile pages to include:
- icons + settings expanders/cards
- `SettingsResetButton`: a new "reset value" button
- a new "unfocused appearance" subpage with its own preview (similar to
default appearance)

## Detailed Description of the Pull Request / Additional comments
- `IInheritableViewModel`: interface exposing `HasSetting()`,
`ClearSetting()`, and `SettingOverrideSource()`
- To help ensure that these are updated properly, a static assert was
added that checks the number of profile settings. This is intended to be
a tripwire to ensure future changes also update the reset buttons.
- `Profiles_UnfocusedAppearance.h/cpp/idl/xaml`: the new unfocused
appearance page
- added helper functions `FormatAccessibleName()` and
`ColorToHexString()` to deduplicate code that creates accessible names
for SettingsExpanders across the entire SUI

## Validation Steps Performed
- [X] settings search + deep link navigation
- [X] "reset value" button
- [X] accessibility pass with Narrator

## PR Checklist
Related to #17000

---------

Co-authored-by: Dustin L. Howett <dustin@howett.net>
2026-09-15 17:55:42 -05:00
Dustin L. Howett e4171cc2d8 chore: Update to CppWinRT 3.0.260818 (#20679) 2026-09-15 17:55:32 -05:00
Windows Console Service BotandConsole Service Bot 0319ece219 Localization Updates - main - Expander Groups, New Window (#20678)
Closes #20671

Co-authored-by: Console Service Bot <consvc@microsoft.com>
2026-09-14 12:15:33 -05:00
Mike Griese dcfbcdd863 Add a new window entry to the workspace flyout (#20663)
does what it says on the tin.

Closes #20638
2026-09-11 20:48:21 -05:00
Dustin L. Howett d17c5d9101 sui: fix the Spacebar on things inside settings cards (#20665)
Okay, so, every SettingsCard inherits from ButtonBase. ButtonBase has
its own local KeyDown/KeyUp handler, which can prevent the event from
being bubbled at all.

Moving our key handling to our local KeyDown/KeyUp handler allows us to
decide when to involve ButtonBase's handler, rather than allowing it to
delegate to us.

Incidentally, this is probably why the implementer had to use the
PreviewKeyXxx events; it was the only other way to get a "say" before
the button handled it itself.

Closes #20657 (superseded)
2026-09-11 20:48:08 -05:00
Carlos Zamora 58c0db948e Add expander groups to settings UI (#20200)
## Summary of the Pull Request
Adds expander groups throughout the entire settings UI (except Profiles
pages) to group similar settings together. These expanders got an icon
to help make them easier to find and navigate.

There are also a few other changes that were folded into this PR:
- "Appearance" page was renamed to "Personalization"
- Move settings from "Rendering" page to "Compatibility"

Those were done as a part of this PR for a holistic restructuring. Given
that spacing has changed, the content also needs to be reviewed so that
it looks right with this new structure (i.e. long help text should be
reconsidered to be shorter).

## Validation Steps Performed
Scenarios:
- ensure all settings are in expanders
  - [x] Startup
  - [x] Interaction
  - [x] Personalization
  - [x] Compatibility
- [x] settings search still works and deep links

## PR Checklist
Related to #17000
2026-09-11 20:47:42 -05:00
Dustin L. Howett 5520a75c4b build: remove stray dep/gsl include (#20664) 2026-09-11 20:47:20 -05:00
zhangxaochenandLeonard Hecker e7a68df7b9 Prevent panes from shrinking below 2x2 cells (#20564)
Raise the visible terminal minimum from 1×1 cells to 2×2 cells so a pane
or window can no longer reach a 1-column viewport (keyboard, mouse,
`split-pane`, `wt --size`, `initialCols`/`initialRows`, or VT resize).

This mitigates an issue where we hang when we display a 2-cell char
in one cell.

Refs:
- j4james: 2×2 is the VT theoretical minimum (`DECSTBM` height ≥ 2,
`DECSLRM` width ≥ 2).

Verification:
- Confirmed the hang on unpatched Dev (`WindowsTerminalDev`) and Store
1.24.11911 with `echo 音楽🎵测试` in view, then shrink the left pane to the
stop.

Closes #19996

Co-authored-by: Leonard Hecker <lhecker@microsoft.com>
2026-09-11 20:46:58 -05:00
19843c2177 Show terminal size overlay during resize (#20059)
Displays a centered overlay showing **columns × rows** when the terminal
control is resized. The overlay auto-hides after 750ms.
   
Closes #2833

Co-authored-by: sagarbhure-msft <265811974+sagarbhure-msft@users.noreply.github.com>
Co-authored-by: Leonard Hecker <lhecker@microsoft.com>
2026-09-11 20:45:40 -05:00