Skip to content

Commit 222e334

Browse files
committed
add a lil polish
1 parent 68ed03d commit 222e334

File tree

9 files changed

+7
-209
lines changed

9 files changed

+7
-209
lines changed

src/cascadia/TerminalApp/AppActionHandlers.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,8 @@ namespace winrt::TerminalApp::implementation
13511351
if (WI_IsFlagSet(source, SuggestionsSource::WinGetCommandNotFound) &&
13521352
context != nullptr)
13531353
{
1354-
const auto recentCommands = Command::ToSendInputCommands(context.WinGetSuggestions());
1354+
// use OEM icon
1355+
const auto recentCommands = Command::ToSendInputCommands(context.WinGetSuggestions(), hstring{ L"\ue74c" });
13551356
for (const auto& t : recentCommands)
13561357
{
13571358
commandsCollection.push_back(t);

src/cascadia/TerminalApp/Resources/en-US/Resources.resw

+1-1
Original file line numberDiff line numberDiff line change
@@ -898,4 +898,4 @@
898898
<data name="RestartConnectionToolTip" xml:space="preserve">
899899
<value>Restart the active pane connection</value>
900900
</data>
901-
</root>
901+
</root>

src/cascadia/TerminalApp/TerminalPage.cpp

-187
Original file line numberDiff line numberDiff line change
@@ -1672,8 +1672,6 @@ namespace winrt::TerminalApp::implementation
16721672

16731673
term.ShowWindowChanged({ get_weak(), &TerminalPage::_ShowWindowChangedHandler });
16741674

1675-
//term.SearchMissingCommand({ get_weak(), &TerminalPage::_SearchMissingCommandHandler });
1676-
16771675
// Don't even register for the event if the feature is compiled off.
16781676
if constexpr (Feature_ShellCompletions::IsEnabled())
16791677
{
@@ -2956,191 +2954,6 @@ namespace winrt::TerminalApp::implementation
29562954
ShowWindowChanged.raise(*this, args);
29572955
}
29582956

2959-
void TerminalPage::_SearchMissingCommandHandler(const IInspectable sender, const winrt::Microsoft::Terminal::Control::SearchMissingCommandEventArgs args)
2960-
{
2961-
#if 0
2962-
static constexpr CLSID CLSID_PackageManager = { 0xC53A4F16, 0x787E, 0x42A4, 0xB3, 0x04, 0x29, 0xEF, 0xFB, 0x4B, 0xF5, 0x97 }; //C53A4F16-787E-42A4-B304-29EFFB4BF597
2963-
static constexpr CLSID CLSID_FindPackagesOptions = { 0x572DED96, 0x9C60, 0x4526, { 0x8F, 0x92, 0xEE, 0x7D, 0x91, 0xD3, 0x8C, 0x1A } }; //572DED96-9C60-4526-8F92-EE7D91D38C1A
2964-
static constexpr CLSID CLSID_PackageMatchFilter = { 0xD02C9DAF, 0x99DC, 0x429C, { 0xB5, 0x03, 0x4E, 0x50, 0x4E, 0x4A, 0xB0, 0x00 } }; //D02C9DAF-99DC-429C-B503-4E504E4AB000
2965-
2966-
static constexpr unsigned int maxSuggestions = 5;
2967-
bool tooManySuggestions = false;
2968-
2969-
// TODO CARLOS: this is where we fail! "Class not registered" error
2970-
PackageManager pkgManager = winrt::create_instance<PackageManager>(CLSID_PackageManager, CLSCTX_ALL);
2971-
auto catalogRef = pkgManager.GetPredefinedPackageCatalog(PredefinedPackageCatalog::OpenWindowsCatalog);
2972-
auto connectResult = catalogRef.Connect();
2973-
int retryCount = 0;
2974-
while (connectResult.Status() != ConnectResultStatus::Ok && retryCount < 3)
2975-
{
2976-
connectResult = catalogRef.Connect();
2977-
++retryCount;
2978-
}
2979-
if (connectResult.Status() != ConnectResultStatus::Ok)
2980-
{
2981-
return;
2982-
}
2983-
auto catalog = connectResult.PackageCatalog();
2984-
2985-
// Perform the query (search by command)
2986-
auto packageMatchFilter = winrt::create_instance<PackageMatchFilter>(CLSID_PackageMatchFilter, CLSCTX_ALL);
2987-
auto findPackagesOptions = winrt::create_instance<FindPackagesOptions>(CLSID_FindPackagesOptions, CLSCTX_ALL);
2988-
2989-
// Helper lambda to apply a filter to the query
2990-
auto applyPackageMatchFilter = [&packageMatchFilter, &findPackagesOptions](PackageMatchField field, PackageFieldMatchOption matchOption, hstring query) {
2991-
// Configure filter
2992-
packageMatchFilter.Field(field);
2993-
packageMatchFilter.Option(matchOption);
2994-
packageMatchFilter.Value(query);
2995-
2996-
// Apply filter
2997-
findPackagesOptions.ResultLimit(maxSuggestions + 1u);
2998-
findPackagesOptions.Filters().Clear();
2999-
findPackagesOptions.Filters().Append(packageMatchFilter);
3000-
};
3001-
3002-
// Helper lambda to retrieve the best matching package(s) from the query's result
3003-
auto tryGetBestMatchingPackage = [&tooManySuggestions](IVectorView<MatchResult> matches) {
3004-
std::vector<CatalogPackage> results;
3005-
results.reserve(std::min(matches.Size(), maxSuggestions));
3006-
if (matches.Size() == 1)
3007-
{
3008-
// One match --> return the package
3009-
results.emplace_back(matches.GetAt(0).CatalogPackage());
3010-
}
3011-
else if (matches.Size() > 1)
3012-
{
3013-
// Multiple matches --> display top 5 matches (prioritize best matches first)
3014-
std::queue<CatalogPackage> bestExactMatches, secondaryMatches, tertiaryMatches;
3015-
for (auto match : matches)
3016-
{
3017-
switch (match.MatchCriteria().Option())
3018-
{
3019-
case PackageFieldMatchOption::EqualsCaseInsensitive:
3020-
case PackageFieldMatchOption::Equals:
3021-
bestExactMatches.push(match.CatalogPackage());
3022-
break;
3023-
case PackageFieldMatchOption::StartsWithCaseInsensitive:
3024-
secondaryMatches.push(match.CatalogPackage());
3025-
break;
3026-
case PackageFieldMatchOption::ContainsCaseInsensitive:
3027-
tertiaryMatches.push(match.CatalogPackage());
3028-
break;
3029-
}
3030-
}
3031-
3032-
// Now return the top maxSuggestions
3033-
while (results.size() < maxSuggestions)
3034-
{
3035-
if (bestExactMatches.size() > 0)
3036-
{
3037-
results.emplace_back(bestExactMatches.front());
3038-
bestExactMatches.pop();
3039-
}
3040-
else if (secondaryMatches.size() > 0)
3041-
{
3042-
results.emplace_back(secondaryMatches.front());
3043-
secondaryMatches.pop();
3044-
}
3045-
else if (tertiaryMatches.size() > 0)
3046-
{
3047-
results.emplace_back(tertiaryMatches.front());
3048-
tertiaryMatches.pop();
3049-
}
3050-
else
3051-
{
3052-
break;
3053-
}
3054-
}
3055-
}
3056-
tooManySuggestions = matches.Size() > maxSuggestions;
3057-
return results;
3058-
};
3059-
3060-
// Search by command
3061-
auto missingCmd = args.MissingCommand();
3062-
std::wstring searchOption = L"command";
3063-
applyPackageMatchFilter(PackageMatchField::Command, PackageFieldMatchOption::StartsWithCaseInsensitive, missingCmd);
3064-
auto findPackagesResult = catalog.FindPackages(findPackagesOptions);
3065-
auto matches = findPackagesResult.Matches();
3066-
auto pkgList = tryGetBestMatchingPackage(matches);
3067-
if (pkgList.empty())
3068-
{
3069-
// No matches found --> search by name
3070-
applyPackageMatchFilter(PackageMatchField::Name, PackageFieldMatchOption::ContainsCaseInsensitive, missingCmd);
3071-
3072-
findPackagesResult = catalog.FindPackages(findPackagesOptions);
3073-
matches = findPackagesResult.Matches();
3074-
pkgList = tryGetBestMatchingPackage(matches);
3075-
searchOption = L"name";
3076-
3077-
if (pkgList.empty())
3078-
{
3079-
// No matches found --> search by moniker
3080-
applyPackageMatchFilter(PackageMatchField::Moniker, PackageFieldMatchOption::ContainsCaseInsensitive, missingCmd);
3081-
3082-
// Perform the query (search by name)
3083-
findPackagesResult = catalog.FindPackages(findPackagesOptions);
3084-
matches = findPackagesResult.Matches();
3085-
pkgList = tryGetBestMatchingPackage(matches);
3086-
searchOption = L"moniker";
3087-
}
3088-
}
3089-
3090-
// Display packages in UI
3091-
if (!pkgList.empty())
3092-
{
3093-
std::vector<std::wstring> suggestions;
3094-
suggestions.reserve(pkgList.size());
3095-
for (auto pkg : pkgList)
3096-
{
3097-
suggestions.emplace_back(fmt::format(L"winget install --id {}", pkg.Id()));
3098-
}
3099-
3100-
std::wstring footer = tooManySuggestions ?
3101-
fmt::format(L"winget search --{} {}", searchOption, missingCmd) :
3102-
L"";
3103-
3104-
// TODO CARLOS: no more info bar; replace!
3105-
//ShowCommandNotFoundInfoBar(suggestions, footer);
3106-
}
3107-
#elif defined(DEBUG) || defined(_DEBUG) || defined(DBG)
3108-
//const bool tooManySuggestions = false;
3109-
//const std::wstring searchOption = L"command";
3110-
const std::wstring missingCmd = args.MissingCommand().data();
3111-
std::vector<std::wstring> pkgList = { L"pkg1", L"pkg2", L"pkg3" };
3112-
std::vector<hstring> suggestions;
3113-
suggestions.reserve(pkgList.size());
3114-
for (auto pkg : pkgList)
3115-
{
3116-
suggestions.emplace_back(fmt::format(L"winget install --id {}", pkg));
3117-
}
3118-
3119-
// This will come in on a background (not-UI, not output) thread.
3120-
3121-
// Parse the json string into a collection of actions
3122-
try
3123-
{
3124-
//auto commandsCollection = Command::ParsePowerShellMenuComplete(args.MenuJson(),
3125-
// args.ReplacementLength());
3126-
3127-
auto suggestionsWinRT = winrt::single_threaded_vector<hstring>(std::move(suggestions));
3128-
auto commandsCollection = Command::ToSendInputCommands(suggestionsWinRT);
3129-
3130-
//auto weakThis{ get_weak() };
3131-
//Dispatcher().RunAsync(CoreDispatcherPriority::Normal, [weakThis, commandsCollection, sender]() {
3132-
// // On the UI thread...
3133-
// if (const auto& page{ weakThis.get() })
3134-
// {
3135-
// // Open the Suggestions UI with the commands from the control
3136-
// page->_OpenSuggestions(sender.try_as<TermControl>(), commandsCollection, SuggestionsMode::Menu, L"");
3137-
// }
3138-
//});
3139-
}
3140-
CATCH_LOG();
3141-
#endif
3142-
}
3143-
31442957
// Method Description:
31452958
// - Paste text from the Windows Clipboard to the focused terminal
31462959
void TerminalPage::_PasteText()

src/cascadia/TerminalControl/ControlCore.h

-1
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation
276276
til::typed_event<IInspectable, Control::UpdateSelectionMarkersEventArgs> UpdateSelectionMarkers;
277277
til::typed_event<IInspectable, Control::OpenHyperlinkEventArgs> OpenHyperlink;
278278
til::typed_event<IInspectable, Control::CompletionsChangedEventArgs> CompletionsChanged;
279-
til::typed_event<IInspectable, Control::SearchMissingCommandEventArgs> SearchMissingCommand;
280279

281280
til::typed_event<> CloseTerminalRequested;
282281
til::typed_event<> RestartTerminalRequested;

src/cascadia/TerminalControl/EventArgs.h

-10
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "KeySentEventArgs.g.h"
2121
#include "CharSentEventArgs.g.h"
2222
#include "StringSentEventArgs.g.h"
23-
#include "SearchMissingCommandEventArgs.g.h"
2423

2524
namespace winrt::Microsoft::Terminal::Control::implementation
2625
{
@@ -252,15 +251,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation
252251

253252
WINRT_PROPERTY(winrt::hstring, Text);
254253
};
255-
256-
struct SearchMissingCommandEventArgs : public SearchMissingCommandEventArgsT<SearchMissingCommandEventArgs>
257-
{
258-
public:
259-
SearchMissingCommandEventArgs(const winrt::hstring& missingCommand) :
260-
_MissingCommand(missingCommand) {}
261-
262-
WINRT_PROPERTY(winrt::hstring, MissingCommand);
263-
};
264254
}
265255

266256
namespace winrt::Microsoft::Terminal::Control::factory_implementation

src/cascadia/TerminalControl/EventArgs.idl

-5
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,4 @@ namespace Microsoft.Terminal.Control
121121
{
122122
String Text { get; };
123123
}
124-
125-
runtimeclass SearchMissingCommandEventArgs
126-
{
127-
String MissingCommand { get; };
128-
}
129124
}

