Skip to content

Conversation

@michaeljolley
Copy link
Contributor

This is a draft for a reason

Warning

This is not fully baked. All features are there and work as expected but the design of the fallback "ranker" is still a WIP

Important

However, for extension developers, this release includes a new required string Id property for FallbackCommandItem. While your existing extensions will continue to work, without this Id being set, your fallbacks will not display and will not be rankable.
Before this is released, you will want to prepare your extension fallbacks.

As an example, we are naming our built-in extensions as:

  • Calculator extension provider Id: com.microsoft.cmdpal.builtin.calculator
  • Calculator extension fallback: com.microsoft.cmdpal.builtin.calculator.fallback

While the content of the Id isn't important, what is important is that it is unique to your extension and fallback to avoid conflicting with other extensions.

Now the good stuff:

What the heck does it do!?

The backstory

In PowerToys 0.95, we released performance improvements to Command Palette. One of the many ways we improved its speed is by no longer ranking fallback commands with other "top level" commands. Instead, all fallbacks would surface at the bottom of the results and be listed in the order they were registered with Command Palette. But this was only a temporary solution until the work included in this pull request was ready.

In reality, not all fallbacks were treated equally. We marked the calculator and run fallbacks as "special." Special fallbacks were ranked like top-level commands and allowed to surface to the top of the results.

The new "hotness"

This PR brings the power of fallback management back to the people. In the Command Palette settings, you, dear user, can specify what order you want fallbacks to display in at the bottom of the results. This keeps those fallbacks unranked by Command Palette but displays them in an order that makes sense for you. But keep in mind, these will still live at the bottom of search results.

But alas, we have also heard your cries that you'd like some fallbacks to be ranked by Command Palette and surface to the top of the results. So, this PR allows you to mark any fallback as "special." Special fallbacks are treated like "top level" commands and appear in the search result based on their title & description.

Screenshots/video

I'll update this PR with a video once the settings UI has been solidified. Posting what it looks like today would be misleading.

GitHub issue maintenance details

Closes #38312
Closes #38288
Closes #42524
Closes #41024
Closes #40351
Closes #41696


internal sealed partial class FallbackOpenURLItem : FallbackCommandItem
{
private const string _id = "com.microsoft.cmdpal.builtin.websearch.openurl.fallback";

Check failure

Code scanning / check-spelling

Unrecognized Spelling Error

openurl is not a recognized word. (unrecognized-spelling)
@michaeljolley michaeljolley added the Product-Command Palette Refers to the Command Palette utility label Nov 13, 2025
@github-actions
Copy link

@check-spelling-bot Report

🔴 Please review

See the 📂 files view, the 📜action log, or 📝 job summary for details.

Unrecognized words (3)

CLITo
Notavailable
openurl

These words are not needed and should be removed cabstr CIBUILD claude djwsxzxb installscopeperuser ksa Olllama registryroot regroot rtm suntimes TARGETDIR utm

To accept these unrecognized words as correct and remove the previously acknowledged and now absent words, you could run the following commands

... in a clone of the [email protected]:microsoft/PowerToys.git repository
on the dev/mjolley/fallbacks branch (ℹ️ how do I use this?):

curl -s -S -L 'https://raw.githubusercontent.com/check-spelling/check-spelling/c635c2f3f714eec2fcf27b643a1919b9a811ef2e/apply.pl' |
perl - 'https://github.com/microsoft/PowerToys/actions/runs/19346734615/attempts/1' &&
git commit -m 'Update check-spelling metadata'
Warnings ⚠️ (1)

See the 📂 files view, the 📜action log, or 📝 job summary for details.

⚠️ Warnings Count
⚠️ ignored-expect-variant 1

See ⚠️ Event descriptions for more information.

If the flagged items are 🤯 false positives

If items relate to a ...

  • binary file (or some other file you wouldn't want to check at all).

    Please add a file path to the excludes.txt file matching the containing file.

    File paths are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your files.

    ^ refers to the file's path from the root of the repository, so ^README\.md$ would exclude README.md (on whichever branch you're using).

  • well-formed pattern.

    If you can write a pattern that would match it,
    try adding it to the patterns.txt file.

    Patterns are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your lines.

    Note that patterns can't match multiline strings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Product-Command Palette Refers to the Command Palette utility

Projects

None yet

2 participants