Skip to content
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

[PT Run][New Plugin] Time zone plugin #11431

Merged
merged 70 commits into from
Feb 23, 2022

Conversation

TobiasSekan
Copy link
Contributor

@TobiasSekan TobiasSekan commented May 24, 2021

Summary of the Pull Request

What is this about:
Time Zone plugin for PT Run

Features:

  • Search for country, like Kamchatka, Prince Edward Island, France
  • Search for time (zone) name , like Pacific, Mountain, Central
  • Search for shortcuts, like WEST, UTC, PST
  • Search for offset, like -12:00, -7, 5, 9:30
  • Search for military time zone name (must activate in plugin settings)
  • Support DST (Daylight Saving Time)
  • Copy current time in the timezone to clipboard
  • Tool-tip with all timezone info (names, shortcuts, countries)

2022-01-06 09_30_13-

2022-01-06 09_30_38-PowerToys (Running) - Microsoft Visual Studio

What is include in the PR:

  • New PT Run plugin
  • RESX file
  • JSON with all time zones that are currently used by countries (only one entry for each time zone)
  • JSON schema for the JSON with the time zones

How does someone test / validate:
Manual testing

Quality Checklist

  • Linked issue: [Run][New Plugin] Time/time zone conversions  #4599
  • Communication: I've discussed this with core contributors in the issue.
  • Tests: Added/updated and all pass
  • Installer: Added/updated and all pass
  • Localization: All end user facing strings can be localized
  • Docs: Added/ updated
  • Binaries: Any new files are added to WXS / YML

Contributor License Agreement (CLA)

A CLA must be signed. If not, go over here and sign the CLA.

@TobiasSekan TobiasSekan changed the title Time zone plugin [Draft][PT Run][New Plugin] Time zone plugin May 24, 2021
@TobiasSekan TobiasSekan marked this pull request as draft May 24, 2021 11:57
@TobiasSekan TobiasSekan changed the title [Draft][PT Run][New Plugin] Time zone plugin [PT Run][New Plugin] Time zone plugin May 24, 2021
@htcfreek
Copy link
Collaborator

We could user default time symbol or we may create a new icon form clock and globe.

@htcfreek
Copy link
Collaborator

htcfreek commented May 24, 2021

@TobiasSekan
I suggest

  • to have this subtitle: Current zone time: ... - Time offset: +9:30
  • let's write +9:30 in the tooltip.
  • In which relation is offset calculated? (System time zone or UTC?)
  • Allowvto search without + or - to get both time zones (negative and positive). [Added later by updating comment]

@htcfreek
Copy link
Collaborator

@TobiasSekan
Does the plugin have a zone for UTC?

@crutkas
Copy link
Member

crutkas commented Sep 24, 2021

i like this plugin very much

@TobiasSekan
Copy link
Contributor Author

I have seen that I can't take only the first letters of the name of a Time-Zone to match the Time-Zone shortcut (like UTC),

so I will add a separate JSON to match all possible shortcuts and the official cities of the time zones.
I hope i can finished this in the next month (it is a lot of work).

Stay tuned

BTW: What should I do about cities that have more than one Time-Zones? Any Ideas?

@crutkas
Copy link
Member

crutkas commented Sep 30, 2021

My opinion is just leverage basic date time shifts. Time zone stuff is NP hard problem IMO

@TobiasSekan TobiasSekan changed the title [PT Run][New Plugin] Time zone plugin [WIP][PT Run][New Plugin] Time zone plugin Oct 21, 2021
@TobiasSekan
Copy link
Contributor Author

@niels9001 Can you make a light and dark symbol for the timezone plugin?

@niels9001
Copy link
Contributor

@niels9001 Can you make a light and dark symbol for the timezone plugin?

Will do!


var stringBuilder = new StringBuilder();

stringBuilder.Append(Resources.Name).Append(':').Append(' ').AppendLine(timeZone.Name);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If possible please use the suggested syntax which is easier to read:

