-
Notifications
You must be signed in to change notification settings - Fork 7.5k
Add FancyZones CLI for command-line layout management #44078
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| } | ||
| else | ||
| { | ||
| // > 11 zones: fallback to grid layout |
Check failure
Code scanning / check-spelling
Forbidden Pattern
| "set-layout" or "set" or "s" => args.Length >= 2 ? SetLayout(args.Skip(1).ToArray()) : PrintErrorAndReturn("Error: set-layout requires a UUID parameter"), | ||
| "open-settings" or "settings" => OpenSettings(), | ||
| "get-hotkeys" or "hotkeys" or "hk" => GetHotkeys(), | ||
| "set-hotkey" or "shk" => args.Length >= 3 ? SetHotkey(int.Parse(args[1], CultureInfo.InvariantCulture), args[2]) : PrintErrorAndReturn("Error: set-hotkey requires <key> <uuid>"), |
Check failure
Code scanning / check-spelling
Unrecognized Spelling
| "open-settings" or "settings" => OpenSettings(), | ||
| "get-hotkeys" or "hotkeys" or "hk" => GetHotkeys(), | ||
| "set-hotkey" or "shk" => args.Length >= 3 ? SetHotkey(int.Parse(args[1], CultureInfo.InvariantCulture), args[2]) : PrintErrorAndReturn("Error: set-hotkey requires <key> <uuid>"), | ||
| "remove-hotkey" or "rhk" => args.Length >= 2 ? RemoveHotkey(int.Parse(args[1], CultureInfo.InvariantCulture)) : PrintErrorAndReturn("Error: remove-hotkey requires <key>"), |
Check failure
Code scanning / check-spelling
Unrecognized Spelling
| Console.WriteLine(" --all Apply to all monitors"); | ||
| Console.WriteLine(" open-settings (settings) Open FancyZones settings page"); | ||
| Console.WriteLine(" get-hotkeys (hotkeys, hk) List all layout hotkeys"); | ||
| Console.WriteLine(" set-hotkey (shk) <key> <uuid> Assign hotkey (0-9) to CUSTOM layout"); |
Check failure
Code scanning / check-spelling
Unrecognized Spelling
| Console.WriteLine(" get-hotkeys (hotkeys, hk) List all layout hotkeys"); | ||
| Console.WriteLine(" set-hotkey (shk) <key> <uuid> Assign hotkey (0-9) to CUSTOM layout"); | ||
| Console.WriteLine(" Note: Only custom layouts work with hotkeys"); | ||
| Console.WriteLine(" remove-hotkey (rhk) <key> Remove hotkey assignment"); |
Check failure
Code scanning / check-spelling
Unrecognized Spelling
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
commit 73e379238bcefa2f10ab7da4791af830467fc3c2 Author: leileizhang <[email protected]> Date: Tue Dec 9 10:13:48 2025 +0800 Add FancyZones CLI for command-line layout management (#44078) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request Adds a new command-line interface (CLI) tool for FancyZones, enabling users and automation scripts to manage window layouts without the GUI. **Commands:** | Command | Aliases | Description | |---------|---------|-------------| | `help` | | Displays general help information for all commands | | `open-editor` | `editor`, `e` | Launch FancyZones layout editor | | `get-monitors` | `monitors`, `m` | List all monitors and their properties | | `get-layouts` | `layouts`, `ls` | List all available layouts with ASCII art preview | | `get-active-layout` | `active`, `a` | Show currently active layout | | `set-layout <uuid>` | `set`, `s` | Apply layout by UUID or template name | | `open-settings` | `settings` | Open FancyZones settings page | | `get-hotkeys` | `hotkeys`, `hk` | List all layout hotkeys | | `set-hotkey <key> <uuid>` | `shk` | Assign hotkey (0-9) to custom layout | | `remove-hotkey <key>` | `rhk` | Remove hotkey assignment | **Key Capabilities:** - ASCII art visualization of layouts (grid, focus, priority-grid, canvas) - Support for both template layouts and custom layouts - Monitor-specific layout targeting (`--monitor N` or `--all`) - Real-time notification to FancyZones via Windows messages - Native AOT compilation support for fast startup ### Example Usage ```bash # List all layouts with visual previews FancyZonesCLI.exe ls # Apply "columns" template to all monitors FancyZonesCLI.exe s columns --all # Set custom layout on monitor 2 FancyZonesCLI.exe s {uuid} --monitor 2 # Assign hotkey Win+Ctrl+Alt+3 to a layout FancyZonesCLI.exe shk 3 {uuid} ``` https://github.com/user-attachments/assets/2b141399-a4ca-4f64-8750-f123b7e0fea7 <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit 4710b816b40b70216563e533de53a5db7a41337b Author: Dave Rayment <[email protected]> Date: Mon Dec 8 21:01:56 2025 +0000 [CmdPal] Optimise MainListPage's results display by merging already-sorted lists (#44126) ## Summary of the Pull Request This PR replaces the current LINQ-based results compilation query of combining, sorting and filtering the four result sources with a 3-way merge operation plus a final append. It provides a performance increase as well as a significant reduction in allocations. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments The existing code: 1. Limits the number of apps returned to a pre-defined maximum. 2. Sorts the apps list. 3. Appends filtered items, scored fallback items and the apps list together. 4. Sorts the three lists based on their score. 5. Appends the non-scored fallback items, with empty items excluded. 6. Selects just the `Item` from each. 7. Creates an array from the enumerable. ```csharp if (_filteredApps?.Count > 0) { limitedApps = _filteredApps.OrderByDescending(s => s.Score).Take(_appResultLimit).ToList(); } var items = Enumerable.Empty<Scored<IListItem>>() .Concat(_filteredItems is not null ? _filteredItems : []) .Concat(_scoredFallbackItems is not null ? _scoredFallbackItems : []) .Concat(limitedApps) .OrderByDescending(o => o.Score) // Add fallback items post-sort so they are always at the end of the list // and eventually ordered based on user preference .Concat(_fallbackItems is not null ? _fallbackItems.Where(w => !string.IsNullOrEmpty(w.Item.Title)) : []) .Select(s => s.Item) .ToArray(); ``` We can exploit the fact that each of the three 'scored' lists are pre-ordered, and replace the query with a 3-way merge and final append of the non-scored fallback items. By pre-sizing the results array we can avoid all the extra allocations of the LINQ-based solution. ### Proof of pre-ordering In `UpdateSearchText`, each of the lists is defined by calling `ListHelpers.FilterListWithScores`: ```csharp // Produce a list of everything that matches the current filter. _filteredItems = [.. ListHelpers.FilterListWithScores<IListItem>(newFilteredItems ?? [], SearchText, scoreItem)]; ``` ```csharp _scoredFallbackItems = ListHelpers.FilterListWithScores<IListItem>(newFallbacksForScoring ?? [], SearchText, scoreItem); ``` ```csharp var scoredApps = ListHelpers.FilterListWithScores<IListItem>(newApps, SearchText, scoreItem); ... _filteredApps = [.. scoredApps]; ``` In `FilterListWithScores`, the results are ordered by score: ```csharp var scores = items .Select(li => new Scored<T>() { Item = li, Score = scoreFunction(query, li) }) .Where(score => score.Score > 0) .OrderByDescending(score => score.Score); ``` (This also makes the existing `OrderByDescending()` for `_filteredApps` before the LINQ query redundant.) ### K-way merge Since the results are pre-sorted, we can do a direct merge in linear time. This is what the new `MainListPageResultFactory`'s `Create` achieves. As the lists may be different sizes, the routine does a 3-way merge, followed by a 2-way merge and a single list drain to finish. Each element is only visited once. ### Benchmarks A separate benchmark project is [here](https://github.com/daverayment/MainListBench), written with Benchmark.net. The project compares the current LINQ-based solution against: 1. An Array-based algorithm which pre-assigns a results array and still sorts the 3 scored sets of results. This shows a naive non-LINQ solution which is still _O(n log n)_ because of the sort. 2. The k-way merge, which is described above. _O(n)_ for both time and space complexity. 3. A heap merge algorithm, which uses a priority queue instead of tracking each of the lists separately. (This is _O(n log k)_ in terms of time complexity and _O(n + k)_ for space.) Care is taken to ensure stable sorting of items. When preparing the benchmark data, items with identical scores are assigned to confirm each algorithm performs identically to the LINQ `OrderBy` approach, which performs a stable sort. Results show that the merge performs best in terms of both runtime performance and allocations, sometimes by a significant margin. Compared to the LINQ approach, merge runs 400%+ faster and with at most ~20% of the allocations: <img width="1135" height="556" alt="image" src="https://github.com/user-attachments/assets/9f9d3932-1592-49d6-8a07-4ea3ba7a0cc5" /> <img width="1149" height="553" alt="image" src="https://github.com/user-attachments/assets/ae9e9e0a-b255-4c1a-af4b-e791dea80fa4" /> See here for all charts and raw stats from the run: https://docs.google.com/spreadsheets/d/1y2mmWe8dfpbLxF_eqPbEGvaItmqp6HLfSp-rw99hzWg/edit?usp=sharing ### Cons 1. Existing performance is not currently an issue. This could be seen as a premature optimisation. 2. The new code introduces an inherent contract between the results compilation routine and the lists, i.e. that they must be sorted. This PR was really for research and learning more about CmdPal (and a bit of algorithm practice because it's Advent of Code time), so please feel free to reject if you feel the cons outweigh the pros. <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed - Added unit tests to exercise the new code, which confirm that the specific ordering is preserved, and the filtering and pre-trimming of the apps list is performed as before. - Existing non-UI unit tests run. NB: I _could not_ run any UI Tests on my system and just got an early bail-out each time. - Manual testing in (non-AOT) Release mode. commit b8a0163419f0800153e40a0e26ba77a4b453c74d Author: Sam Rueby <[email protected]> Date: Mon Dec 8 13:13:33 2025 -0500 CmdPal: Arrow keys move logical grid pages (#43870) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [X] Closes: #41939 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [X] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed Before  After  I noticed the double "active" line around the items when the ListPage is focused. I was unable to find where that is defined. Ideally, the black-border would go away. I tested with AOT turned on. The behavior accounts for suggestions. If the SearchBar is focused and there is a suggestion, right-arrow will [continue] to complete the suggestion. commit 06fcbdac400d6856f9e771a98828505b83152571 Author: Gordon Lam <[email protected]> Date: Mon Dec 8 18:52:33 2025 +0800 Update WinAppSDK to 1.8.3 (#44146) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This pull request updates several dependencies to newer versions in the `Directory.Packages.props` file. The main focus is on upgrading the Microsoft Windows App SDK packages to ensure the project uses the latest features and bug fixes. Dependency version updates: * Upgraded `Microsoft.WindowsAppSDK`, `Microsoft.WindowsAppSDK.Foundation`, `Microsoft.WindowsAppSDK.AI`, and `Microsoft.WindowsAppSDK.Runtime` to their latest respective versions, replacing previous 1.8.25* releases with newer builds. <!-- Please review the items on the PR checklist before submitting--> commit d515c67def98da77f9335f997bac7520538c2103 Author: leileizhang <[email protected]> Date: Mon Dec 8 13:34:33 2025 +0800 Improve install scope detection to prevent mixed user/machine installations (#43931) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request The old implementation checked `HKLM\Software\Classes\powertoys\InstallScope` first. If this key existed (even as a remnant from incomplete uninstall), it would immediately return `PerMachine` without validating the actual installation. ### Fix - Uses Windows standard Uninstall registry (most reliable source of truth) - Identifies PowerToys Bundle by exact `BundleUpgradeCode` GUID match - MSI component entries (always in HKLM) are automatically ignored since they don't have `BundleUpgradeCode` - Checks HKCU first, then HKLM, properly handling the fact that Bundle location reflects true install scope <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #43696 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit 9439b6df41a94c36b7a1152404afaa6cbb7deed0 Author: Noraa Junker <[email protected]> Date: Mon Dec 8 04:55:51 2025 +0100 [Settings] Create a global static instance of SettingsUtils (#44064) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request SettingsUtils is initialized multiple times over the whole solution. This creates one singeltone instance (with the default settings), so it only has to be initialized once (and improve performance a bit with that) <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit a37add8f0865588f13ffe02cc9cebad5a84b71f9 Author: 舰队的偶像-岛风酱! <[email protected]> Date: Mon Dec 8 11:14:00 2025 +0800 feat(cmdpal): add pinyin support for Chinese input method (#39354) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Add ToolGood.Words.Pinyin package to support pinyin conversion - Implement pinyin matching in StringMatcher class - Update project dependencies and Directory.Packages.props <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] **Closes:** #38417 #39343 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments I've completed a rough implementation of pinyin support, but since I'm currently unsure where to add the toggle for pinyin support, this feature is enabled by default for now. https://github.com/user-attachments/assets/59df0180-05ad-4b4a-a858-29aa15e40fd2 <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed --------- Signed-off-by: 舰队的偶像-岛风酱! <[email protected]> Co-authored-by: Yu Leng <[email protected]> commit 60deec68150e2b5abf13ad29a0fa26d3f9473035 Author: Gordon Lam <[email protected]> Date: Mon Dec 8 09:52:55 2025 +0800 Using centralized package management for vcxproj (#43920) ## Summary of the Pull Request This pull request updates the build system for several native and managed projects, modernizing NuGet package management and improving code analysis configuration. The main changes involve switching from legacy `packages.config` and manual `.props`/`.targets` imports to PackageReference style for native projects, updating package versions, and streamlining code analysis settings. **Build system modernization and package management:** * Migrated native projects (`PowerToys.MeasureToolCore.vcxproj`, `FindMyMouse.vcxproj`) from legacy `packages.config` and manual `.props`/`.targets` imports to NuGet PackageReference style, simplifying dependency management and build configuration. This includes removing the `packages.config` file and related import/error logic, and introducing `PackageReference` items for required packages. [[1]](diffhunk://#diff-76320b3a74a9241df46edb536ba0f817d7150ddf76bb0fe677e2b276f8bae95aL3-R18) [[2]](diffhunk://#diff-76320b3a74a9241df46edb536ba0f817d7150ddf76bb0fe677e2b276f8bae95aR41-L41) [[3]](diffhunk://#diff-76320b3a74a9241df46edb536ba0f817d7150ddf76bb0fe677e2b276f8bae95aL145-R153) [[4]](diffhunk://#diff-d3a7d80ebbca915b42727633451e769ed2306b418ef3d82b3b04fd5f79560f17L1-L17) [[5]](diffhunk://#diff-0f27869c4e90c8fd2c81f5688c58da99afcc9e5767e69ef7938265dbb6928e0fL3-R13) * Updated the centralized package versions in `Directory.Packages.props`, adding new entries for `boost`, `boost_regex-vc143`, `Microsoft.Windows.ImplementationLibrary`, and `Microsoft.WindowsAppSDK.Foundation` to support the new build system and dependencies. [[1]](diffhunk://#diff-5baf5f9e448ad54ab25a091adee0da05d4d228481c9200518fcb1b53a65d4156R10-R11) [[2]](diffhunk://#diff-5baf5f9e448ad54ab25a091adee0da05d4d228481c9200518fcb1b53a65d4156R74-R77) **Code analysis improvements:** * Added configuration to both native and managed projects (`PowerToys.MeasureToolCore.vcxproj`, `MeasureToolUI.csproj`) to suppress specific warnings (81010002) and exclude NuGet cache files from code analysis, reducing noise and improving build performance. [[1]](diffhunk://#diff-76320b3a74a9241df46edb536ba0f817d7150ddf76bb0fe677e2b276f8bae95aL3-R18) [[2]](diffhunk://#diff-4f2b49a1a5cc7da36ee6d5044792ef681fd0ea5bea12db9ebd4c3090680d4b07R6-R11) **Project reference and output handling:** * Updated the managed project (`MeasureToolUI.csproj`) to handle native project outputs more robustly, ensuring the WinMD and DLL files are available at runtime and configuring the project reference to avoid assembly reference issues. **Compiler configuration:** * Enhanced C++ compiler settings in `Cpp.Build.props` to treat angle-bracket includes as external, disable warnings and analysis for external headers, and optimize build performance. commit 7e791f2815dbfc84319d14faf9bedf30f7bb9fde Author: Dave Rayment <[email protected]> Date: Mon Dec 8 01:45:46 2025 +0000 [ImageResizer] Fix Fill mode not cropping image when Shrink Only was engaged and scale was 1 (#43855) ## Summary of the Pull Request This PR fixes an Image Resizer issue where **Fill** mode operations were silently aborted when **Shrink Only** was enabled (the default) and scale was 1.0 on one dimension, resulting in files that were renamed according to the intended target size but which actually contained the original, unmodified image. This also fixes a latent bug regarding square images and the **Ignore Orientation** setting, and improves the readability of the core `Transform` method. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #43772 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments ### Fix **Shrink Only** logic preventing the correct cropping of images **Issue:** When using **Fill** mode, the scaling factor is calculated based on the larger dimension to ensure the image fills the target box. In scenarios where one dimension matches the target and the other overflows (e.g. shrinking a 100x100 pixel image to 50x100), the calculated scale factor is `1.0`. The previous `ShrinkOnly` logic included this: ```csharp if (_settings.ShrinkOnly && _settings.SelectedSize.Unit != ResizeUnit.Percent && (scaleX >= 1 || scaleY >= 1)) { return source; } ``` This correctly prevents `ShrinkOnly` operations from returning upscaled result images, but it also exits too early for cases where the user is cropping the image across one dimension only, leaving the other at scale 1. Effectively, the later cropping code is never run and instead of returning the cropped image, the original is returned. The _intended_ target dimensions are correct, which results in the filename parts not matching the resulting image size. **Fix:** The logic has been split between upscaling and cropping, so: 1. If the scale on either dimension is > `1.0`, return the source (explicitly preventing upscaling for **Shrink Only** mode). 2. If the scale is <= `1.0` then check if the original dimensions exceed the target dimensions. If a crop is required, proceed with it even if the scale is exactly `1.0`. ### Fix for square images triggering orientation swap **Issue:** The "Ignore Orientation" check in the original code used a compound boolean check: ```csharp (originalWidth < originalHeight != width < height) ``` This clever but less than readable statement detects orientation mismatches. The section also includes a logic issue. When the original image was square, `originalWidth < originalHeight` evaluated to `false`, treating it as Landscape. If the target dimensions were Portrait, the logic detected a mismatch and swapped the target dimensions incorrectly, which would crop the height instead of the width. 'Fortunately' this bug was masked by the first bug, as the crop code would never be reached anyway. **Fix:** The orientation detection routine was refactored to explicitly check for Landscape vs. Portrait states. Square images are now naturally excluded, as they have neither Landscape nor Portrait orientations. This now prevents the dimensions from being swapped. ### Refactoring/readability The main `Transform` method has been cleaned up: - Replaced widespread use of `var` with `double` and `int` for dimension and scale calculations. - Replaced the non-obvious XOR orientation check (`a < b != c < d`) with named booleans (`isInputLandscape`, `isTargetPortrait` etc.) to make the intent more self-documenting. - New and expanded comments throughout. <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed Three new unit tests have been added to `ResizeOperationTests.cs` to cover the **Fill** mode edge cases: 1. `TransformHonorsFillWithShrinkOnlyWhenCropRequired`: Verifies than an image requiring a crop but no scaling is processed correctly (tests that the original bug report is resolved). 2. `TransformHonorsFillWithShrinkOnlyWhenUpscaleAttempted`: Confirms that when `ShrinkOnly` is set, any upscaling operations are still blocked. 3. `TransformHonorsFillWithShrinkOnlyWhenNoChangeRequired`: Verifies that the system returns the source if neither scaling nor cropping is required. I also manually verified the bug fix with a test 4000 x 6000 pixel source file with 1920 x `Auto` **Fill** mode and **Shrink Only** settings, mirroring the original user's settings, and their source and target dimensions. commit 2b0ecc2979b6bbe0c017045199ea10873caedd65 Author: Noraa Junker <[email protected]> Date: Sun Dec 7 19:36:05 2025 +0100 Quick accent character set fixes (#43504) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request * Fix double uppercase theta character * Fix some redundant special symbols <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #43457 #43137 #41570 - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx commit 45cf3de15d8ea159fb2426eb2b186a6af2c5c082 Author: Jiří Polášek <[email protected]> Date: Sun Dec 7 10:18:02 2025 +0100 CmdPal: Fix a line-break in RDC extension error toasts (#44129) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This PR fixes a line break in the RDC extension toast message, replacing unescaped \r with a new line (\r in the XML is not recognized as a new line escape sequence). <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit bf8c5485017cdd62cba2c963f88ba67a55bc3beb Author: Jiří Polášek <[email protected]> Date: Sun Dec 7 10:10:45 2025 +0100 CmdPal: Make text of text Settings button on Command Bar localizable (#44128) ## Summary of the Pull Request See title <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #44108 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit 121c6c07124d81903373a5f64fc1654042440d90 Author: Carlos Rafael Ramirez <[email protected]> Date: Sun Dec 7 02:54:10 2025 +0100 Add RGB hex color preview to Advanced Paste clipboard history (#43990) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This pull request adds support for recognizing and displaying clipboard items that are valid RGB hex color codes (such as `#FFBFAB` or `#abc`) in the Advanced Paste module. It introduces logic to detect hex color strings, converts them to color values, and updates the UI to show a color preview for these items. The changes also include comprehensive unit tests for the new functionality. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #43538 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments **Clipboard color detection and conversion:** * Added `ClipboardItemHelper.IsRgbHexColor` method using a compiled regex to identify valid hex color strings in clipboard text. [[1]](diffhunk://#diff-7429196ad30cd0bce57b102669da4dc13d43a09579e99ceac7cc0f7dc101cd2bR62-R86) [[2]](diffhunk://#diff-7429196ad30cd0bce57b102669da4dc13d43a09579e99ceac7cc0f7dc101cd2bR112-R114) * Introduced `HexColorConverterHelper.ConvertHexColorToRgb` utility to convert hex color strings to `Windows.UI.Color`, handling both 3-digit and 6-digit formats. **UI enhancements for color previews:** * Updated `ClipboardHistoryItemPreviewControl` to include a color preview grid that displays an ellipse filled with the detected color and the color code as text, using the new `HexColorToBrushConverter`. [[1]](diffhunk://#diff-2ed6014d4c17037b9cd0ab397e40b9069b1e7fe47a700673f34e8217d78124d5R29-R48) [[2]](diffhunk://#diff-2ed6014d4c17037b9cd0ab397e40b9069b1e7fe47a700673f34e8217d78124d5R14) [[3]](diffhunk://#diff-0c26c92697f6bb38fa40160fc8b18f0876ddc8d828a510034411001aa2e05063R1-R28) * Modified logic in `ClipboardHistoryItemPreviewControl.xaml.cs` to ensure color previews are shown only for detected color items and to adjust visibility of text and glyph previews accordingly. **Unit tests for color detection and conversion:** * Added unit tests for hex color conversion (`HexColorToColorConverterTests.cs`) and color detection logic (`ClipboardItemHelperTests.cs`) to verify correct behavior for valid, invalid, and edge-case inputs. [[1]](diffhunk://#diff-d81d997d5fb414f1563c31c38681113aaa9c847ef05bb77662d30bd1310d6b8eR1-R61) [[2]](diffhunk://#diff-185e8954ca6f061bf5d60d0c61ac6cfd87bd1a48ebda11a8172e3496a050fe85R1-R36) <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed * Copied to the clipboard a color encoded text like: #FFBFAB * Opened Advanced Paste and noticed the color: <img width="467" height="309" alt="image" src="https://github.com/user-attachments/assets/6cedce89-9833-4efb-abf9-3cfe8e8f32f0" /> --------- Co-authored-by: Copilot <[email protected]> Co-authored-by: crramirez <[email protected]> Co-authored-by: Copilot <[email protected]> commit e68526b8d8fce059a0ccd1026a6d6e9780efa808 Author: Jiří Polášek <[email protected]> Date: Fri Dec 5 23:32:24 2025 +0100 CmdPal: Add configuration option for Escape key behavior (#43354) ## Summary of the Pull Request This PR adds a new option to the **General** page in **Settings**: Escape key behavior — a dropdown with the following choices: - Clear search first, then go back - Current behavior. - If the search box contains text, it is cleared; otherwise goes back. - On the home page, CmdPal is dismissed. - Go back - Leaves the search text intact. - If the page is not transient, the search text reappears when returning. - On the home page, CmdPal is dismissed. - Hide window and go home (Always dismiss) - Immediately dismisses CmdPal and navigates to the home page. - Ignores the **Go home when activated** setting. - Search text is cleared. - Hide window - Just hides the window. - Intended to be used with #43355. This implementation preserves existing behavior, except for **Always dismiss**, which always forces navigation to the home page. ## Pictures? Pictures! <img width="1305" height="892" alt="image" src="https://github.com/user-attachments/assets/562e5604-1da6-4fc6-8358-5053df9c573d" /> <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #38311 - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit 995a699de77110570c9b1172792a5def3b82be36 Author: ruslanlap <[email protected]> Date: Fri Dec 5 18:21:01 2025 +0200 [PowerToysRun][Docs] Add QuickAI plugin to third-party plugins list (#43238) Adds QuickAI plugin to the third-party plugins documentation. QuickAI is an AI-powered assistance plugin that provides instant, smart responses from multiple providers (Groq, Together, Fireworks, OpenRouter, Cohere) directly in PowerToys Run. Repository: https://github.com/ruslanlap/PowerToysRun-QuickAi --------- Co-authored-by: Niels Laute <[email protected]> commit 5f6df35d8d741066734a0fe446c94dfc64890072 Author: Copilot <[email protected]> Date: Fri Dec 5 10:20:33 2025 -0600 Add semantic headings to Dashboard page for accessibility (#42438) ## Summary Fixes #37668 by adding proper semantic heading structure to the Dashboard (Home) page, enabling screen reader users to navigate the page efficiently using heading shortcuts. ## Problem The Dashboard page lacked semantic heading elements, making it difficult for users of assistive technologies to understand the page structure and navigate between sections. When using screen readers with heading navigation (H key in scan mode), no headings were announced, violating WCAG 2.2 Success Criterion 1.3.1 (Info and Relationships). ## Solution Added `AutomationProperties.HeadingLevel` attributes to provide proper heading hierarchy: 1. **Dashboard Title** - Marked as Level 1 (H1) heading - Added `AutomationProperties.HeadingLevel="1"` to the "Home" page title - Follows the same pattern as `SettingsPageControl.xaml` 2. **Card Titles** - Marked as Level 2 (H2) headings - Added `AutomationProperties.HeadingLevel="Level2"` to the Card component - Applies to all card sections: "Quick Access", "Shortcuts Overview", and "Utilities" - Follows the same pattern as `SettingsGroup.xaml` ## Resulting Structure ``` H1: Home (Dashboard Title) ├─ H2: Quick Access ├─ H2: Shortcuts Overview └─ H2: Utilities ``` ## Impact - Screen reader users can now use heading navigation (H key) to jump between sections on the Dashboard page - Provides proper document structure that follows WCAG 2.2 Level A guidelines - No visual or functional changes - only accessibility metadata added - Consistent with existing accessibility patterns used throughout the Settings UI ## Testing - Changes follow existing patterns in `SettingsPageControl.xaml` (Level 1) and `SettingsGroup.xaml` (Level 2) - Only XAML accessibility attributes added - no code logic changes - Minimal, surgical changes: 2 lines across 2 files ## References - Issue: #37668 - WCAG 2.2: [Success Criterion 1.3.1 - Info and Relationships](https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships) <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>No Heading Defined on the Home Page.</issue_title> > <issue_description>### Microsoft PowerToys version > > v0.94.2 > > ### Installation method > > PowerToys auto-update > > ### Area(s) with issue? > > New+ > > ### Steps to reproduce > > **Repro Steps:** > > 1. Open the Power Toys. > 2. Now Select Home from the left navigation pane. > 3. Now Turn on narrator and turn on scan mode. > 4. Now use Quick navigation H key for headings. > 5. Observe the issue. > > ### ✔️ Expected Behavior > > The home page should contain at least one semantic heading (typically an <h1>) that describes the main topic or purpose of the page. > > ### ❌ Actual Behavior > > The home page does not contain any semantic heading tags (e.g., <h1>, <h2>, etc.). While text may be visually styled to look like headings, no actual heading elements are present in the page’s HTML structure. > > ### Additional Information > > **User Impact:** > Users of screen readers and other assistive technologies rely on headings to understand the structure of the page and navigate efficiently. > > **WCAG Reference:** > https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships > > **Attachments:** > > https://github.com/user-attachments/assets/5140b50c-67fc-40d5-bf80-40e2a2bb7782 > > ### Other Software > > _No response_</issue_description> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > </comments> > </details> Fixes microsoft/PowerToys#42421 <!-- START COPILOT CODING AGENT TIPS --> --- 💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs. --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: niels9001 <[email protected]> Co-authored-by: Niels Laute <[email protected]> commit cffdecbc1b6f614a2fc49a0c67db6d8f0c98bca4 Author: Noraa Junker <[email protected]> Date: Fri Dec 5 14:55:45 2025 +0100 Add documentation of bot commands and fix some devdocs (#43399) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request * Fixes location of `style.md` file * Deletes duplicated `localization.md` file * Adds documentation about the bot commands. * Adds links to aka.ms link docs and the new document <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Dev docs:** Added/updated commit a4d8405957197c19fef0735978a52c49f4d3a5eb Author: Noraa Junker <[email protected]> Date: Fri Dec 5 14:54:13 2025 +0100 Fix dpi issues in Quick Accent (#43314) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #40865 - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit cdf66a70e9f0ccc53aa2ef016039dcc140a30a7a Author: Niels Laute <[email protected]> Date: Fri Dec 5 14:33:59 2025 +0100 [AdvancedPaste] Fix outdated string in Settings (#44099) Updating and removing outdated strings. Updated string: <img width="1565" height="323" alt="image" src="https://github.com/user-attachments/assets/3dcad3b9-7ba9-4d87-ab36-405a8e1705db" /> commit 9dcddfd4b811207b04ae274e1e12fbd0eeb8d29c Author: Valentin Arthur Thomas <[email protected]> Date: Fri Dec 5 11:57:01 2025 +0100 Quotation mark (#30481) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Add Quotation mark Add local quotation based on ~~VK_OEM_7(0xDE)~~ VK_OEM_COMMA(0xBC) key. Not all quotes have been added, only `‟ „ ” « » ‚ , ‘ ’ › ‹ '「 」 《 》 『 』〈 〉″ ‴ ⁗` Why not added : - ` ⹂ ⌜ ⌝ ❛ ❜ ❝ ❞ 🙶 🙷 🙸 ' 「 」 ` its redundant and would make too much and not readable. - ` ﹁ ﹂ ﹃ ﹄ ` I did not put them because there use for horizontal text <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: https://github.com/microsoft/PowerToys/issues/29371 https://github.com/microsoft/PowerToys/issues/24832 - [ ] **Communication:** I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end user facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places (None) - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed or any additional comments/features here --> This PR is currently a draft, I still need to know if adding language-related keyboard management is a good idea or specifying the use of a gobal key to make it easier to manage all the keyboards in one. Some languages can use different keyboards, I think this would become problematic if the keyboard does not match the key used by default. However, using a universal key can also pose an issue to finding the key. that remains to be discussed <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed commit 503bcbdf2d44d2002293bc35c23846e7d572c58c Author: Copilot <[email protected]> Date: Fri Dec 5 07:33:37 2025 +0100 Restore missing "Quick access" menu item in tray icon context menu (#42676) ## Summary Restores the "Quick access" menu item that was accidentally removed from the PowerToys tray icon context menu. ## Issue Fixes #[issue_number] The "Quick access" menu item was missing from the tray icon's right-click context menu, preventing users from accessing this feature via the tray menu. **Expected menu:**  **Actual menu (before this fix):**  ## Changes - Added the missing `MENUITEM "Quick access\tLeft-click", ID_QUICK_ACCESS_MENU_COMMAND` entry as the first menu item in the `ID_TRAY_MENU` definition in `src/runner/runner.base.rc` ## Details The menu item was accidentally removed in commit f5797a065a5c2c448fd2b1780bd1353d712103c3. This PR restores it to its correct position as the first item in the tray menu. All supporting code was already in place: - The resource ID `ID_QUICK_ACCESS_MENU_COMMAND` (40006) is defined in `resource.base.h` - The resource string `QUICK_ACCESS_MENU_TEXT` is defined in `Resources.resx` - The menu command handler in `tray_icon.cpp` opens the Quick Access flyout window - The localization code updates the menu text at runtime ## Testing - ✅ Verified the menu item syntax is correct and matches existing patterns - ✅ Confirmed all supporting resource IDs and handler code exist - ✅ CI build verification pending After this fix, the tray menu will correctly display: 1. Quick access (Left-click) 2. Settings (Double-click) 3. Documentation 4. Report Bug 5. Close <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>Quick Access missing in tray menu</issue_title> > <issue_description>### Microsoft PowerToys version > > 0.95.0 > > ### Installation method > > PowerToys auto-update > > ### Area(s) with issue? > > System tray interaction > > ### Steps to reproduce > > 1. Right click the tray icon > 2. Look at the list of items which can be selected > 3. Notice that the "Quick access" is missing > > Expected menu ("Exit" is now "Close" I took this image from initial implementation): > > <img width="234" height="127" alt="Image" src="https://github.com/user-attachments/assets/805b1436-5a08-42e7-a34d-b9848fd9a235" /> > > Actual menu right now: > > <img width="239" height="105" alt="Image" src="https://github.com/user-attachments/assets/7584035d-e893-4f73-acc3-84d789e31e81" /> > > ### ✔️ Expected Behavior > > The "Quick access" menu item should be there > > ### ❌ Actual Behavior > > The menu item is missing > > ### Additional Information > > Windows 10 Pro 22H2 19045.6332 > > (Also it is the same on my other computers) > > ### Other Software > > _No response_</issue_description> > > <agent_instructions>restore > > MENUITEM "Quick access\tLeft-click", ID_QUICK_ACCESS_MENU_COMMAND > > as first menu item of ID_TRAY_MENU MENU in src/runner/runner.base.rc</agent_instructions> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > <comment_new><author>@niels9001</author><body> > @davidegiacometti is this a regression from the PR where we updated the string names?</body></comment_new> > <comment_new><author>@davidegiacometti</author><body> > Hi @niels9001 > I just realized that the menu was missing in https://github.com/microsoft/PowerToys/pull/40714 screenshots, but the regression was caused by https://github.com/microsoft/PowerToys/commit/f5797a065a5c2c448fd2b1780bd1353d712103c3. > Unfortunately, many of the `.rc` files in the PT codebase have UTF16-LE encoding and GitHub doesn't show diff.</body></comment_new> > </comments> > </details> Fixes microsoft/PowerToys#42618 <!-- START COPILOT CODING AGENT TIPS --> --- 💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click [here](https://survey3.medallia.com/?EAHeSx-AP01bZqG0Ld9QLQ) to start the survey. --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: davidegiacometti <[email protected]> commit 52f25619373ccb9af0fa0fbc7da916297ecac897 Author: Jiří Polášek <[email protected]> Date: Wed Dec 3 17:16:25 2025 +0100 CmdPal: Find app for WinGet package (#43943) <!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This PR introduces a bit of dark magic to resolve the correct installed app for a given WinGet package: - Packaged apps: matched using their package family name. - Everything else: matched using the product code (GUID) and heuristic registry lookup. - The registry rarely stores the executable path directly, so the logic compares install locations with known apps. - It attempts to pick the best candidate while avoiding uninstallers. - It’s not science — let’s call it `#666666` magic. - MSI API support was removed because it's too slow for this scenario. - If no reliable match is found, the command is skipped for now. The future plan is to redirect the user to the list of installed apps and search by display name, but that needs some supporting infrastructure first. - The command order for WinGet list entries was updated: **Install / Uninstall** is now the primary action, ensuring a stable UI since this command is always available. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #43671 <!-- - [ ] Closes: #yyy (add separate lines for additional resolved issues) --> - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required…
Summary of the Pull Request
Adds a new command-line interface (CLI) tool for FancyZones, enabling users and automation scripts to manage window layouts without the GUI.
Commands:
helpopen-editoreditor,eget-monitorsmonitors,mget-layoutslayouts,lsget-active-layoutactive,aset-layout <uuid>set,sopen-settingssettingsget-hotkeyshotkeys,hkset-hotkey <key> <uuid>shkremove-hotkey <key>rhkKey Capabilities:
--monitor Nor--all)Example Usage
output6.mp4
PR Checklist
Detailed Description of the Pull Request / Additional comments
Validation Steps Performed