src/cascadia/TerminalSettingsModel/Command.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
798798
return winrt::single_threaded_vector<Model::Command>(std::move(result));
799799
}
800800

801-
IVector<Model::Command> Command::ToSendInputCommands(IVector<hstring> commands)
801+
IVector<Model::Command> Command::ToSendInputCommands(IVector<hstring> commands, hstring iconPath)
802802
{
803803
if (!commands)
804804
{
@@ -814,7 +814,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
814814
auto c = winrt::make_self<Command>();
815815
c->_ActionAndArgs = actionAndArgs;
816816
c->_name = command;
817-
c->_iconPath = L"\ue74c"; // OEM icon
817+
c->_iconPath = iconPath;
818818
result.push_back(*c);
819819
}
820820

src/cascadia/TerminalSettingsModel/Command.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
7474
static Windows::Foundation::Collections::IVector<Model::Command> HistoryToCommands(Windows::Foundation::Collections::IVector<winrt::hstring> history,
7575
winrt::hstring currentCommandline,
7676
bool directories);
77-
static Windows::Foundation::Collections::IVector<Model::Command> ToSendInputCommands(Windows::Foundation::Collections::IVector<winrt::hstring> commands);
77+
static Windows::Foundation::Collections::IVector<Model::Command> ToSendInputCommands(Windows::Foundation::Collections::IVector<winrt::hstring> commands, hstring iconPath);
7878

7979
WINRT_PROPERTY(ExpandCommandType, IterateOn, ExpandCommandType::None);
8080
WINRT_PROPERTY(Model::ActionAndArgs, ActionAndArgs);

src/cascadia/TerminalSettingsModel/Command.idl

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace Microsoft.Terminal.Settings.Model
4848

4949
static IVector<Command> ParsePowerShellMenuComplete(String json, Int32 replaceLength);
5050
static IVector<Command> HistoryToCommands(IVector<String> commandHistory, String commandline, Boolean directories);
51-
static IVector<Command> ToSendInputCommands(IVector<String> commands);
51+
static IVector<Command> ToSendInputCommands(IVector<String> commands, String iconPath);
5252

5353
}
5454
}

0 commit comments

Comments
 (0)