Suggested change
stringBuilder.Append(Resources.Name).Append(':').Append(' ').AppendLine(timeZone.Name);
stringBuilder.Append($"{Resources.Name}: {timeZone.Name}");

@Jay-o-Way Jay-o-Way added the Run-Plugin Things that relate with PowerToys Run's plugin interface label Dec 1, 2021
@crutkas
Copy link
Member

crutkas commented Dec 23, 2021

@TobiasSekan do you need anything from us to wrap this up?

@TobiasSekan
Copy link
Contributor Author

Sorry for long down time, I will work the next days on this draft to bring it into PR state, happy holidays

@crutkas You can checkout the draft an test the search results and I need a new symbol from @niels9001

@niels9001
Copy link
Contributor

niels9001 commented Dec 31, 2021

@TobiasSekan

Here's a dark and light version of an icon that should work for this plugin :).
timezone dark
timezone light

@github-actions
Copy link

github-actions bot commented Jan 27, 2022

@check-spelling-bot Report

🔴 Please review

See the files view or the action log for details.

Unrecognized words (6)

MCDT
MCST
MYTZ
Pdb
Toolset
Utc

Previously acknowledged words that are now absent ChaseKnowlden CleanCodeDeveloper CTLCOLORSTATIC Deuchert efgh errc FIXME Grayscale hmon iccex ICONINFORMATION IMonitor INITCOMMONCONTROLSEX INSTALLLOGATTRIBUTES INSTALLLOGMODE INSTALLUILEVEL LASTEXITCODE MAINICON MAKELPARAM msiexec MSIINSTALLER MSIL NATIVEFNTCTL netlify pdb Pui Qin rdeveen rexit SETRANGE SETSTEP spdth sregex STEPIT symlink taskkill toolset UITo uninit utc We'd wifstream
To accept these unrecognized words as correct (and remove the previously acknowledged and now absent words), run the following commands

... in a clone of the [email protected]:TobiasSekan/PowerToys.git repository
on the TimeZonePlugin branch:

update_files() {
perl -e '
my @expect_files=qw('".github/actions/spell-check/expect.txt"');
@ARGV=@expect_files;
my @stale=qw('"$patch_remove"');
my $re=join "|", @stale;
my $suffix=".".time();
my $previous="";
sub maybe_unlink { unlink($_[0]) if $_[0]; }
while (<>) {
if ($ARGV ne $old_argv) { maybe_unlink($previous); $previous="$ARGV$suffix"; rename($ARGV, $previous); open(ARGV_OUT, ">$ARGV"); select(ARGV_OUT); $old_argv = $ARGV; }
next if /^(?:$re)(?:(?:\r|\n)*$| .*)/; print;
}; maybe_unlink($previous);'
perl -e '
my $new_expect_file=".github/actions/spell-check/expect.txt";
use File::Path qw(make_path);
use File::Basename qw(dirname);
make_path (dirname($new_expect_file));
open FILE, q{<}, $new_expect_file; chomp(my @words = <FILE>); close FILE;
my @add=qw('"$patch_add"');
my %items; @items{@words} = @words x (1); @items{@add} = @add x (1);
@words = sort {lc($a)."-".$a cmp lc($b)."-".$b} keys %items;
open FILE, q{>}, $new_expect_file; for my $word (@words) { print FILE "$word\n" if $word =~ /\w/; };
close FILE;
system("git", "add", $new_expect_file);
'
}

comment_json=$(mktemp)
curl -L -s -S \
-H "Content-Type: application/json" \
"https://api.github.com/repos/microsoft/PowerToys/issues/comments/1023479977" > "$comment_json"
comment_body=$(mktemp)
jq -r ".body // empty" "$comment_json" > $comment_body
rm $comment_json

patch_remove=$(perl -ne 'next unless s{^</summary>(.*)</details>$}{$1}; print' < "$comment_body")

