CmdPal: Extension list search#41453
Conversation
Adds a rough implementation that appears to work, but it hasn’t been tested. Don’t rely on it yet—I’m too tired to test properly or write a polished commit message.
|
@zadjii-msft @michaeljolley @niels9001 Keep this or drop it? |
|
oh this is hawt |
|
Hi, I have to upgrade the collection backing up the list. I think some advanced collection from Toolkit should now be available. |
zadjii-msft
left a comment
There was a problem hiding this comment.
This is super cool, definitely want to ship it. Let's just get rid of the weird tooltip from that automation property hanging around
src/modules/cmdpal/Microsoft.CmdPal.UI/Strings/en-us/Resources.resw
Outdated
Show resolved
Hide resolved
src/modules/cmdpal/Microsoft.CmdPal.UI/Settings/ExtensionsPage.xaml
Outdated
Show resolved
Hide resolved
src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/SettingsExtensionsViewModel.cs
Show resolved
Hide resolved
|
Do you want to ship this in 0.95? Just so I know how to prioritize this |
|
On way to wrap this up. While I'm sweeping away the spiders and bugs, does @niels9001 have any comments on how to improve or make it fit better? |
|
@jiripolasek We had some thoughts around the call out for extensions. PM art:
Mind if I push changes for this directly to this branch 😊? |
|
Sure, go ahead! Or if you don't have it coded yet, I can implement it for you. I have to double check everything in this branch anyway |
|
@niels9001 Looking at the concept, I’m a bit worried the buttons might suffer from banner blindness. Something more conventional (or at least less bannerish) might work better. |
Yeah, maybe. For activation, it feels like we need something at the top though - as by default the Store card is all the way at the bottom and might be hard to miss? Settings experiences overall have a challenge conveying certain information, as everything is mostly a SettingsCard and they all look the same haha |
With that, I can only agree. I didn’t want to push my luck by introducing any “random” new design elements and I hoped there will time to iterate on it.
Here I was thinking that maybe plain toolbar-style buttons might do the trick. I’d throw in a green “+” icon (eco-friendly!) and hope for the best. Or maybe just lose the “box” to make it look less like a banner. |
@niels9001 Could you please mark the branch as Ready for review when you're done with it? |
|
@jiripolasek I've synced with the design team. Their suggestion: jiripolasek#12 |
* Banner exploration * Updated UI * More feedback from design team * String update * Update ExtensionsPage.xaml * Update ExtensionsPage.xaml
This comment has been minimized.
This comment has been minimized.
|
The WinGet button on the Extensions page is hidden because it requires summoning a specific page and handle possibility of WinGet extension being disabled: #42216 |
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
Oh, squirrel! I think that's #41482 manifesting in a new way |
|
@michaeljolley This won't crash the app, it just gets trapped by the debugger, right? I don't think there's anything to address here for this PR. It seems like a natural error, as the Command Palette is trying to access an extension that was terminated (0x800706BA = RPC_S_SERVER_UNAVAILABLE). I couldn't respond to this even if I wanted to, as it occurs in a different or random code path. |
|
An anti-conflict team of highly trained squirrels was dispatched... 🐿️ |
There was a problem hiding this comment.
Pull Request Overview
This PR adds a new extensions management page to the Command Palette settings UI with search, filtering, and reload capabilities. The changes introduce a banner to discover extensions, search functionality with keyboard shortcut support (Ctrl+F), and the ability to manually reload extensions.
Key changes:
- New
SettingsExtensionsViewModelto handle extension filtering and search - Enhanced
ExtensionsPage.xamlwith search UI, banner, and empty states - Messaging infrastructure for reload coordination via
ReloadFinishedMessage
Reviewed Changes
Copilot reviewed 10 out of 14 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| Resources.resw | Adds localization strings for extensions page UI elements |
| ExtensionsPage.xaml | Implements new UI with banner, search box, filtering, and responsive layout |
| ExtensionsPage.xaml.cs | Adds keyboard accelerator handler for Ctrl+F search focus |
| SettingsExtensionsViewModel.cs | New view model implementing search/filter logic for extensions |
| TopLevelCommandManager.cs | Sends reload finished message after loading extensions |
| SettingsViewModel.cs | Instantiates and exposes the new Extensions view model |
| Properties/Resources.resx & Designer.cs | Adds format strings for extension count labels |
| ReloadFinishedMessage.cs | New message type for reload completion signaling |
| StoreLogo.dark.svg & StoreLogo.light.svg | Microsoft Store branding assets |
| WinGetLogo.svg | WinGet branding asset |
| Microsoft.CmdPal.UI.csproj | Registers new SVG assets |
| expect.txt | Adds "Figma" to spell-check dictionary |
Files not reviewed (1)
- src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Properties/Resources.Designer.cs: Language not supported
| <value>Find extensions on WinGet</value> | ||
| </data> | ||
| <data name="Settings_ExtensionsPage_FindExtensions_WinGet.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> | ||
| <value>Microsoft Store</value> |
There was a problem hiding this comment.
The AutomationProperties.Name for the WinGet button is incorrectly set to 'Microsoft Store'. It should be 'WinGet' to match the button's purpose and tooltip.
| <value>Microsoft Store</value> | |
| <value>WinGet</value> |
| <value>Reload extensions</value> | ||
| </data> | ||
| <data name="Settings_ExtensionsPage_Reloading_Text.Text" xml:space="preserve"> | ||
| <value>Reloading extensions..</value> |
There was a problem hiding this comment.
Use a proper ellipsis character '…' or three periods '...' instead of two periods '..'.
| <value>Reloading extensions..</value> | |
| <value>Reloading extensions…</value> |
| <!--<GradientStop Offset="0" Color="#E6F0FC" /> | ||
| <GradientStop Offset="0.4" Color="#E6F0FC" /> | ||
| <GradientStop Offset="1" Color="#F0F0F7" />--> |
There was a problem hiding this comment.
Remove commented-out code. If these gradient values might be needed later, document the reason in a separate comment or remove them entirely.
| <!--<GradientStop Offset="0" Color="#E6F0FC" /> | |
| <GradientStop Offset="0.4" Color="#E6F0FC" /> | |
| <GradientStop Offset="1" Color="#F0F0F7" />--> |
| <GradientStop Offset="1.0" Color="#FFF5F8FA" /> | ||
| <!-- Slight bluish-gray tint --> | ||
| <!-- Faint peach glow --> | ||
| <!-- Soft peach --> |
There was a problem hiding this comment.
These orphaned comments reference colors that are not present in the code. Remove them to avoid confusion.
| <!-- Soft peach --> |
## Summary of the Pull Request Adds a rough implementation that appears to work, but it hasn’t been tested. Don’t rely on it yet—I’m too tired to test properly or write a polished commit message. Pictures? Pictures! <img width="2720" height="1624" alt="image" src="https://github.com/user-attachments/assets/4f9c3360-8d08-4a34-888f-c6890afd0159" /> <img width="2647" height="1558" alt="image" src="https://github.com/user-attachments/assets/3d6c23bc-f26d-4e31-ae09-d91efd304048" /> <img width="2683" height="1536" alt="image" src="https://github.com/user-attachments/assets/6017b2d4-ccd9-4555-b81f-e2b1f78c48e5" /> <img width="577" height="334" alt="image" src="https://github.com/user-attachments/assets/987fea99-05b2-4d31-b90c-327122daa241" /> https://github.com/user-attachments/assets/65a8f8ce-ae09-4272-881d-0b6f56cecfae <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #41451 - [x] Closes: #42031 - [x] Closes: #41800 - [ ] **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 --------- Co-authored-by: Niels Laute <niels.laute@live.nl> Co-authored-by: Michael Jolley <mike@baldbeardedbuilder.com>






Summary of the Pull Request
Adds a rough implementation that appears to work, but it hasn’t been tested. Don’t rely on it yet—I’m too tired to test properly or write a polished commit message.
Pictures? Pictures!
Recording.2025-10-07.162112.mp4
PR Checklist
Detailed Description of the Pull Request / Additional comments
Validation Steps Performed