patch_add=$(perl -e '$/=undef; $_=<>; if (m{Unrecognized words[^<]*</summary>\n*```\n*([^<]*)```\n*</details>$}m) { print "$1" } elsif (m{Unrecognized words[^<]*\n\n((?:\w.*\n)+)\n}m) { print "$1" };' < "$comment_body")

update_files
rm $comment_body
git add -u
If the flagged items do not appear to be text

If items relate to a ...

  • 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.

  • binary file.

    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).

@htcfreek
Copy link
Collaborator

@TobiasSekan I have reused your plugin settings class in WindowWalker. Currently I am working on some improvements to dedup informations and code. I will ping you if it's ready.

@TobiasSekan
Done. Here you find the improved code: #16325

@TobiasSekan
Copy link
Contributor Author

@TobiasSekan I have reused your plugin settings class in WindowWalker. Currently I am working on some improvements to dedup informations and code. I will ping you if it's ready.

@TobiasSekan Done. Here you find the improved code: #16325

There is a CS8602 Dereference of a possibly null reference. leftover, it would change it to

            var settingsValue = option?.Value
                ?? GetAdditionalOptions().FirstOrDefault(x => x.Key == name)?.Value
                ?? default;

@github-actions
Copy link

github-actions bot commented Feb 21, 2022

@check-spelling-bot Report

🔴 Please review

See the files view or the action log for details.

Unrecognized words (3)

Sring
timezones
Utc

Previously acknowledged words that are now absent abap abcd abcdefgh appcontainer atop autogenerates AZCLI azurecr binskim bios btm buildcommand buildtools cameligo CCB cdpxwin cdxml CEBB CFFDAFADA ChaseKnowlden cjs CleanCodeDeveloper cljs CPPARM CPPx crutkas csx CTLCOLORSTATIC defaultcommand Deuchert dupenv DUSTIN efgh errc errorlevel estdir etcore Firefox FIXME fsscript Gamebar graphql Grayscale gsuberland hmon iccex ICONINFORMATION IMonitor INITCOMMONCONTROLSEX INSTALLLOGATTRIBUTES INSTALLLOGMODE INSTALLUILEVEL Javascript julia Knowlden kotlin ktm kts LASTEXITCODE LEQ ligo linkid litcoffee MAINICON MAKELPARAM Minimizeallwindows mkdir moderncop msiexec MSIINSTALLER MSIL namings NATIVEFNTCTL neq netlify nocache php phps plx policheck popd powerquery psc psm Pui pushd pyc pyd pyi pyo pyz Qin rda rdata rdeveen rds reportbug rexit robocopy scm SETRANGE SETSTEP SHAREIMAGELISTS smallbasic spamming spdth sregex STEPIT stx svh SWITCHEND symlink symlinks systemverilog taskkill tbc tcl timezone trackpad typeparamref UITo umd uninit UTC UWPUI vbhtml verilog vse vsix WDK wdksetup wdkvsix We'd webclient webpack wifstream WINMSAPP WTL
To accept these unrecognized words as correct (and remove the previously acknowledged and now absent words), run the following commands

... in a clone of the [email protected]:TobiasSekan/PowerToys.git repository
on the TimeZonePlugin branch:

update_files() {
perl -e '
my @expect_files=qw('".github/actions/spell-check/expect.txt"');
@ARGV=@expect_files;
my @stale=qw('"$patch_remove"');
my $re=join "|", @stale;
my $suffix=".".time();
my $previous="";
sub maybe_unlink { unlink($_[0]) if $_[0]; }
while (<>) {
if ($ARGV ne $old_argv) { maybe_unlink($previous); $previous="$ARGV$suffix"; rename($ARGV, $previous); open(ARGV_OUT, ">$ARGV"); select(ARGV_OUT); $old_argv = $ARGV; }
next if /^(?:$re)(?:(?:\r|\n)*$| .*)/; print;
}; maybe_unlink($previous);'
perl -e '
my $new_expect_file=".github/actions/spell-check/expect.txt";
use File::Path qw(make_path);
use File::Basename qw(dirname);
make_path (dirname($new_expect_file));
open FILE, q{<}, $new_expect_file; chomp(my @words = <FILE>); close FILE;
my @add=qw('"$patch_add"');
my %items; @items{@words} = @words x (1); @items{@add} = @add x (1);
@words = sort {lc($a)."-".$a cmp lc($b)."-".$b} keys %items;
open FILE, q{>}, $new_expect_file; for my $word (@words) { print FILE "$word\n" if $word =~ /\w/; };
close FILE;
system("git", "add", $new_expect_file);
'
}

comment_json=$(mktemp)
curl -L -s -S \
-H "Content-Type: application/json" \
"https://api.github.com/repos/microsoft/PowerToys/issues/comments/1047076962" > "$comment_json"
comment_body=$(mktemp)
jq -r ".body // empty" "$comment_json" > $comment_body
rm $comment_json

patch_remove=$(perl -ne 'next unless s{^</summary>(.*)</details>$}{$1}; print' < "$comment_body")

patch_add=$(perl -e '$/=undef; $_=<>; if (m{Unrecognized words[^<]*</summary>\n*```\n*([^<]*)```\n*</details>$}m) { print "$1" } elsif (m{Unrecognized words[^<]*\n\n((?:\w.*\n)+)\n}m) { print "$1" };' < "$comment_body")

update_files
rm $comment_body
git add -u
If the flagged items do not appear to be text

If items relate to a ...

  • 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.

  • binary file.

    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).

@TobiasSekan
Copy link
Contributor Author

e.g. typing "&+3" does not show +3 time zone (I have to type "&+03"), but for negative offsets it work (e.g. "&-3" works)

I have fix the search
Not it its easier to find time zones like -xx:30 or xx:45 by simple type -30 or +45 etc.


var settingsValue = option?.Value
?? GetAdditionalOptions().FirstOrDefault(x => x.Key == name)?.Value
?? default;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is default? true or false ?

Copy link
Collaborator

@htcfreek htcfreek Feb 21, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the way I think we can use .First() instead of .FirstOrDefault() ?? Default because the default value must be there. If it is not there, the setting isn't defined and the plugin code is buggy.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is default? true or false ?

is always false, same as default(bool)

@github-actions
Copy link

github-actions bot commented Feb 21, 2022

@check-spelling-bot Report

🔴 Please review

See the files view or the action log for details.

Unrecognized words (1)

timezones

Previously acknowledged words that are now absent abap abcd abcdefgh appcontainer atop autogenerates AZCLI azurecr binskim bios btm buildcommand buildtools cameligo CCB cdpxwin cdxml CEBB CFFDAFADA ChaseKnowlden cjs CleanCodeDeveloper cljs CPPARM CPPx crutkas csx CTLCOLORSTATIC defaultcommand Deuchert dupenv DUSTIN efgh errc errorlevel estdir etcore Firefox FIXME fsscript Gamebar graphql Grayscale gsuberland hmon iccex ICONINFORMATION IMonitor INITCOMMONCONTROLSEX INSTALLLOGATTRIBUTES INSTALLLOGMODE INSTALLUILEVEL Javascript julia Knowlden kotlin ktm kts LASTEXITCODE LEQ ligo linkid litcoffee MAINICON MAKELPARAM Minimizeallwindows mkdir moderncop msiexec MSIINSTALLER MSIL namings NATIVEFNTCTL neq netlify nocache php phps plx policheck popd powerquery psc psm Pui pushd pyc pyd pyi pyo pyz Qin rda rdata rdeveen rds reportbug rexit robocopy scm SETRANGE SETSTEP SHAREIMAGELISTS smallbasic spamming spdth sregex STEPIT stx svh SWITCHEND symlink symlinks systemverilog taskkill tbc tcl timezone tlbimp trackpad typeparamref UITo umd uninit UWPUI vbhtml verilog vse vsix WDK wdksetup wdkvsix We'd webclient webpack wifstream WINMSAPP WTL
To accept these unrecognized words as correct (and remove the previously acknowledged and now absent words), run the following commands

... in a clone of the [email protected]:TobiasSekan/PowerToys.git repository
on the TimeZonePlugin branch:

update_files() {
perl -e '
my @expect_files=qw('".github/actions/spell-check/expect.txt"');
@ARGV=@expect_files;
my @stale=qw('"$patch_remove"');
my $re=join "|", @stale;
my $suffix=".".time();
my $previous="";
sub maybe_unlink { unlink($_[0]) if $_[0]; }
while (<>) {
if ($ARGV ne $old_argv) { maybe_unlink($previous); $previous="$ARGV$suffix"; rename($ARGV, $previous); open(ARGV_OUT, ">$ARGV"); select(ARGV_OUT); $old_argv = $ARGV; }
next if /^(?:$re)(?:(?:\r|\n)*$| .*)/; print;
}; maybe_unlink($previous);'
perl -e '
my $new_expect_file=".github/actions/spell-check/expect.txt";
use File::Path qw(make_path);
use File::Basename qw(dirname);
make_path (dirname($new_expect_file));
open FILE, q{<}, $new_expect_file; chomp(my @words = <FILE>); close FILE;
my @add=qw('"$patch_add"');
my %items; @items{@words} = @words x (1); @items{@add} = @add x (1);
@words = sort {lc($a)."-".$a cmp lc($b)."-".$b} keys %items;
open FILE, q{>}, $new_expect_file; for my $word (@words) { print FILE "$word\n" if $word =~ /\w/; };
close FILE;
system("git", "add", $new_expect_file);
'
}

comment_json=$(mktemp)
curl -L -s -S \
-H "Content-Type: application/json" \
"https://api.github.com/repos/microsoft/PowerToys/issues/comments/1047099351" > "$comment_json"
comment_body=$(mktemp)
jq -r ".body // empty" "$comment_json" > $comment_body
rm $comment_json

patch_remove=$(perl -ne 'next unless s{^</summary>(.*)</details>$}{$1}; print' < "$comment_body")

patch_add=$(perl -e '$/=undef; $_=<>; if (m{Unrecognized words[^<]*</summary>\n*```\n*([^<]*)```\n*</details>$}m) { print "$1" } elsif (m{Unrecognized words[^<]*\n\n((?:\w.*\n)+)\n}m) { print "$1" };' < "$comment_body")

update_files
rm $comment_body
git add -u
If the flagged items do not appear to be text

If items relate to a ...

  • 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.

  • binary file.

    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).

@jaimecbernardo
Copy link
Collaborator

Hi @TobiasSekan ,
I've opened a PR to fix the remaining installer build error and spellchecker error.
TobiasSekan#2

Please review and merge it or apply the changes to your branch?
Thank you, in advance.

@TobiasSekan
Copy link
Contributor Author

Hi @TobiasSekan , I've opened a PR to fix the remaining installer build error and spellchecker error. TobiasSekan#2

Please review and merge it or apply the changes to your branch? Thank you, in advance.

Thank you 👍

Copy link
Collaborator

@jaimecbernardo jaimecbernardo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code LGTM! Tried it and works well.
Thank you for the contribution!

@jaimecbernardo jaimecbernardo merged commit 84e1426 into microsoft:main Feb 23, 2022
mshtang pushed a commit to mshtang/PowerToys that referenced this pull request Feb 28, 2022
* Initial commit - simple idea for a time zone plugin

* Translations, better search results, copy to clipboard, cleanup

* fix typo

* Add shortcut search and prepare JSON for later usage

* Fix typo

* Use timezone Data only from JSON

* Exclude json file from spell checker

* fix wrong dst

* Improved results (title, subtitle, tooltip) and fix namespace/class problem

* Always show full offset (-##:## and +##:##)

* Add and show timezone names (first pass)

* Fix typos

* fix build

* JSON: fix wrong minus sign and put extra country info the end

* Improved Subtitle for many matched countries and allow full offset search (+ and -)

* Allow more than one names for time zones and remove leftover

* Add military time zone names, and fix name result

* Only use one JSON entry for one time zone

* Use TimeSpan for offset, use build-in calculation for time in time zone

* add descriptions for JSON schema

* Fix typos

* Split out names in separate properties

* Add many time names, time zone names and shortcuts

* Add additional options and most code documentation

* Fix unreadable TimeSpans in JSON and rename helper class

* Fix not allowed commas in JSON file

* Cut to long time and time zone names in title

* Fix missing results for names and offsets

* Better result and show only one result when offset are identical (respect daylight saving time)

* Show generic name fot time zones without names

* Typo fixes

* Fix not working serach by shortcuts

* Fix german resx file -> english resx file

* Translate all names and countires

* Fix not working context menu

* Typo fixes, fix wrong shortcut in names, comments, few better variable names

* New symbols - thx to niels9001

* Search by shortcuts for time names

* update schema

* Add more time zone names and shortcuts (second pass), make spell checker happy

* Reduce matching checks

* Show shortcuts in tool-tips, avoid string converting

* Show only names that match the query

* Make all translatable (Part 1)

* Make all translatable (part 2 of 2)

* XML Doc

* Fix plugin name (type)

* Fix Typos

* Add TimeZone Plugint to WXS

* Add TimeZone plugin to sign pipeline

* Add Documentation

* Remove double spell entries

* Remove TODO leftovers

* Fix for results with no countries

* Fix typos

* fix typos

* Fix broken siolution after rebase

* Update target framework to make build happy

* fix wrong guid count in WXS

* fix wrong output folder (setup wasn’t found files)

* Address feedback from @jsoref - fix spell check

* typo fix - one leftover in expect.txt

* Switch to .NET6 and update dokumentation

* Address feedbacks, and fix search bug

* fix installer build error

* fix spellchecker

* Address feedback from @htcfreek

Co-authored-by: Sekan, Tobias <[email protected]>
@ibrahimhajjaj
Copy link

ibrahimhajjaj commented Mar 2, 2022

Does it convert time zones? ie. 9 am Palestine to United kingdom?

image

Google

image

@htcfreek
Copy link
Collaborator

htcfreek commented Mar 2, 2022

Does it convert time zones? ie. 9 am Palestine to United kingdom?

image

Google

image

not in this way as I know

@ibrahimhajjaj
Copy link

in what way then?

@TobiasSekan
Copy link
Contributor Author

Does it convert time zones? ie. 9 am Palestine to United kingdom?

image

Google

image

No, this plugin provide only the possibility to find time zones and there current time by

  • time zone names and their shortcuts
  • time names and their shortcuts
  • military time zone names (need to activate in options)
  • country names
  • time shift (like: +8, -30)

@sdzkHelince
Copy link

Can I ask, why there is no Ukraine, but there is Transnistria, DPR, Abkhazia and other not recognized countries? Picture

@LeenzeryDev
Copy link

why is there no ukraine?

@celestora
Copy link

Can I ask, why there is no Ukraine, but there is Transnistria, DPR, Abkhazia and other not recognized countries? Picture

image
apparently because Ukraine is not in timezones.json at all lmao

b5d47f161757c8c93f8645149fa1e64600648824a3ee50066efa95d41e0ce98db2deec01e4a9afbf09a2d364ae8d561ee737a9ba08a8f7cd488557c9a82f3b20.1.mp4

@tequilalimone
Copy link

Was this plugin removed from PowerToys? How do I install this plugin on the most recent release?

@jkurkure
Copy link

jkurkure commented Aug 6, 2024

hi, is this plug-in still part of PowerToys, and how do I access it if so

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs-Review This Pull Request awaits the review of a maintainer. Run-Plugin Things that relate with PowerToys Run's plugin interface
Projects
None yet
Development

Successfully merging this pull request may close these issues.