From a97166344939477a10145691b16375037900d062 Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Wed, 20 Mar 2024 09:02:26 -0700 Subject: [PATCH 1/8] Replace usages of `TYPED_EVENT` with `til::event` (#16837) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR automagically finds and replaces all[^1] usages of our TYPED_EVENT macro with `til::event`. Benefits include: * less macro magic * editors are more easily able to figure out the relationship between `til::event<> Foo;`, `Foo.raise(...)`, and `bar.Foo({this, &Bar::FooHandler})` (whereas before the relationship between `_FooHandlers(...)` and `bar.Foo({...})`) couldn't be figured out by vscode & sublime. Other find & replace work that had to be done: * I added the `til::typed_event<>` == `` thing from #16170, since that is goodness * I actually fixed `til::property_changed_event`, so you can use that for your property changed events. They're all the same anyways. * events had to come before `WINRT_PROPERTY`s, since the latter macro leaves us in a `private:` block * `Pane::SetupChildCloseHandlers` I had to swap _back_, because the script thought that was an event 🤦 * `ProfileViewModel::DeleteProfile` had to be renamed `DeleteProfileRequested`, since there was already a `DeleteProfile` method on it. * WindowManager.cpp was directly wiring up it's `winrt::event`s to the monarch & peasant. That doesn't work with `til::event`s and I'm kinda surprised it ever did
The script in question ```py import os import re def replace_in_file(file_path, file_name): with open(file_path, 'r', encoding="utf8") as file: content = file.read() found_matches = False # Define the pattern for matching pattern = r' WINRT_CALLBACK\((\w+),\s*(.*?)\);' event_matches = re.findall(pattern, content) if event_matches: found_matches = True print(f'found events in {file_path}:') for match in event_matches: name = match[0] args = match[1] if name == "newConnection" and file_name == "ConptyConnection.cpp": # This one is special continue old_declaration = 'WINRT_CALLBACK(' + name + ', ' + args + ');' new_declaration = 'til::event<' + args + '> ' + name + ';' if name != "PropertyChanged" else 'til::property_changed_event PropertyChanged;' print(f' {old_declaration} -> {new_declaration}') content = content.replace(old_declaration, new_declaration) typed_event_pattern = r' TYPED_EVENT\((\w+),\s*(.*?)\);' typed_matches = re.findall(typed_event_pattern, content) if typed_matches: found_matches = True print(f'found typed_events in {file_path}:') for match in typed_matches: name = match[0] args = match[1] if name == "newConnection" and file_name == "ConptyConnection.cpp": # This one is special continue old_declaration = f'TYPED_EVENT({name}, {args});' was_inspectable = (args == "winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable" ) or (args == "IInspectable, IInspectable" ) new_declaration = f'til::typed_event<{args}> {name};' if not was_inspectable else f"til::typed_event<> {name};" print(f' {old_declaration} -> {new_declaration}') content = content.replace(old_declaration, new_declaration) handlers_pattern = r'_(\w+)Handlers\(' handler_matches = re.findall(handlers_pattern, content) if handler_matches: found_matches = True print(f'found handlers in {file_path}:') for match in handler_matches: name = match if name == "newConnection" and file_name == "ConptyConnection.cpp": # This one is special continue old_declaration = f'_{name}Handlers(' new_declaration = f'{name}.raise(' print(f' {old_declaration} -> {new_declaration}') content = content.replace(old_declaration, new_declaration) if found_matches: with open(file_path, 'w', encoding="utf8") as file: file.write(content) def find_and_replace(directory): for root, dirs, files in os.walk(directory): if 'Generated Files' in dirs: dirs.remove('Generated Files') # Exclude the "Generated Files" directory for file in files: if file.endswith('.cpp') or file.endswith('.h') or file.endswith('.hpp'): file_path = os.path.join(root, file) try: replace_in_file(file_path, file) except Exception as e: print(f"error reading {file_path}") if file == "TermControl.cpp": print(e) # raise e # Replace in files within a specific directory directory_path = 'D:\\dev\\public\\terminal\\src' find_and_replace(directory_path) ```
[^1]: there are other macros we use that were also using this macro, those weren't replaced. --------- Co-authored-by: Dustin Howett Co-authored-by: Leonard Hecker --- src/cascadia/Remoting/Monarch.cpp | 20 +++--- src/cascadia/Remoting/Monarch.h | 16 ++--- src/cascadia/Remoting/Peasant.cpp | 26 +++---- src/cascadia/Remoting/Peasant.h | 32 ++++----- src/cascadia/Remoting/WindowManager.cpp | 31 ++++++-- src/cascadia/Remoting/WindowManager.h | 17 +++-- src/cascadia/TerminalApp/AboutDialog.h | 6 +- .../TerminalApp/AppActionHandlers.cpp | 8 +-- src/cascadia/TerminalApp/AppLogic.cpp | 4 +- src/cascadia/TerminalApp/AppLogic.h | 2 +- .../TerminalApp/ColorPickupFlyout.cpp | 8 +-- src/cascadia/TerminalApp/ColorPickupFlyout.h | 4 +- src/cascadia/TerminalApp/CommandPalette.cpp | 12 ++-- src/cascadia/TerminalApp/CommandPalette.h | 24 +++---- .../TerminalApp/DebugTapConnection.cpp | 6 +- src/cascadia/TerminalApp/DebugTapConnection.h | 4 +- src/cascadia/TerminalApp/FilteredCommand.h | 10 +-- src/cascadia/TerminalApp/HighlightedText.h | 10 +-- .../TerminalApp/MinMaxCloseControl.cpp | 6 +- src/cascadia/TerminalApp/MinMaxCloseControl.h | 6 +- src/cascadia/TerminalApp/PaletteItem.h | 8 +-- src/cascadia/TerminalApp/Pane.cpp | 18 ++--- src/cascadia/TerminalApp/Pane.h | 14 ++-- .../TerminalApp/SuggestionsControl.cpp | 2 +- src/cascadia/TerminalApp/SuggestionsControl.h | 12 ++-- src/cascadia/TerminalApp/TabBase.cpp | 6 +- src/cascadia/TerminalApp/TabBase.h | 16 ++--- src/cascadia/TerminalApp/TabHeaderControl.cpp | 4 +- src/cascadia/TerminalApp/TabHeaderControl.h | 13 ++-- src/cascadia/TerminalApp/TabManagement.cpp | 8 +-- src/cascadia/TerminalApp/TabPaletteItem.cpp | 2 +- src/cascadia/TerminalApp/TabPaletteItem.h | 2 +- src/cascadia/TerminalApp/TabRowControl.h | 4 +- src/cascadia/TerminalApp/TerminalPage.cpp | 32 ++++----- src/cascadia/TerminalApp/TerminalPage.h | 50 ++++++------- src/cascadia/TerminalApp/TerminalTab.cpp | 16 ++--- src/cascadia/TerminalApp/TerminalTab.h | 6 +- src/cascadia/TerminalApp/TerminalTabStatus.h | 18 ++--- src/cascadia/TerminalApp/TerminalWindow.cpp | 12 ++-- src/cascadia/TerminalApp/TerminalWindow.h | 17 ++--- src/cascadia/TerminalApp/pch.h | 1 + .../TerminalConnection/AzureConnection.cpp | 20 +++--- .../TerminalConnection/AzureConnection.h | 2 +- .../BaseTerminalConnection.h | 4 +- .../TerminalConnection/ConptyConnection.cpp | 20 +++--- .../TerminalConnection/ConptyConnection.h | 2 +- .../TerminalConnection/EchoConnection.cpp | 2 +- .../TerminalConnection/EchoConnection.h | 4 +- src/cascadia/TerminalConnection/pch.h | 1 + src/cascadia/TerminalControl/ControlCore.cpp | 72 +++++++++---------- src/cascadia/TerminalControl/ControlCore.h | 56 +++++++-------- .../TerminalControl/ControlInteractivity.cpp | 18 ++--- .../TerminalControl/ControlInteractivity.h | 12 ++-- .../InteractivityAutomationPeer.cpp | 8 +-- .../InteractivityAutomationPeer.h | 8 +-- .../TerminalControl/SearchBoxControl.cpp | 22 +++--- .../TerminalControl/SearchBoxControl.h | 8 +-- .../TerminalControl/SearchBoxControl.xaml | 2 +- .../TerminalControl/TSFInputControl.cpp | 6 +- .../TerminalControl/TSFInputControl.h | 6 +- src/cascadia/TerminalControl/TermControl.cpp | 48 ++++++------- src/cascadia/TerminalControl/TermControl.h | 27 +++---- src/cascadia/TerminalSettingsEditor/Actions.h | 4 +- .../ActionsViewModel.cpp | 16 ++--- .../TerminalSettingsEditor/ActionsViewModel.h | 15 ++-- .../TerminalSettingsEditor/AddProfile.h | 13 ++-- .../TerminalSettingsEditor/Appearances.cpp | 62 ++++++++-------- .../TerminalSettingsEditor/Appearances.h | 10 +-- .../ColorSchemeViewModel.cpp | 2 +- .../ColorSchemeViewModel.h | 8 +-- .../TerminalSettingsEditor/ColorSchemes.h | 6 +- .../TerminalSettingsEditor/EditColorScheme.h | 4 +- .../TerminalSettingsEditor/EnumEntry.h | 6 +- .../TerminalSettingsEditor/GlobalAppearance.h | 4 +- .../TerminalSettingsEditor/Interaction.h | 4 +- src/cascadia/TerminalSettingsEditor/Launch.h | 4 +- .../TerminalSettingsEditor/MainPage.cpp | 6 +- .../TerminalSettingsEditor/MainPage.h | 2 +- .../PreviewConnection.cpp | 2 +- .../PreviewConnection.h | 4 +- .../ProfileViewModel.cpp | 2 +- .../TerminalSettingsEditor/ProfileViewModel.h | 4 +- .../ProfileViewModel.idl | 2 +- .../Profiles_Advanced.h | 2 +- .../Profiles_Appearance.h | 2 +- .../TerminalSettingsEditor/Profiles_Base.h | 2 +- .../TerminalSettingsEditor/Rendering.h | 4 +- .../SettingContainer.cpp | 2 +- .../TerminalSettingsEditor/SettingContainer.h | 3 +- src/cascadia/TerminalSettingsEditor/pch.h | 1 + .../UnitTests_Control/MockConnection.h | 6 +- .../UnitTests_Remoting/RemotingTests.cpp | 40 +++++------ .../TilWinRtHelpersTests.cpp | 21 ++++++ src/cascadia/UnitTests_TerminalCore/pch.h | 1 + src/cascadia/WindowsTerminal/AppHost.cpp | 2 +- src/cascadia/WindowsTerminal/AppHost.h | 2 +- src/cascadia/WindowsTerminal/IslandWindow.cpp | 24 +++---- src/cascadia/WindowsTerminal/IslandWindow.h | 32 ++++----- .../WindowsTerminal/NotificationIcon.cpp | 6 +- .../WindowsTerminal/NotificationIcon.h | 2 +- src/cascadia/WindowsTerminal/WindowThread.cpp | 4 +- src/cascadia/WindowsTerminal/WindowThread.h | 2 +- src/cascadia/WindowsTerminal/pch.h | 1 + src/inc/til/winrt.h | 11 ++- .../MonarchPeasantSample/SamplePeasant.cpp | 2 +- .../MonarchPeasantSample/SamplePeasant.h | 2 +- src/tools/MonarchPeasantSample/pch.h | 1 + 107 files changed, 633 insertions(+), 583 deletions(-) diff --git a/src/cascadia/Remoting/Monarch.cpp b/src/cascadia/Remoting/Monarch.cpp index cf2edd98fa3..6b48650c5f2 100644 --- a/src/cascadia/Remoting/Monarch.cpp +++ b/src/cascadia/Remoting/Monarch.cpp @@ -95,8 +95,8 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation peasant.IdentifyWindowsRequested({ this, &Monarch::_identifyWindows }); peasant.RenameRequested({ this, &Monarch::_renameRequested }); - peasant.ShowNotificationIconRequested([this](auto&&, auto&&) { _ShowNotificationIconRequestedHandlers(*this, nullptr); }); - peasant.HideNotificationIconRequested([this](auto&&, auto&&) { _HideNotificationIconRequestedHandlers(*this, nullptr); }); + peasant.ShowNotificationIconRequested([this](auto&&, auto&&) { ShowNotificationIconRequested.raise(*this, nullptr); }); + peasant.HideNotificationIconRequested([this](auto&&, auto&&) { HideNotificationIconRequested.raise(*this, nullptr); }); peasant.QuitAllRequested({ this, &Monarch::_handleQuitAll }); { @@ -111,7 +111,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation TraceLoggingLevel(WINEVENT_LEVEL_VERBOSE), TraceLoggingKeyword(TIL_KEYWORD_TRACE)); - _WindowCreatedHandlers(nullptr, nullptr); + WindowCreated.raise(nullptr, nullptr); return newPeasantsId; } catch (...) @@ -141,7 +141,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation // Let the process hosting the monarch run any needed logic before // closing all windows. auto args = winrt::make_self(); - _QuitAllRequestedHandlers(*this, *args); + QuitAllRequested.raise(*this, *args); if (const auto action = args->BeforeQuitAllAction()) { @@ -207,7 +207,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation std::unique_lock lock{ _peasantsMutex }; _peasants.erase(peasantId); } - _WindowClosedHandlers(nullptr, nullptr); + WindowClosed.raise(nullptr, nullptr); } // Method Description: @@ -650,7 +650,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation auto findWindowArgs{ winrt::make_self(args) }; // This is handled by some handler in-proc - _FindTargetWindowRequestedHandlers(*this, *findWindowArgs); + FindTargetWindowRequested.raise(*this, *findWindowArgs); // After the event was handled, ResultTargetWindow() will be filled with // the parsed result. @@ -741,7 +741,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation result->WindowName(targetWindowName); result->ShouldCreateWindow(true); - _RequestNewWindowHandlers(*this, *winrt::make_self(*result, args)); + RequestNewWindow.raise(*this, *winrt::make_self(*result, args)); // If this fails, it'll be logged in the following // TraceLoggingWrite statement, with succeeded=false @@ -779,7 +779,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation result->Id(windowID); result->WindowName(targetWindowName); - _RequestNewWindowHandlers(*this, *winrt::make_self(*result, args)); + RequestNewWindow.raise(*this, *winrt::make_self(*result, args)); return *result; } @@ -796,7 +796,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation auto result = winrt::make_self(true); result->WindowName(targetWindowName); - _RequestNewWindowHandlers(*this, *winrt::make_self(*result, args)); + RequestNewWindow.raise(*this, *winrt::make_self(*result, args)); return *result; } @@ -1115,7 +1115,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation auto request = winrt::make_self(nameIsReserved ? L"" : window, content, windowBounds); - _RequestNewWindowHandlers(*this, *request); + RequestNewWindow.raise(*this, *request); } } diff --git a/src/cascadia/Remoting/Monarch.h b/src/cascadia/Remoting/Monarch.h index 203119a70ce..48619ac47b8 100644 --- a/src/cascadia/Remoting/Monarch.h +++ b/src/cascadia/Remoting/Monarch.h @@ -101,14 +101,14 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation void RequestMoveContent(winrt::hstring window, winrt::hstring content, uint32_t tabIndex, const Windows::Foundation::IReference& windowBounds); void RequestSendContent(const Remoting::RequestReceiveContentArgs& args); - TYPED_EVENT(FindTargetWindowRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::FindTargetWindowArgs); - TYPED_EVENT(ShowNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(HideNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(WindowCreated, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(WindowClosed, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(QuitAllRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::QuitAllRequestedArgs); + til::typed_event FindTargetWindowRequested; + til::typed_event<> ShowNotificationIconRequested; + til::typed_event<> HideNotificationIconRequested; + til::typed_event<> WindowCreated; + til::typed_event<> WindowClosed; + til::typed_event QuitAllRequested; - TYPED_EVENT(RequestNewWindow, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::WindowRequestedArgs); + til::typed_event RequestNewWindow; private: uint64_t _ourPID; @@ -223,7 +223,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation // A peasant died, let the app host know that the number of // windows has changed. - _WindowClosedHandlers(nullptr, nullptr); + WindowClosed.raise(nullptr, nullptr); } } diff --git a/src/cascadia/Remoting/Peasant.cpp b/src/cascadia/Remoting/Peasant.cpp index 94f8406c00c..5d2b54f85af 100644 --- a/src/cascadia/Remoting/Peasant.cpp +++ b/src/cascadia/Remoting/Peasant.cpp @@ -67,7 +67,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation // Raise an event with these args. The AppHost will listen for this // event to know when to take these args and dispatch them to a // currently-running window. - _ExecuteCommandlineRequestedHandlers(*this, args); + ExecuteCommandlineRequested.raise(*this, args); return true; } @@ -97,7 +97,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation // by the monarch. The monarch might have died. If they have, this // will throw an exception. Just eat it, the election thread will // handle hooking up the new one. - _WindowActivatedHandlers(*this, args); + WindowActivated.raise(*this, args); successfullyNotified = true; } catch (...) @@ -146,7 +146,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation TraceLoggingLevel(WINEVENT_LEVEL_VERBOSE), TraceLoggingKeyword(TIL_KEYWORD_TRACE)); - _SummonRequestedHandlers(*this, localCopy); + SummonRequested.raise(*this, localCopy); } // Method Description: @@ -161,7 +161,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation { // Not worried about try/catching this. The handler is in AppHost, which // is in-proc for us. - _DisplayWindowIdRequestedHandlers(*this, nullptr); + DisplayWindowIdRequested.raise(*this, nullptr); } // Method Description: @@ -182,7 +182,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation // by the monarch. The monarch might have died. If they have, this // will throw an exception. Just eat it, the election thread will // handle hooking up the new one. - _IdentifyWindowsRequestedHandlers(*this, nullptr); + IdentifyWindowsRequested.raise(*this, nullptr); successfullyNotified = true; } catch (...) @@ -207,7 +207,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation // by the monarch. The monarch might have died. If they have, this // will throw an exception. Just eat it, the election thread will // handle hooking up the new one. - _RenameRequestedHandlers(*this, args); + RenameRequested.raise(*this, args); if (args.Succeeded()) { _WindowName = args.NewName(); @@ -233,7 +233,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation { try { - _ShowNotificationIconRequestedHandlers(*this, nullptr); + ShowNotificationIconRequested.raise(*this, nullptr); } catch (...) { @@ -249,7 +249,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation { try { - _HideNotificationIconRequestedHandlers(*this, nullptr); + HideNotificationIconRequested.raise(*this, nullptr); } catch (...) { @@ -265,7 +265,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation { try { - _QuitAllRequestedHandlers(*this, nullptr); + QuitAllRequested.raise(*this, nullptr); } catch (...) { @@ -281,7 +281,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation { try { - _AttachRequestedHandlers(*this, request); + AttachRequested.raise(*this, request); } catch (...) { @@ -297,7 +297,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation { try { - _QuitRequestedHandlers(*this, nullptr); + QuitRequested.raise(*this, nullptr); } catch (...) { @@ -318,7 +318,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation hstring Peasant::GetWindowLayout() { auto args = winrt::make_self(); - _GetWindowLayoutRequestedHandlers(nullptr, *args); + GetWindowLayoutRequested.raise(nullptr, *args); if (const auto op = args->WindowLayoutJsonAsync()) { // This will fail if called on the UI thread, so the monarch should @@ -331,6 +331,6 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation void Peasant::SendContent(const Remoting::RequestReceiveContentArgs& args) { - _SendContentRequestedHandlers(*this, args); + SendContentRequested.raise(*this, args); } } diff --git a/src/cascadia/Remoting/Peasant.h b/src/cascadia/Remoting/Peasant.h index 26a82a17fef..67d407e599a 100644 --- a/src/cascadia/Remoting/Peasant.h +++ b/src/cascadia/Remoting/Peasant.h @@ -68,25 +68,25 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation winrt::hstring GetWindowLayout(); void SendContent(const winrt::Microsoft::Terminal::Remoting::RequestReceiveContentArgs& args); + til::typed_event WindowActivated; + til::typed_event ExecuteCommandlineRequested; + til::typed_event<> IdentifyWindowsRequested; + til::typed_event<> DisplayWindowIdRequested; + til::typed_event RenameRequested; + til::typed_event SummonRequested; + + til::typed_event<> ShowNotificationIconRequested; + til::typed_event<> HideNotificationIconRequested; + til::typed_event<> QuitAllRequested; + til::typed_event<> QuitRequested; + til::typed_event GetWindowLayoutRequested; + + til::typed_event AttachRequested; + til::typed_event SendContentRequested; + WINRT_PROPERTY(winrt::hstring, WindowName); WINRT_PROPERTY(winrt::hstring, ActiveTabTitle); - TYPED_EVENT(WindowActivated, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::WindowActivatedArgs); - TYPED_EVENT(ExecuteCommandlineRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::CommandlineArgs); - TYPED_EVENT(IdentifyWindowsRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(DisplayWindowIdRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(RenameRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::RenameRequestArgs); - TYPED_EVENT(SummonRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::SummonWindowBehavior); - - TYPED_EVENT(ShowNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(HideNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(QuitAllRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(QuitRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(GetWindowLayoutRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::GetWindowLayoutArgs); - - TYPED_EVENT(AttachRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::AttachRequest); - TYPED_EVENT(SendContentRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::RequestReceiveContentArgs); - private: Peasant(const uint64_t testPID); uint64_t _ourPID; diff --git a/src/cascadia/Remoting/WindowManager.cpp b/src/cascadia/Remoting/WindowManager.cpp index aa9f67b0b3f..57c110cd37d 100644 --- a/src/cascadia/Remoting/WindowManager.cpp +++ b/src/cascadia/Remoting/WindowManager.cpp @@ -89,10 +89,10 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation // done when we become the king. This will be called both for the first // window, and when the current monarch dies. - _monarch.WindowCreated({ get_weak(), &WindowManager::_WindowCreatedHandlers }); - _monarch.WindowClosed({ get_weak(), &WindowManager::_WindowClosedHandlers }); + _monarch.WindowCreated({ get_weak(), &WindowManager::_bubbleWindowCreated }); + _monarch.WindowClosed({ get_weak(), &WindowManager::_bubbleWindowClosed }); _monarch.FindTargetWindowRequested({ this, &WindowManager::_raiseFindTargetWindowRequested }); - _monarch.QuitAllRequested({ get_weak(), &WindowManager::_QuitAllRequestedHandlers }); + _monarch.QuitAllRequested({ get_weak(), &WindowManager::_bubbleQuitAllRequested }); _monarch.RequestNewWindow({ get_weak(), &WindowManager::_raiseRequestNewWindow }); } @@ -109,12 +109,12 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation void WindowManager::_raiseFindTargetWindowRequested(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Microsoft::Terminal::Remoting::FindTargetWindowArgs& args) { - _FindTargetWindowRequestedHandlers(sender, args); + FindTargetWindowRequested.raise(sender, args); } void WindowManager::_raiseRequestNewWindow(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Microsoft::Terminal::Remoting::WindowRequestedArgs& args) { - _RequestNewWindowHandlers(sender, args); + RequestNewWindow.raise(sender, args); } Remoting::ProposeCommandlineResult WindowManager::ProposeCommandline(const Remoting::CommandlineArgs& args, const bool isolatedMode) @@ -162,7 +162,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation auto findWindowArgs{ winrt::make_self(args) }; // This is handled by some handler in-proc - _FindTargetWindowRequestedHandlers(*this, *findWindowArgs); + FindTargetWindowRequested.raise(*this, *findWindowArgs); // After the event was handled, ResultTargetWindow() will be filled with // the parsed result. @@ -356,7 +356,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation _monarch.AddPeasant(*p); - p->GetWindowLayoutRequested({ get_weak(), &WindowManager::_GetWindowLayoutRequestedHandlers }); + p->GetWindowLayoutRequested({ get_weak(), &WindowManager::_bubbleGetWindowLayoutRequested }); TraceLoggingWrite(g_hRemotingProvider, "WindowManager_CreateOurPeasant", @@ -367,6 +367,23 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation return *p; } + void WindowManager::_bubbleGetWindowLayoutRequested(const winrt::Windows::Foundation::IInspectable& s, const winrt::Microsoft::Terminal::Remoting::GetWindowLayoutArgs& e) + { + GetWindowLayoutRequested.raise(s, e); + } + void WindowManager::_bubbleWindowCreated(const winrt::Windows::Foundation::IInspectable& s, const winrt::Windows::Foundation::IInspectable& e) + { + WindowCreated.raise(s, e); + } + void WindowManager::_bubbleWindowClosed(const winrt::Windows::Foundation::IInspectable& s, const winrt::Windows::Foundation::IInspectable& e) + { + WindowClosed.raise(s, e); + } + void WindowManager::_bubbleQuitAllRequested(const winrt::Windows::Foundation::IInspectable& s, const winrt::Microsoft::Terminal::Remoting::QuitAllRequestedArgs& e) + { + QuitAllRequested.raise(s, e); + } + void WindowManager::SignalClose(const Remoting::Peasant& peasant) { if (_monarch) diff --git a/src/cascadia/Remoting/WindowManager.h b/src/cascadia/Remoting/WindowManager.h index 015ab9f3472..96946f1d3cc 100644 --- a/src/cascadia/Remoting/WindowManager.h +++ b/src/cascadia/Remoting/WindowManager.h @@ -47,14 +47,13 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation winrt::fire_and_forget RequestMoveContent(winrt::hstring window, winrt::hstring content, uint32_t tabIndex, Windows::Foundation::IReference windowBounds); winrt::fire_and_forget RequestSendContent(Remoting::RequestReceiveContentArgs args); - TYPED_EVENT(FindTargetWindowRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::FindTargetWindowArgs); + til::typed_event FindTargetWindowRequested; - TYPED_EVENT(WindowCreated, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(WindowClosed, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(QuitAllRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::QuitAllRequestedArgs); - TYPED_EVENT(GetWindowLayoutRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::GetWindowLayoutArgs); - - TYPED_EVENT(RequestNewWindow, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::WindowRequestedArgs); + til::typed_event<> WindowCreated; + til::typed_event<> WindowClosed; + til::typed_event QuitAllRequested; + til::typed_event GetWindowLayoutRequested; + til::typed_event RequestNewWindow; private: DWORD _registrationHostClass{ 0 }; @@ -70,6 +69,10 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation const winrt::Microsoft::Terminal::Remoting::FindTargetWindowArgs& args); void _raiseRequestNewWindow(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Microsoft::Terminal::Remoting::WindowRequestedArgs& args); + void _bubbleWindowCreated(const winrt::Windows::Foundation::IInspectable& s, const winrt::Windows::Foundation::IInspectable& e); + void _bubbleWindowClosed(const winrt::Windows::Foundation::IInspectable& s, const winrt::Windows::Foundation::IInspectable& e); + void _bubbleQuitAllRequested(const winrt::Windows::Foundation::IInspectable& s, const winrt::Microsoft::Terminal::Remoting::QuitAllRequestedArgs& e); + void _bubbleGetWindowLayoutRequested(const winrt::Windows::Foundation::IInspectable& s, const winrt::Microsoft::Terminal::Remoting::GetWindowLayoutArgs& e); }; } diff --git a/src/cascadia/TerminalApp/AboutDialog.h b/src/cascadia/TerminalApp/AboutDialog.h index c4dac5bdf72..c8cda18c24b 100644 --- a/src/cascadia/TerminalApp/AboutDialog.h +++ b/src/cascadia/TerminalApp/AboutDialog.h @@ -15,9 +15,9 @@ namespace winrt::TerminalApp::implementation winrt::hstring ApplicationDisplayName(); winrt::hstring ApplicationVersion(); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(bool, UpdatesAvailable, _PropertyChangedHandlers, false); - WINRT_OBSERVABLE_PROPERTY(bool, CheckingForUpdates, _PropertyChangedHandlers, false); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(bool, UpdatesAvailable, PropertyChanged.raise, false); + WINRT_OBSERVABLE_PROPERTY(bool, CheckingForUpdates, PropertyChanged.raise, false); private: friend struct AboutDialogT; // for Xaml to bind events diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp index beb4e4e2539..4e4f63d3676 100644 --- a/src/cascadia/TerminalApp/AppActionHandlers.cpp +++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp @@ -117,7 +117,7 @@ namespace winrt::TerminalApp::implementation void TerminalPage::_HandleCloseWindow(const IInspectable& /*sender*/, const ActionEventArgs& args) { - _CloseRequestedHandlers(nullptr, nullptr); + CloseRequested.raise(nullptr, nullptr); args.Handled(true); } @@ -948,7 +948,7 @@ namespace winrt::TerminalApp::implementation void TerminalPage::_HandleIdentifyWindows(const IInspectable& /*sender*/, const ActionEventArgs& args) { - _IdentifyWindowsRequestedHandlers(*this, nullptr); + IdentifyWindowsRequested.raise(*this, nullptr); args.Handled(true); } @@ -977,7 +977,7 @@ namespace winrt::TerminalApp::implementation { const auto newName = realArgs.Name(); const auto request = winrt::make_self(newName); - _RenameWindowRequestedHandlers(*this, *request); + RenameWindowRequested.raise(*this, *request); args.Handled(true); } } @@ -1147,7 +1147,7 @@ namespace winrt::TerminalApp::implementation void TerminalPage::_HandleOpenSystemMenu(const IInspectable& /*sender*/, const ActionEventArgs& args) { - _OpenSystemMenuHandlers(*this, nullptr); + OpenSystemMenu.raise(*this, nullptr); args.Handled(true); } diff --git a/src/cascadia/TerminalApp/AppLogic.cpp b/src/cascadia/TerminalApp/AppLogic.cpp index 7ba29cb6eea..29c13fdb13f 100644 --- a/src/cascadia/TerminalApp/AppLogic.cpp +++ b/src/cascadia/TerminalApp/AppLogic.cpp @@ -423,7 +423,7 @@ namespace winrt::TerminalApp::implementation _settingsLoadExceptionText, warnings, _settings); - _SettingsChangedHandlers(*this, *ev); + SettingsChanged.raise(*this, *ev); return; } } @@ -452,7 +452,7 @@ namespace winrt::TerminalApp::implementation _settingsLoadExceptionText, warnings, _settings); - _SettingsChangedHandlers(*this, *ev); + SettingsChanged.raise(*this, *ev); } // This is a continuation of AppLogic::Create() and includes the more expensive parts. diff --git a/src/cascadia/TerminalApp/AppLogic.h b/src/cascadia/TerminalApp/AppLogic.h index 84c586d79cd..4f735dc9b29 100644 --- a/src/cascadia/TerminalApp/AppLogic.h +++ b/src/cascadia/TerminalApp/AppLogic.h @@ -74,7 +74,7 @@ namespace winrt::TerminalApp::implementation TerminalApp::ParseCommandlineResult GetParseCommandlineMessage(array_view args); - TYPED_EVENT(SettingsChanged, winrt::Windows::Foundation::IInspectable, winrt::TerminalApp::SettingsLoadEventArgs); + til::typed_event SettingsChanged; private: bool _isElevated{ false }; diff --git a/src/cascadia/TerminalApp/ColorPickupFlyout.cpp b/src/cascadia/TerminalApp/ColorPickupFlyout.cpp index f82d86feecc..4bed996a64d 100644 --- a/src/cascadia/TerminalApp/ColorPickupFlyout.cpp +++ b/src/cascadia/TerminalApp/ColorPickupFlyout.cpp @@ -32,7 +32,7 @@ namespace winrt::TerminalApp::implementation { auto button{ sender.as() }; auto rectClr{ button.Background().as() }; - _ColorSelectedHandlers(rectClr.Color()); + ColorSelected.raise(rectClr.Color()); Hide(); } @@ -45,7 +45,7 @@ namespace winrt::TerminalApp::implementation // - void ColorPickupFlyout::ClearColorButton_Click(const IInspectable&, const Windows::UI::Xaml::RoutedEventArgs&) { - _ColorClearedHandlers(); + ColorCleared.raise(); Hide(); } @@ -80,12 +80,12 @@ namespace winrt::TerminalApp::implementation void ColorPickupFlyout::CustomColorButton_Click(const Windows::Foundation::IInspectable&, const Windows::UI::Xaml::RoutedEventArgs&) { auto color = customColorPicker().Color(); - _ColorSelectedHandlers(color); + ColorSelected.raise(color); Hide(); } void ColorPickupFlyout::ColorPicker_ColorChanged(const Microsoft::UI::Xaml::Controls::ColorPicker&, const Microsoft::UI::Xaml::Controls::ColorChangedEventArgs& args) { - _ColorSelectedHandlers(args.NewColor()); + ColorSelected.raise(args.NewColor()); } } diff --git a/src/cascadia/TerminalApp/ColorPickupFlyout.h b/src/cascadia/TerminalApp/ColorPickupFlyout.h index 50979d1b7e3..fa179dc3c6f 100644 --- a/src/cascadia/TerminalApp/ColorPickupFlyout.h +++ b/src/cascadia/TerminalApp/ColorPickupFlyout.h @@ -13,8 +13,8 @@ namespace winrt::TerminalApp::implementation void ClearColorButton_Click(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void ColorPicker_ColorChanged(const Microsoft::UI::Xaml::Controls::ColorPicker&, const Microsoft::UI::Xaml::Controls::ColorChangedEventArgs& args); - WINRT_CALLBACK(ColorCleared, TerminalApp::ColorClearedArgs); - WINRT_CALLBACK(ColorSelected, TerminalApp::ColorSelectedArgs); + til::event ColorCleared; + til::event ColorSelected; }; } diff --git a/src/cascadia/TerminalApp/CommandPalette.cpp b/src/cascadia/TerminalApp/CommandPalette.cpp index 34f899bb8da..95dd92380de 100644 --- a/src/cascadia/TerminalApp/CommandPalette.cpp +++ b/src/cascadia/TerminalApp/CommandPalette.cpp @@ -235,7 +235,7 @@ namespace winrt::TerminalApp::implementation { if (const auto actionPaletteItem{ filteredCommand.Item().try_as() }) { - _PreviewActionHandlers(*this, actionPaletteItem.Command()); + PreviewAction.raise(*this, actionPaletteItem.Command()); } } else if (_currentMode == CommandPaletteMode::CommandlineMode) @@ -569,7 +569,7 @@ namespace winrt::TerminalApp::implementation void CommandPalette::_moveBackButtonClicked(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs&) { - _PreviewActionHandlers(*this, nullptr); + PreviewAction.raise(*this, nullptr); _searchBox().Focus(FocusState::Programmatic); const auto previousAction{ _nestedActionStack.GetAt(_nestedActionStack.Size() - 1) }; @@ -714,7 +714,7 @@ namespace winrt::TerminalApp::implementation // All other actions can just be dispatched. if (actionPaletteItem.Command().ActionAndArgs().Action() != ShortcutAction::ToggleCommandPalette) { - _DispatchCommandRequestedHandlers(*this, actionPaletteItem.Command()); + DispatchCommandRequested.raise(*this, actionPaletteItem.Command()); } TraceLoggingWrite( @@ -768,7 +768,7 @@ namespace winrt::TerminalApp::implementation { if (const auto tab{ tabPaletteItem.Tab() }) { - _SwitchToTabRequestedHandlers(*this, tab); + SwitchToTabRequested.raise(*this, tab); } } } @@ -796,7 +796,7 @@ namespace winrt::TerminalApp::implementation if (const auto commandLinePaletteItem{ filteredCommand.value().Item().try_as() }) { - _CommandLineExecutionRequestedHandlers(*this, commandLinePaletteItem.CommandLine()); + CommandLineExecutionRequested.raise(*this, commandLinePaletteItem.CommandLine()); _close(); } } @@ -1197,7 +1197,7 @@ namespace winrt::TerminalApp::implementation { Visibility(Visibility::Collapsed); - _PreviewActionHandlers(*this, nullptr); + PreviewAction.raise(*this, nullptr); // Reset visibility in case anchor mode tab switcher just finished. _searchBox().Visibility(Visibility::Visible); diff --git a/src/cascadia/TerminalApp/CommandPalette.h b/src/cascadia/TerminalApp/CommandPalette.h index d0877913c41..e9dd73cbdf4 100644 --- a/src/cascadia/TerminalApp/CommandPalette.h +++ b/src/cascadia/TerminalApp/CommandPalette.h @@ -48,18 +48,18 @@ namespace winrt::TerminalApp::implementation void EnableTabSwitcherMode(const uint32_t startIdx, Microsoft::Terminal::Settings::Model::TabSwitcherMode tabSwitcherMode); void EnableTabSearchMode(); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, NoMatchesText, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, SearchBoxPlaceholderText, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, PrefixCharacter, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ControlName, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParentCommandName, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParsedCommandLineText, _PropertyChangedHandlers); - - TYPED_EVENT(SwitchToTabRequested, winrt::TerminalApp::CommandPalette, winrt::TerminalApp::TabBase); - TYPED_EVENT(CommandLineExecutionRequested, winrt::TerminalApp::CommandPalette, winrt::hstring); - TYPED_EVENT(DispatchCommandRequested, winrt::TerminalApp::CommandPalette, Microsoft::Terminal::Settings::Model::Command); - TYPED_EVENT(PreviewAction, Windows::Foundation::IInspectable, Microsoft::Terminal::Settings::Model::Command); + til::property_changed_event PropertyChanged; + til::typed_event SwitchToTabRequested; + til::typed_event CommandLineExecutionRequested; + til::typed_event DispatchCommandRequested; + til::typed_event PreviewAction; + + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, NoMatchesText, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, SearchBoxPlaceholderText, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, PrefixCharacter, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ControlName, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParentCommandName, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParsedCommandLineText, PropertyChanged.raise); private: struct winrt_object_hash diff --git a/src/cascadia/TerminalApp/DebugTapConnection.cpp b/src/cascadia/TerminalApp/DebugTapConnection.cpp index 789c1f21395..25251bd9dfd 100644 --- a/src/cascadia/TerminalApp/DebugTapConnection.cpp +++ b/src/cascadia/TerminalApp/DebugTapConnection.cpp @@ -62,7 +62,7 @@ namespace winrt::Microsoft::TerminalApp::implementation { _outputRevoker = wrappedConnection.TerminalOutput(winrt::auto_revoke, { this, &DebugTapConnection::_OutputHandler }); _stateChangedRevoker = wrappedConnection.StateChanged(winrt::auto_revoke, [this](auto&& /*s*/, auto&& /*e*/) { - _StateChangedHandlers(*this, nullptr); + StateChanged.raise(*this, nullptr); }); _wrappedConnection = wrappedConnection; } @@ -127,7 +127,7 @@ namespace winrt::Microsoft::TerminalApp::implementation { output.insert(++lfPos, L"\r\n"); } - _TerminalOutputHandlers(output); + TerminalOutput.raise(output); } // Called by the DebugInputTapConnection to print user input @@ -135,7 +135,7 @@ namespace winrt::Microsoft::TerminalApp::implementation { auto clean{ til::visualize_control_codes(str) }; auto formatted{ wil::str_printf(L"\x1b[91m%ls\x1b[m", clean.data()) }; - _TerminalOutputHandlers(formatted); + TerminalOutput.raise(formatted); } // Wire us up so that we can forward input through diff --git a/src/cascadia/TerminalApp/DebugTapConnection.h b/src/cascadia/TerminalApp/DebugTapConnection.h index 34282cb2464..933270df139 100644 --- a/src/cascadia/TerminalApp/DebugTapConnection.h +++ b/src/cascadia/TerminalApp/DebugTapConnection.h @@ -25,9 +25,9 @@ namespace winrt::Microsoft::TerminalApp::implementation void SetInputTap(const Microsoft::Terminal::TerminalConnection::ITerminalConnection& inputTap); - WINRT_CALLBACK(TerminalOutput, winrt::Microsoft::Terminal::TerminalConnection::TerminalOutputHandler); + til::event TerminalOutput; - TYPED_EVENT(StateChanged, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection, winrt::Windows::Foundation::IInspectable); + til::typed_event StateChanged; private: void _PrintInput(const hstring& data); diff --git a/src/cascadia/TerminalApp/FilteredCommand.h b/src/cascadia/TerminalApp/FilteredCommand.h index 397151e4d87..e5df7bb018a 100644 --- a/src/cascadia/TerminalApp/FilteredCommand.h +++ b/src/cascadia/TerminalApp/FilteredCommand.h @@ -23,11 +23,11 @@ namespace winrt::TerminalApp::implementation static int Compare(const winrt::TerminalApp::FilteredCommand& first, const winrt::TerminalApp::FilteredCommand& second); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::PaletteItem, Item, _PropertyChangedHandlers, nullptr); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Filter, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::HighlightedText, HighlightedName, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(int, Weight, _PropertyChangedHandlers); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::PaletteItem, Item, PropertyChanged.raise, nullptr); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Filter, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::HighlightedText, HighlightedName, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(int, Weight, PropertyChanged.raise); private: winrt::TerminalApp::HighlightedText _computeHighlightedName(); diff --git a/src/cascadia/TerminalApp/HighlightedText.h b/src/cascadia/TerminalApp/HighlightedText.h index c9c29e7cbb8..9198919db0f 100644 --- a/src/cascadia/TerminalApp/HighlightedText.h +++ b/src/cascadia/TerminalApp/HighlightedText.h @@ -13,9 +13,9 @@ namespace winrt::TerminalApp::implementation HighlightedTextSegment() = default; HighlightedTextSegment(const winrt::hstring& text, bool isHighlighted); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, TextSegment, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, IsHighlighted, _PropertyChangedHandlers); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, TextSegment, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, IsHighlighted, PropertyChanged.raise); }; struct HighlightedText : HighlightedTextT @@ -23,8 +23,8 @@ namespace winrt::TerminalApp::implementation HighlightedText() = default; HighlightedText(const Windows::Foundation::Collections::IObservableVector& segments); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(Windows::Foundation::Collections::IObservableVector, Segments, _PropertyChangedHandlers); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Windows::Foundation::Collections::IObservableVector, Segments, PropertyChanged.raise); }; } diff --git a/src/cascadia/TerminalApp/MinMaxCloseControl.cpp b/src/cascadia/TerminalApp/MinMaxCloseControl.cpp index 0f07af0667c..fac7d2b2b3f 100644 --- a/src/cascadia/TerminalApp/MinMaxCloseControl.cpp +++ b/src/cascadia/TerminalApp/MinMaxCloseControl.cpp @@ -69,18 +69,18 @@ namespace winrt::TerminalApp::implementation void MinMaxCloseControl::_MinimizeClick(const winrt::Windows::Foundation::IInspectable& /*sender*/, const RoutedEventArgs& e) { - _MinimizeClickHandlers(*this, e); + MinimizeClick.raise(*this, e); } void MinMaxCloseControl::_MaximizeClick(const winrt::Windows::Foundation::IInspectable& /*sender*/, const RoutedEventArgs& e) { - _MaximizeClickHandlers(*this, e); + MaximizeClick.raise(*this, e); } void MinMaxCloseControl::_CloseClick(const winrt::Windows::Foundation::IInspectable& /*sender*/, const RoutedEventArgs& e) { - _CloseClickHandlers(*this, e); + CloseClick.raise(*this, e); } void MinMaxCloseControl::SetWindowVisualState(WindowVisualState visualState) diff --git a/src/cascadia/TerminalApp/MinMaxCloseControl.h b/src/cascadia/TerminalApp/MinMaxCloseControl.h index 382a33e7a2a..5bda6974f41 100644 --- a/src/cascadia/TerminalApp/MinMaxCloseControl.h +++ b/src/cascadia/TerminalApp/MinMaxCloseControl.h @@ -28,9 +28,9 @@ namespace winrt::TerminalApp::implementation void _CloseClick(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::RoutedEventArgs& e); - TYPED_EVENT(MinimizeClick, TerminalApp::MinMaxCloseControl, winrt::Windows::UI::Xaml::RoutedEventArgs); - TYPED_EVENT(MaximizeClick, TerminalApp::MinMaxCloseControl, winrt::Windows::UI::Xaml::RoutedEventArgs); - TYPED_EVENT(CloseClick, TerminalApp::MinMaxCloseControl, winrt::Windows::UI::Xaml::RoutedEventArgs); + til::typed_event MinimizeClick; + til::typed_event MaximizeClick; + til::typed_event CloseClick; std::shared_ptr> _displayToolTip{ nullptr }; std::optional _lastPressedButton{ std::nullopt }; diff --git a/src/cascadia/TerminalApp/PaletteItem.h b/src/cascadia/TerminalApp/PaletteItem.h index ca265307fe0..f1cea019056 100644 --- a/src/cascadia/TerminalApp/PaletteItem.h +++ b/src/cascadia/TerminalApp/PaletteItem.h @@ -11,10 +11,10 @@ namespace winrt::TerminalApp::implementation public: Windows::UI::Xaml::Controls::IconElement ResolvedIcon(); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Name, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Icon, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, KeyChordText, _PropertyChangedHandlers); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Name, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Icon, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, KeyChordText, PropertyChanged.raise); }; } diff --git a/src/cascadia/TerminalApp/Pane.cpp b/src/cascadia/TerminalApp/Pane.cpp index fccd8b8c5d1..59988d928fc 100644 --- a/src/cascadia/TerminalApp/Pane.cpp +++ b/src/cascadia/TerminalApp/Pane.cpp @@ -1119,7 +1119,7 @@ void Pane::_RestartTerminalRequestedHandler(const winrt::Windows::Foundation::II { return; } - _RestartTerminalRequestedHandlers(shared_from_this()); + RestartTerminalRequested.raise(shared_from_this()); } winrt::fire_and_forget Pane::_playBellSound(winrt::Windows::Foundation::Uri uri) @@ -1194,7 +1194,7 @@ void Pane::_ControlWarningBellHandler(const winrt::Windows::Foundation::IInspect } // raise the event with the bool value corresponding to the taskbar flag - _PaneRaiseBellHandlers(nullptr, WI_IsFlagSet(_profile.BellStyle(), winrt::Microsoft::Terminal::Settings::Model::BellStyle::Taskbar)); + PaneRaiseBell.raise(nullptr, WI_IsFlagSet(_profile.BellStyle(), winrt::Microsoft::Terminal::Settings::Model::BellStyle::Taskbar)); } } } @@ -1215,7 +1215,7 @@ void Pane::_ControlGotFocusHandler(const winrt::Windows::Foundation::IInspectabl { f = o.FocusState(); } - _GotFocusHandlers(shared_from_this(), f); + GotFocus.raise(shared_from_this(), f); } // Event Description: @@ -1225,7 +1225,7 @@ void Pane::_ControlGotFocusHandler(const winrt::Windows::Foundation::IInspectabl void Pane::_ControlLostFocusHandler(const winrt::Windows::Foundation::IInspectable& /* sender */, const RoutedEventArgs& /* args */) { - _LostFocusHandlers(shared_from_this()); + LostFocus.raise(shared_from_this()); } // Method Description: @@ -1237,7 +1237,7 @@ void Pane::_ControlLostFocusHandler(const winrt::Windows::Foundation::IInspectab void Pane::Close() { // Fire our Closed event to tell our parent that we should be removed. - _ClosedHandlers(nullptr, nullptr); + Closed.raise(nullptr, nullptr); } // Method Description: @@ -1465,7 +1465,7 @@ void Pane::UpdateVisuals() // - void Pane::_Focus() { - _GotFocusHandlers(shared_from_this(), FocusState::Programmatic); + GotFocus.raise(shared_from_this(), FocusState::Programmatic); if (const auto& control = GetLastFocusedTerminalControl()) { control.Focus(FocusState::Programmatic); @@ -1582,7 +1582,7 @@ std::shared_ptr Pane::DetachPane(std::shared_ptr pane) // Trigger the detached event on each child detached->WalkTree([](auto pane) { - pane->_DetachedHandlers(pane); + pane->Detached.raise(pane); }); return detached; @@ -1717,7 +1717,7 @@ void Pane::_CloseChild(const bool closeFirst, const bool isDetaching) // the control. Because Tab is relying on GotFocus to know who the // active pane in the tree is, without this call, _no one_ will be // the active pane any longer. - _GotFocusHandlers(shared_from_this(), FocusState::Programmatic); + GotFocus.raise(shared_from_this(), FocusState::Programmatic); } _UpdateBorders(); @@ -1828,7 +1828,7 @@ void Pane::_CloseChild(const bool closeFirst, const bool isDetaching) } // Notify the discarded child that it was closed by its parent - closedChild->_ClosedByParentHandlers(); + closedChild->ClosedByParent.raise(); } void Pane::_CloseChildRoutine(const bool closeFirst) diff --git a/src/cascadia/TerminalApp/Pane.h b/src/cascadia/TerminalApp/Pane.h index 7c04bcabc09..e7660d4b70c 100644 --- a/src/cascadia/TerminalApp/Pane.h +++ b/src/cascadia/TerminalApp/Pane.h @@ -210,16 +210,16 @@ class Pane : public std::enable_shared_from_this void CollectTaskbarStates(std::vector& states); - WINRT_CALLBACK(ClosedByParent, winrt::delegate<>); - WINRT_CALLBACK(Closed, winrt::Windows::Foundation::EventHandler); + til::event> ClosedByParent; + til::event> Closed; using gotFocusArgs = winrt::delegate, winrt::Windows::UI::Xaml::FocusState>; - WINRT_CALLBACK(GotFocus, gotFocusArgs); - WINRT_CALLBACK(LostFocus, winrt::delegate>); - WINRT_CALLBACK(PaneRaiseBell, winrt::Windows::Foundation::EventHandler); - WINRT_CALLBACK(Detached, winrt::delegate>); - WINRT_CALLBACK(RestartTerminalRequested, winrt::delegate>); + til::event GotFocus; + til::event>> LostFocus; + til::event> PaneRaiseBell; + til::event>> Detached; + til::event>> RestartTerminalRequested; private: struct PanePoint; diff --git a/src/cascadia/TerminalApp/SuggestionsControl.cpp b/src/cascadia/TerminalApp/SuggestionsControl.cpp index 742e8222015..902cd06ebb5 100644 --- a/src/cascadia/TerminalApp/SuggestionsControl.cpp +++ b/src/cascadia/TerminalApp/SuggestionsControl.cpp @@ -268,7 +268,7 @@ namespace winrt::TerminalApp::implementation const auto selectedCommand = _filteredActionsView().SelectedItem(); const auto filteredCommand{ selectedCommand.try_as() }; - _PropertyChangedHandlers(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"SelectedItem" }); + PropertyChanged.raise(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"SelectedItem" }); // Make sure to not send the preview if we're collapsed. This can // sometimes fire after we've been closed, which can trigger us to diff --git a/src/cascadia/TerminalApp/SuggestionsControl.h b/src/cascadia/TerminalApp/SuggestionsControl.h index b156ab377c5..77596ce307e 100644 --- a/src/cascadia/TerminalApp/SuggestionsControl.h +++ b/src/cascadia/TerminalApp/SuggestionsControl.h @@ -50,12 +50,12 @@ namespace winrt::TerminalApp::implementation til::typed_event DispatchCommandRequested; til::typed_event PreviewAction; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, NoMatchesText, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, SearchBoxPlaceholderText, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ControlName, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParentCommandName, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParsedCommandLineText, _PropertyChangedHandlers); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, NoMatchesText, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, SearchBoxPlaceholderText, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ControlName, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParentCommandName, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, ParsedCommandLineText, PropertyChanged.raise); private: struct winrt_object_hash diff --git a/src/cascadia/TerminalApp/TabBase.cpp b/src/cascadia/TerminalApp/TabBase.cpp index 5077067762a..04b7268ba06 100644 --- a/src/cascadia/TerminalApp/TabBase.cpp +++ b/src/cascadia/TerminalApp/TabBase.cpp @@ -53,7 +53,7 @@ namespace winrt::TerminalApp::implementation contextMenuFlyout.Closed([weakThis](auto&&, auto&&) { if (auto tab{ weakThis.get() }) { - tab->_RequestFocusActiveControlHandlers(); + tab->RequestFocusActiveControl.raise(); } }); _AppendCloseMenuItems(contextMenuFlyout); @@ -106,7 +106,7 @@ namespace winrt::TerminalApp::implementation closeTabMenuItem.Click([weakThis](auto&&, auto&&) { if (auto tab{ weakThis.get() }) { - tab->_CloseRequestedHandlers(nullptr, nullptr); + tab->CloseRequested.raise(nullptr, nullptr); } }); closeTabMenuItem.Text(RS_(L"TabClose")); @@ -260,7 +260,7 @@ namespace winrt::TerminalApp::implementation TabViewItem().Tapped([weakThis{ get_weak() }](auto&&, auto&&) { if (auto tab{ weakThis.get() }) { - tab->_RequestFocusActiveControlHandlers(); + tab->RequestFocusActiveControl.raise(); } }); diff --git a/src/cascadia/TerminalApp/TabBase.h b/src/cascadia/TerminalApp/TabBase.h index 108b30a502c..8a0190ad3c3 100644 --- a/src/cascadia/TerminalApp/TabBase.h +++ b/src/cascadia/TerminalApp/TabBase.h @@ -32,23 +32,23 @@ namespace winrt::TerminalApp::implementation Microsoft::Terminal::Settings::Model::TabCloseButtonVisibility CloseButtonVisibility(); void CloseButtonVisibility(Microsoft::Terminal::Settings::Model::TabCloseButtonVisibility visible); - WINRT_CALLBACK(RequestFocusActiveControl, winrt::delegate); + til::event> RequestFocusActiveControl; - WINRT_CALLBACK(Closed, winrt::Windows::Foundation::EventHandler); - WINRT_CALLBACK(CloseRequested, winrt::Windows::Foundation::EventHandler); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::event> Closed; + til::event> CloseRequested; + til::property_changed_event PropertyChanged; // The TabViewIndex is the index this Tab object resides in TerminalPage's _tabs vector. WINRT_PROPERTY(uint32_t, TabViewIndex, 0); // The TabViewNumTabs is the number of Tab objects in TerminalPage's _tabs vector. WINRT_PROPERTY(uint32_t, TabViewNumTabs, 0); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Title, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Icon, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, ReadOnly, _PropertyChangedHandlers, false); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Title, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Icon, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, ReadOnly, PropertyChanged.raise, false); WINRT_PROPERTY(winrt::Microsoft::UI::Xaml::Controls::TabViewItem, TabViewItem, nullptr); - WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::FrameworkElement, Content, _PropertyChangedHandlers, nullptr); + WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::FrameworkElement, Content, PropertyChanged.raise, nullptr); protected: winrt::Windows::UI::Xaml::FocusState _focusState{ winrt::Windows::UI::Xaml::FocusState::Unfocused }; diff --git a/src/cascadia/TerminalApp/TabHeaderControl.cpp b/src/cascadia/TerminalApp/TabHeaderControl.cpp index b695364619f..df337b458dd 100644 --- a/src/cascadia/TerminalApp/TabHeaderControl.cpp +++ b/src/cascadia/TerminalApp/TabHeaderControl.cpp @@ -120,7 +120,7 @@ namespace winrt::TerminalApp::implementation _CloseRenameBox(); if (!_renameCancelled) { - _TitleChangeRequestedHandlers(HeaderRenamerTextBox().Text()); + TitleChangeRequested.raise(HeaderRenamerTextBox().Text()); } } @@ -132,7 +132,7 @@ namespace winrt::TerminalApp::implementation { HeaderRenamerTextBox().Visibility(Windows::UI::Xaml::Visibility::Collapsed); HeaderTextBlock().Visibility(Windows::UI::Xaml::Visibility::Visible); - _RenameEndedHandlers(*this, nullptr); + RenameEnded.raise(*this, nullptr); } } } diff --git a/src/cascadia/TerminalApp/TabHeaderControl.h b/src/cascadia/TerminalApp/TabHeaderControl.h index fd78ec2a31a..f9456ba48e6 100644 --- a/src/cascadia/TerminalApp/TabHeaderControl.h +++ b/src/cascadia/TerminalApp/TabHeaderControl.h @@ -19,14 +19,13 @@ namespace winrt::TerminalApp::implementation bool InRename(); - WINRT_CALLBACK(TitleChangeRequested, TerminalApp::TitleChangeRequestedArgs); + til::event TitleChangeRequested; + til::typed_event<> RenameEnded; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Title, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(double, RenamerMaxWidth, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::TerminalTabStatus, TabStatus, _PropertyChangedHandlers); - - TYPED_EVENT(RenameEnded, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Title, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(double, RenamerMaxWidth, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::TerminalTabStatus, TabStatus, PropertyChanged.raise); private: bool _receivedKeyDown{ false }; diff --git a/src/cascadia/TerminalApp/TabManagement.cpp b/src/cascadia/TerminalApp/TabManagement.cpp index 78a1ead3acd..2228f8234e9 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -148,7 +148,7 @@ namespace winrt::TerminalApp::implementation // Update the taskbar progress as well. We'll raise our own // SetTaskbarProgress event here, to get tell the hosting // application to re-query this value from us. - page->_SetTaskbarProgressHandlers(*page, nullptr); + page->SetTaskbarProgress.raise(*page, nullptr); auto profile = tab->GetFocusedProfile(); page->_UpdateBackground(profile); @@ -164,7 +164,7 @@ namespace winrt::TerminalApp::implementation if (page && tab) { - page->_RaiseVisualBellHandlers(nullptr, nullptr); + page->RaiseVisualBell.raise(nullptr, nullptr); } }); @@ -486,7 +486,7 @@ namespace winrt::TerminalApp::implementation // if the user manually closed all tabs. // Do this only if we are the last window; the monarch will notice // we are missing and remove us that way otherwise. - _LastTabClosedHandlers(*this, winrt::make(!_maintainStateOnTabClose)); + LastTabClosed.raise(*this, winrt::make(!_maintainStateOnTabClose)); } else if (focusedTabIndex.has_value() && focusedTabIndex.value() == gsl::narrow_cast(tabIndex)) { @@ -954,7 +954,7 @@ namespace winrt::TerminalApp::implementation // Raise an event that our title changed if (_settings.GlobalSettings().ShowTitleInTitlebar()) { - _TitleChangedHandlers(*this, tab.Title()); + TitleChanged.raise(*this, tab.Title()); } _updateThemeColors(); diff --git a/src/cascadia/TerminalApp/TabPaletteItem.cpp b/src/cascadia/TerminalApp/TabPaletteItem.cpp index 16a456fae44..e3c550206d6 100644 --- a/src/cascadia/TerminalApp/TabPaletteItem.cpp +++ b/src/cascadia/TerminalApp/TabPaletteItem.cpp @@ -52,7 +52,7 @@ namespace winrt::TerminalApp::implementation // Sometimes nested bindings do not get updated, // thus let's notify property changed on TabStatus when one of its properties changes auto item{ weakThis.get() }; - item->_PropertyChangedHandlers(*item, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"TabStatus" }); + item->PropertyChanged.raise(*item, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"TabStatus" }); }); } } diff --git a/src/cascadia/TerminalApp/TabPaletteItem.h b/src/cascadia/TerminalApp/TabPaletteItem.h index f45a4ed2e15..dc2435ed2e1 100644 --- a/src/cascadia/TerminalApp/TabPaletteItem.h +++ b/src/cascadia/TerminalApp/TabPaletteItem.h @@ -18,7 +18,7 @@ namespace winrt::TerminalApp::implementation return _tab.get(); } - WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::TerminalTabStatus, TabStatus, _PropertyChangedHandlers); + WINRT_OBSERVABLE_PROPERTY(winrt::TerminalApp::TerminalTabStatus, TabStatus, PropertyChanged.raise); private: winrt::weak_ref _tab; diff --git a/src/cascadia/TerminalApp/TabRowControl.h b/src/cascadia/TerminalApp/TabRowControl.h index b515ad1c23b..d216dbef711 100644 --- a/src/cascadia/TerminalApp/TabRowControl.h +++ b/src/cascadia/TerminalApp/TabRowControl.h @@ -17,8 +17,8 @@ namespace winrt::TerminalApp::implementation void OnNewTabButtonDrop(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::DragEventArgs& e); void OnNewTabButtonDragOver(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::DragEventArgs& e); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(bool, ShowElevationShield, _PropertyChangedHandlers, false); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(bool, ShowElevationShield, PropertyChanged.raise, false); }; } diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index b3563a395b8..608abe0c0db 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -187,7 +187,7 @@ namespace winrt::TerminalApp::implementation } // Inform the host that our titlebar content has changed. - _SetTitleBarContentHandlers(*this, _tabRow); + SetTitleBarContent.raise(*this, _tabRow); // GH#13143 Manually set the tab row's background to transparent here. // @@ -658,7 +658,7 @@ namespace winrt::TerminalApp::implementation // have a tab yet, but will once we're initialized. if (_tabs.Size() == 0 && !(_shouldStartInboundListener || _isEmbeddingInboundListener)) { - _LastTabClosedHandlers(*this, winrt::make(false)); + LastTabClosed.raise(*this, winrt::make(false)); co_return; } else @@ -689,7 +689,7 @@ namespace winrt::TerminalApp::implementation Dispatcher().RunAsync(CoreDispatcherPriority::Low, [weak = get_weak()]() { if (auto self{ weak.get() }) { - self->_InitializedHandlers(*self, nullptr); + self->Initialized.raise(*self, nullptr); } }); } @@ -1623,7 +1623,7 @@ namespace winrt::TerminalApp::implementation if (tab == _GetFocusedTab()) { - _TitleChangedHandlers(*this, newTabTitle); + TitleChanged.raise(*this, newTabTitle); } } @@ -1892,7 +1892,7 @@ namespace winrt::TerminalApp::implementation co_return; } - _QuitRequestedHandlers(nullptr, nullptr); + QuitRequested.raise(nullptr, nullptr); } } @@ -2180,7 +2180,7 @@ namespace winrt::TerminalApp::implementation { request->WindowPosition(dragPoint->to_winrt_point()); } - _RequestMoveContentHandlers(*this, *request); + RequestMoveContent.raise(*this, *request); } bool TerminalPage::_MoveTab(winrt::com_ptr tab, MoveTabArgs args) @@ -2946,7 +2946,7 @@ namespace winrt::TerminalApp::implementation winrt::fire_and_forget TerminalPage::_SetTaskbarProgressHandler(const IInspectable /*sender*/, const IInspectable /*eventArgs*/) { co_await wil::resume_foreground(Dispatcher()); - _SetTaskbarProgressHandlers(*this, nullptr); + SetTaskbarProgress.raise(*this, nullptr); } // Method Description: @@ -2956,7 +2956,7 @@ namespace winrt::TerminalApp::implementation // - args: the arguments specifying how to set the display status to ShowWindow for our window handle void TerminalPage::_ShowWindowChangedHandler(const IInspectable /*sender*/, const Microsoft::Terminal::Control::ShowWindowArgs args) { - _ShowWindowChangedHandlers(*this, args); + ShowWindowChanged.raise(*this, args); } // Method Description: @@ -3364,7 +3364,7 @@ namespace winrt::TerminalApp::implementation // will let the user hot-reload this setting, but any runtime changes to // the alwaysOnTop setting will be lost. _isAlwaysOnTop = _settings.GlobalSettings().AlwaysOnTop(); - _AlwaysOnTopChangedHandlers(*this, nullptr); + AlwaysOnTopChanged.raise(*this, nullptr); // Settings AllowDependentAnimations will affect whether animations are // enabled application-wide, so we don't need to check it each time we @@ -3572,7 +3572,7 @@ namespace winrt::TerminalApp::implementation { _isInFocusMode = newInFocusMode; _UpdateTabView(); - _FocusModeChangedHandlers(*this, nullptr); + FocusModeChanged.raise(*this, nullptr); } } @@ -3597,7 +3597,7 @@ namespace winrt::TerminalApp::implementation void TerminalPage::ToggleAlwaysOnTop() { _isAlwaysOnTop = !_isAlwaysOnTop; - _AlwaysOnTopChangedHandlers(*this, nullptr); + AlwaysOnTopChanged.raise(*this, nullptr); } // Method Description: @@ -3798,7 +3798,7 @@ namespace winrt::TerminalApp::implementation } _isFullscreen = newFullscreen; _UpdateTabView(); - _FullscreenChangedHandlers(*this, nullptr); + FullscreenChanged.raise(*this, nullptr); } // Method Description: @@ -3817,7 +3817,7 @@ namespace winrt::TerminalApp::implementation return; } _isMaximized = newMaximized; - _ChangeMaximizeRequestedHandlers(*this, nullptr); + ChangeMaximizeRequested.raise(*this, nullptr); } HRESULT TerminalPage::_OnNewConnection(const ConptyConnection& connection) @@ -3860,7 +3860,7 @@ namespace winrt::TerminalApp::implementation _CreateNewTabFromPane(newPane); // Request a summon of this window to the foreground - _SummonWindowRequestedHandlers(*this, nullptr); + SummonWindowRequested.raise(*this, nullptr); const IInspectable unused{ nullptr }; _SetAsDefaultDismissHandler(unused, unused); @@ -4315,7 +4315,7 @@ namespace winrt::TerminalApp::implementation { WindowRenamer().IsOpen(false); } - _RenameWindowRequestedHandlers(*this, request); + RenameWindowRequested.raise(*this, request); // We can't just use request.Successful here, because the handler might // (will) be handling this asynchronously, so when control returns to // us, this hasn't actually been handled yet. We'll get called back in @@ -5122,7 +5122,7 @@ namespace winrt::TerminalApp::implementation // This will go up to the monarch, who will then dispatch the request // back down to the source TerminalPage, who will then perform a // RequestMoveContent to move their tab to us. - _RequestReceiveContentHandlers(*this, *request); + RequestReceiveContent.raise(*this, *request); } } diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index 90caedf4a24..12c20a8056d 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -172,33 +172,33 @@ namespace winrt::TerminalApp::implementation uint32_t NumberOfTabs() const; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; // -------------------------------- WinRT Events --------------------------------- - TYPED_EVENT(TitleChanged, IInspectable, winrt::hstring); - TYPED_EVENT(LastTabClosed, IInspectable, winrt::TerminalApp::LastTabClosedEventArgs); - TYPED_EVENT(SetTitleBarContent, IInspectable, winrt::Windows::UI::Xaml::UIElement); - TYPED_EVENT(FocusModeChanged, IInspectable, IInspectable); - TYPED_EVENT(FullscreenChanged, IInspectable, IInspectable); - TYPED_EVENT(ChangeMaximizeRequested, IInspectable, IInspectable); - TYPED_EVENT(AlwaysOnTopChanged, IInspectable, IInspectable); - TYPED_EVENT(RaiseVisualBell, IInspectable, IInspectable); - TYPED_EVENT(SetTaskbarProgress, IInspectable, IInspectable); - TYPED_EVENT(Initialized, IInspectable, IInspectable); - TYPED_EVENT(IdentifyWindowsRequested, IInspectable, IInspectable); - TYPED_EVENT(RenameWindowRequested, Windows::Foundation::IInspectable, winrt::TerminalApp::RenameWindowRequestedArgs); - TYPED_EVENT(SummonWindowRequested, IInspectable, IInspectable); - - TYPED_EVENT(CloseRequested, IInspectable, IInspectable); - TYPED_EVENT(OpenSystemMenu, IInspectable, IInspectable); - TYPED_EVENT(QuitRequested, IInspectable, IInspectable); - TYPED_EVENT(ShowWindowChanged, IInspectable, winrt::Microsoft::Terminal::Control::ShowWindowArgs) - - TYPED_EVENT(RequestMoveContent, Windows::Foundation::IInspectable, winrt::TerminalApp::RequestMoveContentArgs); - TYPED_EVENT(RequestReceiveContent, Windows::Foundation::IInspectable, winrt::TerminalApp::RequestReceiveContentArgs); - - WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::Media::Brush, TitlebarBrush, _PropertyChangedHandlers, nullptr); - WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::Media::Brush, FrameBrush, _PropertyChangedHandlers, nullptr); + til::typed_event TitleChanged; + til::typed_event LastTabClosed; + til::typed_event SetTitleBarContent; + til::typed_event FocusModeChanged; + til::typed_event FullscreenChanged; + til::typed_event ChangeMaximizeRequested; + til::typed_event AlwaysOnTopChanged; + til::typed_event RaiseVisualBell; + til::typed_event SetTaskbarProgress; + til::typed_event Initialized; + til::typed_event IdentifyWindowsRequested; + til::typed_event RenameWindowRequested; + til::typed_event SummonWindowRequested; + + til::typed_event CloseRequested; + til::typed_event OpenSystemMenu; + til::typed_event QuitRequested; + til::typed_event ShowWindowChanged; + + til::typed_event RequestMoveContent; + til::typed_event RequestReceiveContent; + + WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::Media::Brush, TitlebarBrush, PropertyChanged.raise, nullptr); + WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::Media::Brush, FrameBrush, PropertyChanged.raise, nullptr); private: friend struct TerminalPageT; // for Xaml to bind events diff --git a/src/cascadia/TerminalApp/TerminalTab.cpp b/src/cascadia/TerminalApp/TerminalTab.cpp index 0c3d036623f..b3d37d88a17 100644 --- a/src/cascadia/TerminalApp/TerminalTab.cpp +++ b/src/cascadia/TerminalApp/TerminalTab.cpp @@ -80,7 +80,7 @@ namespace winrt::TerminalApp::implementation void TerminalTab::_Setup() { _rootClosedToken = _rootPane->Closed([=](auto&& /*s*/, auto&& /*e*/) { - _ClosedHandlers(nullptr, nullptr); + Closed.raise(nullptr, nullptr); }); Content(_rootPane->GetRootElement()); @@ -103,7 +103,7 @@ namespace winrt::TerminalApp::implementation _headerControl.RenameEnded([weakThis = get_weak()](auto&&, auto&&) { if (auto tab{ weakThis.get() }) { - tab->_RequestFocusActiveControlHandlers(); + tab->RequestFocusActiveControl.raise(); } }); @@ -596,14 +596,14 @@ namespace winrt::TerminalApp::implementation _rootPane->Closed(_rootClosedToken); auto p = _rootPane; p->WalkTree([](auto pane) { - pane->_DetachedHandlers(pane); + pane->Detached.raise(pane); }); // Clean up references and close the tab _rootPane = nullptr; _activePane = nullptr; Content(nullptr); - _ClosedHandlers(nullptr, nullptr); + Closed.raise(nullptr, nullptr); return p; } @@ -1075,7 +1075,7 @@ namespace winrt::TerminalApp::implementation } // fire an event signaling that our taskbar progress changed. - _TaskbarProgressChangedHandlers(nullptr, nullptr); + TaskbarProgressChanged.raise(nullptr, nullptr); } // Method Description: @@ -1155,7 +1155,7 @@ namespace winrt::TerminalApp::implementation _RecalculateAndApplyReadOnly(); // Raise our own ActivePaneChanged event. - _ActivePaneChangedHandlers(); + ActivePaneChanged.raise(); } // Method Description: @@ -1258,7 +1258,7 @@ namespace winrt::TerminalApp::implementation { // If visual is set, we need to bubble this event all the way to app host to flash the taskbar // In this part of the chain we bubble it from the hosting tab to the page - tab->_TabRaiseVisualBellHandlers(); + tab->TabRaiseVisualBell.raise(); } // Show the bell indicator in the tab header @@ -1497,7 +1497,7 @@ namespace winrt::TerminalApp::implementation // focus from the tab renamer. if (!tab->_headerControl.InRename() && !tab->GetActiveTerminalControl().SearchBoxEditInFocus()) { - tab->_RequestFocusActiveControlHandlers(); + tab->RequestFocusActiveControl.raise(); } } }); diff --git a/src/cascadia/TerminalApp/TerminalTab.h b/src/cascadia/TerminalApp/TerminalTab.h index d3b03f426fd..ca5901af648 100644 --- a/src/cascadia/TerminalApp/TerminalTab.h +++ b/src/cascadia/TerminalApp/TerminalTab.h @@ -96,9 +96,9 @@ namespace winrt::TerminalApp::implementation return _tabStatus; } - WINRT_CALLBACK(ActivePaneChanged, winrt::delegate<>); - WINRT_CALLBACK(TabRaiseVisualBell, winrt::delegate<>); - TYPED_EVENT(TaskbarProgressChanged, IInspectable, IInspectable); + til::event> ActivePaneChanged; + til::event> TabRaiseVisualBell; + til::typed_event TaskbarProgressChanged; private: static constexpr double HeaderRenameBoxWidthDefault{ 165 }; diff --git a/src/cascadia/TerminalApp/TerminalTabStatus.h b/src/cascadia/TerminalApp/TerminalTabStatus.h index 838a909df22..d500de325d3 100644 --- a/src/cascadia/TerminalApp/TerminalTabStatus.h +++ b/src/cascadia/TerminalApp/TerminalTabStatus.h @@ -11,15 +11,15 @@ namespace winrt::TerminalApp::implementation { TerminalTabStatus() = default; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(bool, IsConnectionClosed, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, IsPaneZoomed, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, IsProgressRingActive, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, IsProgressRingIndeterminate, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, BellIndicator, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, IsReadOnlyActive, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(uint32_t, ProgressValue, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(bool, IsInputBroadcastActive, _PropertyChangedHandlers); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(bool, IsConnectionClosed, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, IsPaneZoomed, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, IsProgressRingActive, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, IsProgressRingIndeterminate, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, BellIndicator, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, IsReadOnlyActive, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(uint32_t, ProgressValue, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(bool, IsInputBroadcastActive, PropertyChanged.raise); }; } diff --git a/src/cascadia/TerminalApp/TerminalWindow.cpp b/src/cascadia/TerminalApp/TerminalWindow.cpp index 51e7f758da5..0ca513a064a 100644 --- a/src/cascadia/TerminalApp/TerminalWindow.cpp +++ b/src/cascadia/TerminalApp/TerminalWindow.cpp @@ -226,7 +226,7 @@ namespace winrt::TerminalApp::implementation auto args = winrt::make_self(RS_(L"SettingsMenuItem"), SystemMenuChangeAction::Add, SystemMenuItemHandler(this, &TerminalWindow::_OpenSettingsUI)); - _SystemMenuChangeRequestedHandlers(*this, *args); + SystemMenuChangeRequested.raise(*this, *args); TraceLoggingWrite( g_hTerminalAppProvider, @@ -748,7 +748,7 @@ namespace winrt::TerminalApp::implementation void TerminalWindow::_RefreshThemeRoutine() { // Propagate the event to the host layer, so it can update its own UI - _RequestedThemeChangedHandlers(*this, Theme()); + RequestedThemeChanged.raise(*this, Theme()); } // This may be called on a background thread, or the main thread, but almost @@ -767,7 +767,7 @@ namespace winrt::TerminalApp::implementation _root->SetSettings(_settings, true); // Bubble the notification up to the AppHost, now that we've updated our _settings. - _SettingsChangedHandlers(*this, args); + SettingsChanged.raise(*this, args); if (FAILED(args.Result())) { @@ -1239,7 +1239,7 @@ namespace winrt::TerminalApp::implementation // If we're entering Quake Mode from Focus Mode, then this will do nothing // If we're leaving Quake Mode (we're already in Focus Mode), then this will do nothing _root->SetFocusMode(true); - _IsQuakeWindowChangedHandlers(*this, nullptr); + IsQuakeWindowChanged.raise(*this, nullptr); } } void TerminalWindow::WindowId(const uint64_t& id) @@ -1359,8 +1359,8 @@ namespace winrt::TerminalApp::implementation // PropertyChangedEventArgs will throw. try { - _PropertyChangedHandlers(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"WindowName" }); - _PropertyChangedHandlers(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"WindowNameForDisplay" }); + PropertyChanged.raise(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"WindowName" }); + PropertyChanged.raise(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"WindowNameForDisplay" }); } CATCH_LOG(); } diff --git a/src/cascadia/TerminalApp/TerminalWindow.h b/src/cascadia/TerminalApp/TerminalWindow.h index 8eff22ef455..8bf04971afb 100644 --- a/src/cascadia/TerminalApp/TerminalWindow.h +++ b/src/cascadia/TerminalApp/TerminalWindow.h @@ -48,9 +48,9 @@ namespace winrt::TerminalApp::implementation winrt::hstring WindowNameForDisplay() const noexcept; bool IsQuakeWindow() const noexcept; - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, VirtualWorkingDirectory, _PropertyChangedHandlers, L""); + til::property_changed_event PropertyChanged; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, VirtualWorkingDirectory, PropertyChanged.raise, L""); public: // Used for setting the initial CWD, before we have XAML set up for property change notifications. @@ -156,14 +156,17 @@ namespace winrt::TerminalApp::implementation // -------------------------------- WinRT Events --------------------------------- // PropertyChanged is surprisingly not a typed event, so we'll define that one manually. // Usually we'd just do - // WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + // til::property_changed_event PropertyChanged; // // But what we're doing here is exposing the Page's PropertyChanged _as // our own event_. It's a FORWARDED_CALLBACK, essentially. winrt::event_token PropertyChanged(Windows::UI::Xaml::Data::PropertyChangedEventHandler const& handler) { return _root->PropertyChanged(handler); } void PropertyChanged(winrt::event_token const& token) { _root->PropertyChanged(token); } - TYPED_EVENT(RequestedThemeChanged, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Settings::Model::Theme); + til::typed_event RequestedThemeChanged; + til::typed_event IsQuakeWindowChanged; + til::typed_event SystemMenuChangeRequested; + til::typed_event SettingsChanged; private: // If you add controls here, but forget to null them either here or in @@ -230,12 +233,6 @@ namespace winrt::TerminalApp::implementation FORWARDED_TYPED_EVENT(QuitRequested, Windows::Foundation::IInspectable, Windows::Foundation::IInspectable, _root, QuitRequested); FORWARDED_TYPED_EVENT(ShowWindowChanged, Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Control::ShowWindowArgs, _root, ShowWindowChanged); - TYPED_EVENT(IsQuakeWindowChanged, Windows::Foundation::IInspectable, Windows::Foundation::IInspectable); - - TYPED_EVENT(SystemMenuChangeRequested, winrt::Windows::Foundation::IInspectable, winrt::TerminalApp::SystemMenuChangeArgs); - - TYPED_EVENT(SettingsChanged, winrt::Windows::Foundation::IInspectable, winrt::TerminalApp::SettingsLoadEventArgs); - FORWARDED_TYPED_EVENT(RequestMoveContent, Windows::Foundation::IInspectable, winrt::TerminalApp::RequestMoveContentArgs, _root, RequestMoveContent); FORWARDED_TYPED_EVENT(RequestReceiveContent, Windows::Foundation::IInspectable, winrt::TerminalApp::RequestReceiveContentArgs, _root, RequestReceiveContent); diff --git a/src/cascadia/TerminalApp/pch.h b/src/cascadia/TerminalApp/pch.h index c75795f7bd0..6abc67781f2 100644 --- a/src/cascadia/TerminalApp/pch.h +++ b/src/cascadia/TerminalApp/pch.h @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include diff --git a/src/cascadia/TerminalConnection/AzureConnection.cpp b/src/cascadia/TerminalConnection/AzureConnection.cpp index 157d888f65c..973ade12d63 100644 --- a/src/cascadia/TerminalConnection/AzureConnection.cpp +++ b/src/cascadia/TerminalConnection/AzureConnection.cpp @@ -94,7 +94,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation // - str: the string to write. void AzureConnection::_WriteStringWithNewline(const std::wstring_view str) { - _TerminalOutputHandlers(str + L"\r\n"); + TerminalOutput.raise(str + L"\r\n"); } // Method description: @@ -110,7 +110,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation catch (const std::exception& runtimeException) { // This also catches the AzureException, which has a .what() - _TerminalOutputHandlers(_colorize(91, til::u8u16(std::string{ runtimeException.what() }))); + TerminalOutput.raise(_colorize(91, til::u8u16(std::string{ runtimeException.what() }))); } catch (...) { @@ -160,13 +160,13 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation _currentInputMode = mode; - _TerminalOutputHandlers(L"> \x1b[92m"); // Make prompted user input green + TerminalOutput.raise(L"> \x1b[92m"); // Make prompted user input green _inputEvent.wait(inputLock, [this, mode]() { return _currentInputMode != mode || _isStateAtOrBeyond(ConnectionState::Closing); }); - _TerminalOutputHandlers(L"\x1b[m"); + TerminalOutput.raise(L"\x1b[m"); if (_isStateAtOrBeyond(ConnectionState::Closing)) { @@ -204,19 +204,19 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation if (_userInput.size() > 0) { _userInput.pop_back(); - _TerminalOutputHandlers(L"\x08 \x08"); // overstrike the character with a space + TerminalOutput.raise(L"\x08 \x08"); // overstrike the character with a space } } else { - _TerminalOutputHandlers(data); // echo back + TerminalOutput.raise(data); // echo back switch (_currentInputMode) { case InputMode::Line: if (data.size() > 0 && gsl::at(data, 0) == UNICODE_CARRIAGERETURN) { - _TerminalOutputHandlers(L"\r\n"); // we probably got a \r, so we need to advance to the next line. + TerminalOutput.raise(L"\r\n"); // we probably got a \r, so we need to advance to the next line. _currentInputMode = InputMode::None; // toggling the mode indicates completion _inputEvent.notify_one(); break; @@ -279,7 +279,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation if (_hOutputThread) { - // Waiting for the output thread to exit ensures that all pending _TerminalOutputHandlers() + // Waiting for the output thread to exit ensures that all pending TerminalOutput.raise() // calls have returned and won't notify our caller (ControlCore) anymore. This ensures that // we don't call a destroyed event handler asynchronously from a background thread (GH#13880). WaitForSingleObject(_hOutputThread.get(), INFINITE); @@ -422,7 +422,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation } // Pass the output to our registered event handlers - _TerminalOutputHandlers(_u16Str); + TerminalOutput.raise(_u16Str); break; } case WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE: @@ -765,7 +765,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation const auto shellType = _ParsePreferredShellType(settingsResponse); _WriteStringWithNewline(RS_(L"AzureRequestingTerminal")); const auto socketUri = _GetTerminal(shellType); - _TerminalOutputHandlers(L"\r\n"); + TerminalOutput.raise(L"\r\n"); //// Step 8: connecting to said terminal { diff --git a/src/cascadia/TerminalConnection/AzureConnection.h b/src/cascadia/TerminalConnection/AzureConnection.h index f8a47b5009d..afb5d6e8b9c 100644 --- a/src/cascadia/TerminalConnection/AzureConnection.h +++ b/src/cascadia/TerminalConnection/AzureConnection.h @@ -26,7 +26,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation void Resize(uint32_t rows, uint32_t columns); void Close(); - WINRT_CALLBACK(TerminalOutput, TerminalOutputHandler); + til::event TerminalOutput; private: til::CoordType _initialRows{}; diff --git a/src/cascadia/TerminalConnection/BaseTerminalConnection.h b/src/cascadia/TerminalConnection/BaseTerminalConnection.h index 3cc98627c92..62ccd103d79 100644 --- a/src/cascadia/TerminalConnection/BaseTerminalConnection.h +++ b/src/cascadia/TerminalConnection/BaseTerminalConnection.h @@ -17,7 +17,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation return _connectionState; } - TYPED_EVENT(StateChanged, ITerminalConnection, winrt::Windows::Foundation::IInspectable); + til::typed_event StateChanged; protected: template @@ -49,7 +49,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation } // Dispatch the event outside of lock. #pragma warning(suppress : 26491) // We can't avoid static_cast downcast because this is template magic. - _StateChangedHandlers(*static_cast(this), nullptr); + StateChanged.raise(*static_cast(this), nullptr); return true; } CATCH_FAIL_FAST() diff --git a/src/cascadia/TerminalConnection/ConptyConnection.cpp b/src/cascadia/TerminalConnection/ConptyConnection.cpp index d5789a2b3e5..063083ace36 100644 --- a/src/cascadia/TerminalConnection/ConptyConnection.cpp +++ b/src/cascadia/TerminalConnection/ConptyConnection.cpp @@ -415,15 +415,15 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation winrt::hstring failureText{ fmt::format(std::wstring_view{ RS_(L"ProcessFailedToLaunch") }, fmt::format(_errorFormat, static_cast(hr)), _commandline) }; - _TerminalOutputHandlers(failureText); + TerminalOutput.raise(failureText); // If the path was invalid, let's present an informative message to the user if (hr == HRESULT_FROM_WIN32(ERROR_DIRECTORY)) { winrt::hstring badPathText{ fmt::format(std::wstring_view{ RS_(L"BadPathText") }, _startingDirectory) }; - _TerminalOutputHandlers(L"\r\n"); - _TerminalOutputHandlers(badPathText); + TerminalOutput.raise(L"\r\n"); + TerminalOutput.raise(badPathText); } _transitionToState(ConnectionState::Failed); @@ -442,11 +442,11 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation { // GH#11556 - make sure to format the error code to this string as an UNSIGNED int winrt::hstring exitText{ fmt::format(std::wstring_view{ RS_(L"ProcessExited") }, fmt::format(_errorFormat, status)) }; - _TerminalOutputHandlers(L"\r\n"); - _TerminalOutputHandlers(exitText); - _TerminalOutputHandlers(L"\r\n"); - _TerminalOutputHandlers(RS_(L"CtrlDToClose")); - _TerminalOutputHandlers(L"\r\n"); + TerminalOutput.raise(L"\r\n"); + TerminalOutput.raise(exitText); + TerminalOutput.raise(L"\r\n"); + TerminalOutput.raise(RS_(L"CtrlDToClose")); + TerminalOutput.raise(L"\r\n"); } CATCH_LOG(); } @@ -554,7 +554,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation // thread exit as fast as possible by aborting any ongoing writes coming from OpenConsole. CancelSynchronousIo(_hOutputThread.get()); - // Waiting for the output thread to exit ensures that all pending _TerminalOutputHandlers() + // Waiting for the output thread to exit ensures that all pending TerminalOutput.raise() // calls have returned and won't notify our caller (ControlCore) anymore. This ensures that // we don't call a destroyed event handler asynchronously from a background thread (GH#13880). const auto result = WaitForSingleObject(_hOutputThread.get(), 1000); @@ -676,7 +676,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation } // Pass the output to our registered event handlers - _TerminalOutputHandlers(_u16Str); + TerminalOutput.raise(_u16Str); } return 0; diff --git a/src/cascadia/TerminalConnection/ConptyConnection.h b/src/cascadia/TerminalConnection/ConptyConnection.h index a1b622081f0..2170b1fbfdf 100644 --- a/src/cascadia/TerminalConnection/ConptyConnection.h +++ b/src/cascadia/TerminalConnection/ConptyConnection.h @@ -57,7 +57,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation const winrt::guid& guid, const winrt::guid& profileGuid); - WINRT_CALLBACK(TerminalOutput, TerminalOutputHandler); + til::event TerminalOutput; private: static void closePseudoConsoleAsync(HPCON hPC) noexcept; diff --git a/src/cascadia/TerminalConnection/EchoConnection.cpp b/src/cascadia/TerminalConnection/EchoConnection.cpp index 449276dede8..5ac052ad6a5 100644 --- a/src/cascadia/TerminalConnection/EchoConnection.cpp +++ b/src/cascadia/TerminalConnection/EchoConnection.cpp @@ -33,7 +33,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation prettyPrint << wch; } } - _TerminalOutputHandlers(prettyPrint.str()); + TerminalOutput.raise(prettyPrint.str()); } void EchoConnection::Resize(uint32_t /*rows*/, uint32_t /*columns*/) noexcept diff --git a/src/cascadia/TerminalConnection/EchoConnection.h b/src/cascadia/TerminalConnection/EchoConnection.h index 2b7e84a76a0..cfdf4189db4 100644 --- a/src/cascadia/TerminalConnection/EchoConnection.h +++ b/src/cascadia/TerminalConnection/EchoConnection.h @@ -21,8 +21,8 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation winrt::guid SessionId() const noexcept { return {}; } ConnectionState State() const noexcept { return ConnectionState::Connected; } - WINRT_CALLBACK(TerminalOutput, TerminalOutputHandler); - TYPED_EVENT(StateChanged, ITerminalConnection, IInspectable); + til::event TerminalOutput; + til::typed_event StateChanged; }; } diff --git a/src/cascadia/TerminalConnection/pch.h b/src/cascadia/TerminalConnection/pch.h index 124397ca3b7..afaa1dd5ca8 100644 --- a/src/cascadia/TerminalConnection/pch.h +++ b/src/cascadia/TerminalConnection/pch.h @@ -37,5 +37,6 @@ TRACELOGGING_DECLARE_PROVIDER(g_hTerminalConnectionProvider); #include #include "til.h" +#include #include diff --git a/src/cascadia/TerminalControl/ControlCore.cpp b/src/cascadia/TerminalControl/ControlCore.cpp index b9eb79ac3a6..4027e914d8f 100644 --- a/src/cascadia/TerminalControl/ControlCore.cpp +++ b/src/cascadia/TerminalControl/ControlCore.cpp @@ -144,7 +144,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _renderer->SetBackgroundColorChangedCallback([this]() { _rendererBackgroundColorChanged(); }); _renderer->SetFrameColorChangedCallback([this]() { _rendererTabColorChanged(); }); - _renderer->SetRendererEnteredErrorStateCallback([this]() { _RendererEnteredErrorStateHandlers(nullptr, nullptr); }); + _renderer->SetRendererEnteredErrorStateCallback([this]() { RendererEnteredErrorState.raise(nullptr, nullptr); }); THROW_IF_FAILED(localPointerToThread->Initialize(_renderer.get())); } @@ -186,7 +186,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation [weakThis = get_weak()]() { if (auto core{ weakThis.get() }; !core->_IsClosing()) { - core->_CursorPositionChangedHandlers(*core, nullptr); + core->CursorPositionChanged.raise(*core, nullptr); } }); @@ -208,7 +208,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation [weakThis = get_weak()](const auto& update) { if (auto core{ weakThis.get() }; !core->_IsClosing()) { - core->_ScrollPositionChangedHandlers(*core, update); + core->ScrollPositionChanged.raise(*core, update); } }); } @@ -244,11 +244,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation _setupDispatcherAndCallbacks(); const auto actualNewSize = _actualFont.GetSize(); // Bubble this up, so our new control knows how big we want the font. - _FontSizeChangedHandlers(*this, winrt::make(actualNewSize.width, actualNewSize.height)); + FontSizeChanged.raise(*this, winrt::make(actualNewSize.width, actualNewSize.height)); // The renderer will be re-enabled in Initialize - _AttachedHandlers(*this, nullptr); + Attached.raise(*this, nullptr); } TerminalConnection::ITerminalConnection ControlCore::Connection() @@ -276,7 +276,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation { // Subscribe to the connection's disconnected event and call our connection closed handlers. _connectionStateChangedRevoker = newConnection.StateChanged(winrt::auto_revoke, [this](auto&& /*s*/, auto&& /*v*/) { - _ConnectionStateChangedHandlers(*this, nullptr); + ConnectionStateChanged.raise(*this, nullptr); }); // Get our current size in rows/cols, and hook them up to @@ -304,7 +304,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (oldState != ConnectionState()) { // rely on the null handling again // send the notification - _ConnectionStateChangedHandlers(*this, nullptr); + ConnectionStateChanged.raise(*this, nullptr); } } @@ -476,14 +476,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation { if (ch == CtrlD) { - _CloseTerminalRequestedHandlers(*this, nullptr); + CloseTerminalRequested.raise(*this, nullptr); return true; } if (ch == Enter) { // Ask the hosting application to give us a new connection. - _RestartTerminalRequestedHandlers(*this, nullptr); + RestartTerminalRequested.raise(*this, nullptr); return true; } } @@ -562,13 +562,13 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (const auto uri = _terminal->GetHyperlinkAtBufferPosition(_terminal->GetSelectionAnchor()); !uri.empty()) { lock.unlock(); - _OpenHyperlinkHandlers(*this, winrt::make(winrt::hstring{ uri })); + OpenHyperlink.raise(*this, winrt::make(winrt::hstring{ uri })); } else { const auto selectedText = _terminal->GetTextBuffer().GetPlainText(_terminal->GetSelectionAnchor(), _terminal->GetSelectionEnd()); lock.unlock(); - _OpenHyperlinkHandlers(*this, winrt::make(winrt::hstring{ selectedText })); + OpenHyperlink.raise(*this, winrt::make(winrt::hstring{ selectedText })); } return true; } @@ -747,7 +747,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation } auto eventArgs = winrt::make_self(newOpacity); - _TransparencyChangedHandlers(*this, *eventArgs); + TransparencyChanged.raise(*this, *eventArgs); } void ControlCore::ToggleShaderEffects() @@ -825,7 +825,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _renderer->TriggerRedrawAll(); } - _HoveredHyperlinkChangedHandlers(*this, nullptr); + HoveredHyperlinkChanged.raise(*this, nullptr); } } @@ -940,7 +940,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _renderer->NotifyPaintFrame(); auto eventArgs = winrt::make_self(Opacity()); - _TransparencyChangedHandlers(*this, *eventArgs); + TransparencyChanged.raise(*this, *eventArgs); _renderer->TriggerRedrawAll(true, true); } @@ -1019,11 +1019,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation _desiredFont.GetFaceName(), _actualFont.GetFaceName()) }; auto noticeArgs = winrt::make(NoticeLevel::Warning, message); - _RaiseNoticeHandlers(*this, std::move(noticeArgs)); + RaiseNotice.raise(*this, std::move(noticeArgs)); } const auto actualNewSize = _actualFont.GetSize(); - _FontSizeChangedHandlers(*this, winrt::make(actualNewSize.width, actualNewSize.height)); + FontSizeChanged.raise(*this, winrt::make(actualNewSize.width, actualNewSize.height)); } // Method Description: @@ -1226,7 +1226,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // when an OSC 52 is emitted. void ControlCore::_terminalCopyToClipboard(std::wstring_view wstr) { - _CopyToClipboardHandlers(*this, winrt::make(winrt::hstring{ wstr })); + CopyToClipboard.raise(*this, winrt::make(winrt::hstring{ wstr })); } // Method Description: @@ -1259,11 +1259,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation const auto& [textData, htmlData, rtfData] = _terminal->RetrieveSelectedTextFromBuffer(singleLine, copyHtml, copyRtf); // send data up for clipboard - _CopyToClipboardHandlers(*this, - winrt::make(winrt::hstring{ textData }, - winrt::to_hstring(htmlData), - winrt::to_hstring(rtfData), - copyFormats)); + CopyToClipboard.raise(*this, + winrt::make(winrt::hstring{ textData }, + winrt::to_hstring(htmlData), + winrt::to_hstring(rtfData), + copyFormats)); return true; } @@ -1487,7 +1487,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // Since this can only ever be triggered by output from the connection, // then the Terminal already has the write lock when calling this // callback. - _WarningBellHandlers(*this, nullptr); + WarningBell.raise(*this, nullptr); } // Method Description: @@ -1504,7 +1504,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // Since this can only ever be triggered by output from the connection, // then the Terminal already has the write lock when calling this // callback. - _TitleChangedHandlers(*this, winrt::make(winrt::hstring{ wstr })); + TitleChanged.raise(*this, winrt::make(winrt::hstring{ wstr })); } // Method Description: @@ -1533,7 +1533,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (_inUnitTests) [[unlikely]] { - _ScrollPositionChangedHandlers(*this, update); + ScrollPositionChanged.raise(*this, update); } else { @@ -1558,13 +1558,13 @@ namespace winrt::Microsoft::Terminal::Control::implementation void ControlCore::_terminalTaskbarProgressChanged() { - _TaskbarProgressChangedHandlers(*this, nullptr); + TaskbarProgressChanged.raise(*this, nullptr); } void ControlCore::_terminalShowWindowChanged(bool showOrHide) { auto showWindow = winrt::make_self(showOrHide); - _ShowWindowChangedHandlers(*this, *showWindow); + ShowWindowChanged.raise(*this, *showWindow); } // Method Description: @@ -1649,7 +1649,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // DO NOT call _updateSelectionUI() here. // We don't want to show the markers so manually tell it to clear it. _terminal->SetBlockSelection(false); - _UpdateSelectionMarkersHandlers(*this, winrt::make(true)); + UpdateSelectionMarkers.raise(*this, winrt::make(true)); foundResults->TotalMatches(gsl::narrow(_searcher.Results().size())); foundResults->CurrentMatch(gsl::narrow(_searcher.CurrentMatch())); @@ -1660,7 +1660,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // Raise a FoundMatch event, which the control will use to notify // narrator if there was any results in the buffer - _FoundMatchHandlers(*this, *foundResults); + FoundMatch.raise(*this, *foundResults); } Windows::Foundation::Collections::IVector ControlCore::SearchResultRows() @@ -1712,7 +1712,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation void ControlCore::_rendererWarning(const HRESULT hr) { - _RendererWarningHandlers(*this, winrt::make(hr)); + RendererWarning.raise(*this, winrt::make(hr)); } winrt::fire_and_forget ControlCore::_renderEngineSwapChainChanged(const HANDLE sourceHandle) @@ -1741,18 +1741,18 @@ namespace winrt::Microsoft::Terminal::Control::implementation _lastSwapChainHandle = std::move(duplicatedHandle); // Now bubble the event up to the control. - _SwapChainChangedHandlers(*this, winrt::box_value(reinterpret_cast(_lastSwapChainHandle.get()))); + SwapChainChanged.raise(*this, winrt::box_value(reinterpret_cast(_lastSwapChainHandle.get()))); } } void ControlCore::_rendererBackgroundColorChanged() { - _BackgroundColorChangedHandlers(*this, nullptr); + BackgroundColorChanged.raise(*this, nullptr); } void ControlCore::_rendererTabColorChanged() { - _TabColorChangedHandlers(*this, nullptr); + TabColorChanged.raise(*this, nullptr); } void ControlCore::BlinkAttributeTick() @@ -1957,7 +1957,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _renderer->TriggerSelection(); // only show the markers if we're doing a keyboard selection or in mark mode const bool showMarkers{ _terminal->SelectionMode() >= ::Microsoft::Terminal::Core::Terminal::SelectionInteractionMode::Keyboard }; - _UpdateSelectionMarkersHandlers(*this, winrt::make(!showMarkers)); + UpdateSelectionMarkers.raise(*this, winrt::make(!showMarkers)); } void ControlCore::AttachUiaEngine(::Microsoft::Console::Render::IRenderEngine* const pEngine) @@ -1990,7 +1990,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation void ControlCore::_raiseReadOnlyWarning() { auto noticeArgs = winrt::make(NoticeLevel::Info, RS_(L"TermControlReadOnly")); - _RaiseNoticeHandlers(*this, std::move(noticeArgs)); + RaiseNotice.raise(*this, std::move(noticeArgs)); } void ControlCore::_connectionOutputHandler(const hstring& hstr) { @@ -2485,7 +2485,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation co_await winrt::resume_background(); - _CompletionsChangedHandlers(*this, *args); + CompletionsChanged.raise(*this, *args); } void ControlCore::_selectSpan(til::point_span s) { diff --git a/src/cascadia/TerminalControl/ControlCore.h b/src/cascadia/TerminalControl/ControlCore.h index 681858a398c..d79df07d1bc 100644 --- a/src/cascadia/TerminalControl/ControlCore.h +++ b/src/cascadia/TerminalControl/ControlCore.h @@ -252,34 +252,34 @@ namespace winrt::Microsoft::Terminal::Control::implementation // -------------------------------- WinRT Events --------------------------------- // clang-format off - TYPED_EVENT(FontSizeChanged, IInspectable, Control::FontSizeChangedArgs); - - TYPED_EVENT(CopyToClipboard, IInspectable, Control::CopyToClipboardEventArgs); - TYPED_EVENT(TitleChanged, IInspectable, Control::TitleChangedEventArgs); - TYPED_EVENT(WarningBell, IInspectable, IInspectable); - TYPED_EVENT(TabColorChanged, IInspectable, IInspectable); - TYPED_EVENT(BackgroundColorChanged, IInspectable, IInspectable); - TYPED_EVENT(ScrollPositionChanged, IInspectable, Control::ScrollPositionChangedArgs); - TYPED_EVENT(CursorPositionChanged, IInspectable, IInspectable); - TYPED_EVENT(TaskbarProgressChanged, IInspectable, IInspectable); - TYPED_EVENT(ConnectionStateChanged, IInspectable, IInspectable); - TYPED_EVENT(HoveredHyperlinkChanged, IInspectable, IInspectable); - TYPED_EVENT(RendererEnteredErrorState, IInspectable, IInspectable); - TYPED_EVENT(SwapChainChanged, IInspectable, IInspectable); - TYPED_EVENT(RendererWarning, IInspectable, Control::RendererWarningArgs); - TYPED_EVENT(RaiseNotice, IInspectable, Control::NoticeEventArgs); - TYPED_EVENT(TransparencyChanged, IInspectable, Control::TransparencyChangedEventArgs); - TYPED_EVENT(ReceivedOutput, IInspectable, IInspectable); - TYPED_EVENT(FoundMatch, IInspectable, Control::FoundResultsArgs); - TYPED_EVENT(ShowWindowChanged, IInspectable, Control::ShowWindowArgs); - TYPED_EVENT(UpdateSelectionMarkers, IInspectable, Control::UpdateSelectionMarkersEventArgs); - TYPED_EVENT(OpenHyperlink, IInspectable, Control::OpenHyperlinkEventArgs); - TYPED_EVENT(CompletionsChanged, IInspectable, Control::CompletionsChangedEventArgs); - - TYPED_EVENT(CloseTerminalRequested, IInspectable, IInspectable); - TYPED_EVENT(RestartTerminalRequested, IInspectable, IInspectable); - - TYPED_EVENT(Attached, IInspectable, IInspectable); + til::typed_event FontSizeChanged; + + til::typed_event CopyToClipboard; + til::typed_event TitleChanged; + til::typed_event<> WarningBell; + til::typed_event<> TabColorChanged; + til::typed_event<> BackgroundColorChanged; + til::typed_event ScrollPositionChanged; + til::typed_event<> CursorPositionChanged; + til::typed_event<> TaskbarProgressChanged; + til::typed_event<> ConnectionStateChanged; + til::typed_event<> HoveredHyperlinkChanged; + til::typed_event RendererEnteredErrorState; + til::typed_event<> SwapChainChanged; + til::typed_event RendererWarning; + til::typed_event RaiseNotice; + til::typed_event TransparencyChanged; + til::typed_event<> ReceivedOutput; + til::typed_event FoundMatch; + til::typed_event ShowWindowChanged; + til::typed_event UpdateSelectionMarkers; + til::typed_event OpenHyperlink; + til::typed_event CompletionsChanged; + + til::typed_event<> CloseTerminalRequested; + til::typed_event<> RestartTerminalRequested; + + til::typed_event<> Attached; // clang-format on private: diff --git a/src/cascadia/TerminalControl/ControlInteractivity.cpp b/src/cascadia/TerminalControl/ControlInteractivity.cpp index 61dda959af8..cb55cca2315 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.cpp +++ b/src/cascadia/TerminalControl/ControlInteractivity.cpp @@ -52,7 +52,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _core->Attached([weakThis = get_weak()](auto&&, auto&&) { if (auto self{ weakThis.get() }) { - self->_AttachedHandlers(*self, nullptr); + self->Attached.raise(*self, nullptr); } }); } @@ -117,7 +117,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation void ControlInteractivity::Close() { - _ClosedHandlers(*this, nullptr); + Closed.raise(*this, nullptr); if (_core) { _core->Close(); @@ -230,7 +230,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _core->BracketedPasteEnabled()); // send paste event up to TermApp - _PasteFromClipboardHandlers(*this, std::move(args)); + PasteFromClipboard.raise(*this, std::move(args)); } void ControlInteractivity::PointerPressed(Control::MouseButtonState buttonState, @@ -307,7 +307,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _core->AnchorContextMenu(terminalPosition); auto contextArgs = winrt::make(til::point{ pixelPosition }.to_winrt_point()); - _ContextMenuRequestedHandlers(*this, contextArgs); + ContextMenuRequested.raise(*this, contextArgs); } else { @@ -616,16 +616,16 @@ namespace winrt::Microsoft::Terminal::Control::implementation _core->UserScrollViewport(viewTop); // _core->ScrollOffset() is now set to newValue - _ScrollPositionChangedHandlers(*this, - winrt::make(_core->ScrollOffset(), - _core->ViewHeight(), - _core->BufferHeight())); + ScrollPositionChanged.raise(*this, + winrt::make(_core->ScrollOffset(), + _core->ViewHeight(), + _core->BufferHeight())); } } void ControlInteractivity::_hyperlinkHandler(const std::wstring_view uri) { - _OpenHyperlinkHandlers(*this, winrt::make(winrt::hstring{ uri })); + OpenHyperlink.raise(*this, winrt::make(winrt::hstring{ uri })); } bool ControlInteractivity::_canSendVTMouseInput(const ::Microsoft::Terminal::Core::ControlKeyStates modifiers) diff --git a/src/cascadia/TerminalControl/ControlInteractivity.h b/src/cascadia/TerminalControl/ControlInteractivity.h index cafd8972c63..81eeaca9067 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.h +++ b/src/cascadia/TerminalControl/ControlInteractivity.h @@ -91,13 +91,13 @@ namespace winrt::Microsoft::Terminal::Control::implementation uint64_t Id(); void AttachToNewControl(const Microsoft::Terminal::Control::IKeyBindings& keyBindings); - TYPED_EVENT(OpenHyperlink, IInspectable, Control::OpenHyperlinkEventArgs); - TYPED_EVENT(PasteFromClipboard, IInspectable, Control::PasteFromClipboardEventArgs); - TYPED_EVENT(ScrollPositionChanged, IInspectable, Control::ScrollPositionChangedArgs); - TYPED_EVENT(ContextMenuRequested, IInspectable, Control::ContextMenuRequestedEventArgs); + til::typed_event OpenHyperlink; + til::typed_event PasteFromClipboard; + til::typed_event ScrollPositionChanged; + til::typed_event ContextMenuRequested; - TYPED_EVENT(Attached, IInspectable, IInspectable); - TYPED_EVENT(Closed, IInspectable, IInspectable); + til::typed_event Attached; + til::typed_event Closed; private: // NOTE: _uiaEngine must be ordered before _core. diff --git a/src/cascadia/TerminalControl/InteractivityAutomationPeer.cpp b/src/cascadia/TerminalControl/InteractivityAutomationPeer.cpp index afede0cf276..03f50060468 100644 --- a/src/cascadia/TerminalControl/InteractivityAutomationPeer.cpp +++ b/src/cascadia/TerminalControl/InteractivityAutomationPeer.cpp @@ -60,7 +60,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // - void InteractivityAutomationPeer::SignalSelectionChanged() { - _SelectionChangedHandlers(*this, nullptr); + SelectionChanged.raise(*this, nullptr); } // Method Description: @@ -75,7 +75,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // - void InteractivityAutomationPeer::SignalTextChanged() { - _TextChangedHandlers(*this, nullptr); + TextChanged.raise(*this, nullptr); } // Method Description: @@ -90,12 +90,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation // - void InteractivityAutomationPeer::SignalCursorChanged() { - _CursorChangedHandlers(*this, nullptr); + CursorChanged.raise(*this, nullptr); } void InteractivityAutomationPeer::NotifyNewOutput(std::wstring_view newOutput) { - _NewOutputHandlers(*this, hstring{ newOutput }); + NewOutput.raise(*this, hstring{ newOutput }); } #pragma region ITextProvider diff --git a/src/cascadia/TerminalControl/InteractivityAutomationPeer.h b/src/cascadia/TerminalControl/InteractivityAutomationPeer.h index 863521a7fef..fb3bdfe626d 100644 --- a/src/cascadia/TerminalControl/InteractivityAutomationPeer.h +++ b/src/cascadia/TerminalControl/InteractivityAutomationPeer.h @@ -71,10 +71,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation virtual HRESULT GetHostUiaProvider(IRawElementProviderSimple** provider) override; #pragma endregion - TYPED_EVENT(SelectionChanged, IInspectable, IInspectable); - TYPED_EVENT(TextChanged, IInspectable, IInspectable); - TYPED_EVENT(CursorChanged, IInspectable, IInspectable); - TYPED_EVENT(NewOutput, IInspectable, hstring); + til::typed_event SelectionChanged; + til::typed_event TextChanged; + til::typed_event CursorChanged; + til::typed_event NewOutput; private: Windows::UI::Xaml::Automation::Provider::ITextRangeProvider _CreateXamlUiaTextRange(::ITextRangeProvider* returnVal) const; diff --git a/src/cascadia/TerminalControl/SearchBoxControl.cpp b/src/cascadia/TerminalControl/SearchBoxControl.cpp index ea0ba42453a..dbb7bb77045 100644 --- a/src/cascadia/TerminalControl/SearchBoxControl.cpp +++ b/src/cascadia/TerminalControl/SearchBoxControl.cpp @@ -35,7 +35,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // to immediately perform the search with the value appearing in the box. if (Visibility() == Visibility::Visible) { - _SearchChangedHandlers(TextBox().Text(), _GoForward(), _CaseSensitive()); + SearchChanged.raise(TextBox().Text(), _GoForward(), _CaseSensitive()); } }); @@ -58,7 +58,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (rect != _contentClipRect) { _contentClipRect = rect; - _PropertyChangedHandlers(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"ContentClipRect" }); + PropertyChanged.raise(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"ContentClipRect" }); } } @@ -72,7 +72,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (y != _openAnimationStartPoint) { _openAnimationStartPoint = y; - _PropertyChangedHandlers(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"OpenAnimationStartPoint" }); + PropertyChanged.raise(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"OpenAnimationStartPoint" }); } } @@ -252,11 +252,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation const auto state = CoreWindow::GetForCurrentThread().GetKeyState(winrt::Windows::System::VirtualKey::Shift); if (WI_IsFlagSet(state, CoreVirtualKeyStates::Down)) { - _SearchHandlers(TextBox().Text(), !_GoForward(), _CaseSensitive()); + Search.raise(TextBox().Text(), !_GoForward(), _CaseSensitive()); } else { - _SearchHandlers(TextBox().Text(), _GoForward(), _CaseSensitive()); + Search.raise(TextBox().Text(), _GoForward(), _CaseSensitive()); } e.Handled(true); } @@ -276,7 +276,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation { if (e.OriginalKey() == winrt::Windows::System::VirtualKey::Escape) { - _ClosedHandlers(*this, e); + Closed.raise(*this, e); e.Handled(true); } } @@ -347,7 +347,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation } // kick off search - _SearchHandlers(TextBox().Text(), _GoForward(), _CaseSensitive()); + Search.raise(TextBox().Text(), _GoForward(), _CaseSensitive()); } // Method Description: @@ -368,7 +368,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation } // kick off search - _SearchHandlers(TextBox().Text(), _GoForward(), _CaseSensitive()); + Search.raise(TextBox().Text(), _GoForward(), _CaseSensitive()); } // Method Description: @@ -381,7 +381,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // - void SearchBoxControl::CloseClick(const winrt::Windows::Foundation::IInspectable& /*sender*/, const RoutedEventArgs& e) { - _ClosedHandlers(*this, e); + Closed.raise(*this, e); } // Method Description: @@ -406,7 +406,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // - void SearchBoxControl::TextBoxTextChanged(winrt::Windows::Foundation::IInspectable const& /*sender*/, winrt::Windows::UI::Xaml::RoutedEventArgs const& /*e*/) { - _SearchChangedHandlers(TextBox().Text(), _GoForward(), _CaseSensitive()); + SearchChanged.raise(TextBox().Text(), _GoForward(), _CaseSensitive()); } // Method Description: @@ -418,7 +418,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // - void SearchBoxControl::CaseSensitivityButtonClicked(winrt::Windows::Foundation::IInspectable const& /*sender*/, winrt::Windows::UI::Xaml::RoutedEventArgs const& /*e*/) { - _SearchChangedHandlers(TextBox().Text(), _GoForward(), _CaseSensitive()); + SearchChanged.raise(TextBox().Text(), _GoForward(), _CaseSensitive()); } // Method Description: diff --git a/src/cascadia/TerminalControl/SearchBoxControl.h b/src/cascadia/TerminalControl/SearchBoxControl.h index d186386496c..293f5d0270b 100644 --- a/src/cascadia/TerminalControl/SearchBoxControl.h +++ b/src/cascadia/TerminalControl/SearchBoxControl.h @@ -49,10 +49,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation void TextBoxTextChanged(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::RoutedEventArgs const& e); void CaseSensitivityButtonClicked(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::RoutedEventArgs const& e); - WINRT_CALLBACK(PropertyChanged, winrt::Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_CALLBACK(Search, SearchHandler); - WINRT_CALLBACK(SearchChanged, SearchHandler); - TYPED_EVENT(Closed, Control::SearchBoxControl, Windows::UI::Xaml::RoutedEventArgs); + til::event Search; + til::event SearchChanged; + til::typed_event Closed; + til::property_changed_event PropertyChanged; private: std::unordered_set _focusableElements; diff --git a/src/cascadia/TerminalControl/SearchBoxControl.xaml b/src/cascadia/TerminalControl/SearchBoxControl.xaml index 3bea176a578..d69bef8a1c2 100644 --- a/src/cascadia/TerminalControl/SearchBoxControl.xaml +++ b/src/cascadia/TerminalControl/SearchBoxControl.xaml @@ -1,4 +1,4 @@ -(); - _CurrentCursorPositionHandlers(*this, *cursorArgs); + CurrentCursorPosition.raise(*this, *cursorArgs); const til::point cursorPos{ til::math::flooring, cursorArgs->CurrentPosition() }; const auto actualCanvasWidth{ Canvas().ActualWidth() }; @@ -159,7 +159,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation { // Get Font Info as we use this is the pixel size for characters in the display auto fontArgs = winrt::make_self(); - _CurrentFontInfoHandlers(*this, *fontArgs); + CurrentFontInfo.raise(*this, *fontArgs); const til::size fontSize{ til::math::flooring, fontArgs->FontSize() }; @@ -408,7 +408,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation return; } - _CompositionCompletedHandlers(text); + CompositionCompleted.raise(text); _activeTextStart = _inputBuffer.size(); diff --git a/src/cascadia/TerminalControl/TSFInputControl.h b/src/cascadia/TerminalControl/TSFInputControl.h index 2285e5bcce8..95a79b96aa8 100644 --- a/src/cascadia/TerminalControl/TSFInputControl.h +++ b/src/cascadia/TerminalControl/TSFInputControl.h @@ -43,9 +43,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation void Close(); // -------------------------------- WinRT Events --------------------------------- - TYPED_EVENT(CurrentCursorPosition, Control::TSFInputControl, Control::CursorPositionEventArgs); - TYPED_EVENT(CurrentFontInfo, Control::TSFInputControl, Control::FontInfoEventArgs); - WINRT_CALLBACK(CompositionCompleted, Control::CompositionCompletedEventArgs); + til::typed_event CurrentCursorPosition; + til::typed_event CurrentFontInfo; + til::event CompositionCompleted; private: void _layoutRequestedHandler(winrt::Windows::UI::Text::Core::CoreTextEditContext sender, const winrt::Windows::UI::Text::Core::CoreTextLayoutRequestedEventArgs& args); diff --git a/src/cascadia/TerminalControl/TermControl.cpp b/src/cascadia/TerminalControl/TermControl.cpp index 5ed6cf6c8ac..fe26a23e967 100644 --- a/src/cascadia/TerminalControl/TermControl.cpp +++ b/src/cascadia/TerminalControl/TermControl.cpp @@ -131,7 +131,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation [weakThis = get_weak()]() { if (auto control{ weakThis.get() }; !control->_IsClosing()) { - control->_WarningBellHandlers(*control, nullptr); + control->WarningBell.raise(*control, nullptr); } }); @@ -615,9 +615,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation void TermControl::SendInput(const winrt::hstring& wstr) { // only broadcast if there's an actual listener. Saves the overhead of some object creation. - if (_StringSentHandlers) + if (StringSent) { - _StringSentHandlers(*this, winrt::make(wstr)); + StringSent.raise(*this, winrt::make(wstr)); } RawWriteString(wstr); @@ -867,7 +867,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // // Firing it manually makes sure it does. _BackgroundBrush = RootGrid().Background(); - _PropertyChangedHandlers(*this, Data::PropertyChangedEventArgs{ L"BackgroundBrush" }); + PropertyChanged.raise(*this, Data::PropertyChangedEventArgs{ L"BackgroundBrush" }); _isBackgroundLight = _isColorLight(bg); } @@ -920,7 +920,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // transparency of the titlebar too. if (changed) { - _PropertyChangedHandlers(*this, Data::PropertyChangedEventArgs{ L"BackgroundBrush" }); + PropertyChanged.raise(*this, Data::PropertyChangedEventArgs{ L"BackgroundBrush" }); } } @@ -1020,7 +1020,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation } auto noticeArgs = winrt::make(NoticeLevel::Warning, std::move(message)); - control->_RaiseNoticeHandlers(*control, std::move(noticeArgs)); + control->RaiseNotice.raise(*control, std::move(noticeArgs)); } } @@ -1141,7 +1141,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // Likewise, run the event handlers outside of lock (they could // be reentrant) - _InitializedHandlers(*this, nullptr); + Initialized.raise(*this, nullptr); return true; } @@ -1166,7 +1166,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // to simply force TSF to clear its text whenever we have input focus. TSFInputControl().ClearBuffer(); - _HidePointerCursorHandlers(*this, nullptr); + HidePointerCursor.raise(*this, nullptr); const auto ch = e.Character(); const auto keyStatus = e.KeyStatus(); @@ -1180,10 +1180,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation // Broadcast the character to all listeners // only broadcast if there's an actual listener. Saves the overhead of some object creation. - if (_CharSentHandlers) + if (CharSent) { auto charSentArgs = winrt::make(ch, scanCode, modifiers); - _CharSentHandlers(*this, charSentArgs); + CharSent.raise(*this, charSentArgs); } const auto handled = RawWriteChar(ch, scanCode, modifiers); @@ -1452,10 +1452,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation { // Broadcast the key to all listeners // only broadcast if there's an actual listener. Saves the overhead of some object creation. - if (_KeySentHandlers) + if (KeySent) { auto keySentArgs = winrt::make(vkey, scanCode, modifiers, keyDown); - _KeySentHandlers(*this, keySentArgs); + KeySent.raise(*this, keySentArgs); } return RawWriteKeyEvent(vkey, scanCode, modifiers, keyDown); @@ -1518,7 +1518,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation return; } - _RestorePointerCursorHandlers(*this, nullptr); + RestorePointerCursor.raise(*this, nullptr); _CapturePointer(sender, args); @@ -1573,7 +1573,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation return; } - _RestorePointerCursorHandlers(*this, nullptr); + RestorePointerCursor.raise(*this, nullptr); const auto ptr = args.Pointer(); const auto point = args.GetCurrentPoint(*this); @@ -1583,7 +1583,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation if (!_focused && _core.Settings().FocusFollowMouse()) { - _FocusFollowMouseRequestedHandlers(*this, nullptr); + FocusFollowMouseRequested.raise(*this, nullptr); } if (type == Windows::Devices::Input::PointerDeviceType::Mouse || @@ -1699,7 +1699,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation return; } - _RestorePointerCursorHandlers(*this, nullptr); + RestorePointerCursor.raise(*this, nullptr); const auto point = args.GetCurrentPoint(*this); // GH#10329 - we don't need to handle horizontal scrolls. Only vertical ones. @@ -1993,7 +1993,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation return; } - _RestorePointerCursorHandlers(*this, nullptr); + RestorePointerCursor.raise(*this, nullptr); _focused = false; @@ -2262,7 +2262,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation autoPeerImpl->Close(); } - _RestorePointerCursorHandlers(*this, nullptr); + RestorePointerCursor.raise(*this, nullptr); _revokers = {}; @@ -2961,9 +2961,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation void TermControl::_pasteTextWithBroadcast(const winrt::hstring& text) { // only broadcast if there's an actual listener. Saves the overhead of some object creation. - if (_StringSentHandlers) + if (StringSent) { - _StringSentHandlers(*this, winrt::make(text)); + StringSent.raise(*this, winrt::make(text)); } _core.PasteText(text); } @@ -3032,7 +3032,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // (like ShellExecute pumping our messaging thread...GH#7994) co_await winrt::resume_foreground(Dispatcher()); - _OpenHyperlinkHandlers(*strongThis, args); + OpenHyperlink.raise(*strongThis, args); } // Method Description: @@ -3166,7 +3166,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation void TermControl::ToggleReadOnly() { _core.ToggleReadOnlyMode(); - _ReadOnlyChangedHandlers(*this, winrt::box_value(_core.IsInReadOnlyMode())); + ReadOnlyChanged.raise(*this, winrt::box_value(_core.IsInReadOnlyMode())); } // Method Description: @@ -3174,7 +3174,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation void TermControl::SetReadOnly(const bool readOnlyState) { _core.SetReadOnlyMode(readOnlyState); - _ReadOnlyChangedHandlers(*this, winrt::box_value(_core.IsInReadOnlyMode())); + ReadOnlyChanged.raise(*this, winrt::box_value(_core.IsInReadOnlyMode())); } // Method Description: @@ -3387,7 +3387,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation // while it's holding its write lock. If the handlers calls back to some // method on the TermControl on the same thread, and _that_ method calls // to ControlCore, we might be in danger of deadlocking. - _RaiseNoticeHandlers(*this, eventArgs); + RaiseNotice.raise(*this, eventArgs); } Control::MouseButtonState TermControl::GetPressedMouseButtons(const winrt::Windows::UI::Input::PointerPoint point) diff --git a/src/cascadia/TerminalControl/TermControl.h b/src/cascadia/TerminalControl/TermControl.h index f2cc715b6eb..2a8b28567ec 100644 --- a/src/cascadia/TerminalControl/TermControl.h +++ b/src/cascadia/TerminalControl/TermControl.h @@ -165,7 +165,19 @@ namespace winrt::Microsoft::Terminal::Control::implementation // -------------------------------- WinRT Events --------------------------------- // clang-format off - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; + + til::typed_event OpenHyperlink; + til::typed_event RaiseNotice; + til::typed_event<> HidePointerCursor; + til::typed_event<> RestorePointerCursor; + til::typed_event<> ReadOnlyChanged; + til::typed_event FocusFollowMouseRequested; + til::typed_event Initialized; + til::typed_event<> WarningBell; + til::typed_event KeySent; + til::typed_event CharSent; + til::typed_event StringSent; // UNDER NO CIRCUMSTANCES SHOULD YOU ADD A (PROJECTED_)FORWARDED_TYPED_EVENT HERE // Those attach the handler to the core directly, and will explode if @@ -182,20 +194,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation BUBBLED_FORWARDED_TYPED_EVENT(PasteFromClipboard, IInspectable, Control::PasteFromClipboardEventArgs); - TYPED_EVENT(OpenHyperlink, IInspectable, Control::OpenHyperlinkEventArgs); - TYPED_EVENT(RaiseNotice, IInspectable, Control::NoticeEventArgs); - TYPED_EVENT(HidePointerCursor, IInspectable, IInspectable); - TYPED_EVENT(RestorePointerCursor, IInspectable, IInspectable); - TYPED_EVENT(ReadOnlyChanged, IInspectable, IInspectable); - TYPED_EVENT(FocusFollowMouseRequested, IInspectable, IInspectable); - TYPED_EVENT(Initialized, Control::TermControl, Windows::UI::Xaml::RoutedEventArgs); - TYPED_EVENT(WarningBell, IInspectable, IInspectable); - TYPED_EVENT(KeySent, IInspectable, Control::KeySentEventArgs); - TYPED_EVENT(CharSent, IInspectable, Control::CharSentEventArgs); - TYPED_EVENT(StringSent, IInspectable, Control::StringSentEventArgs); // clang-format on - WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::Media::Brush, BackgroundBrush, _PropertyChangedHandlers, nullptr); + WINRT_OBSERVABLE_PROPERTY(winrt::Windows::UI::Xaml::Media::Brush, BackgroundBrush, PropertyChanged.raise, nullptr); private: friend struct TermControlT; // friend our parent so it can bind private event handlers diff --git a/src/cascadia/TerminalSettingsEditor/Actions.h b/src/cascadia/TerminalSettingsEditor/Actions.h index 9ffe7bf9a05..a79003afbfb 100644 --- a/src/cascadia/TerminalSettingsEditor/Actions.h +++ b/src/cascadia/TerminalSettingsEditor/Actions.h @@ -20,8 +20,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void AddNew_Click(const IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& eventArgs); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(Editor::ActionsViewModel, ViewModel, _PropertyChangedHandlers, nullptr); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Editor::ActionsViewModel, ViewModel, PropertyChanged.raise, nullptr); }; } diff --git a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp index c3f12541369..1d59f7a6c7c 100644 --- a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp @@ -90,14 +90,14 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation newKeys, // NewKeys _IsNewlyAdded ? hstring{} : _CurrentAction, // OldAction unbox_value(_ProposedAction)) }; // NewAction - _ModifyKeyBindingRequestedHandlers(*this, *args); + ModifyKeyBindingRequested.raise(*this, *args); } void KeyBindingViewModel::CancelChanges() { if (_IsNewlyAdded) { - _DeleteNewlyAddedKeyBindingHandlers(*this, nullptr); + DeleteNewlyAddedKeyBinding.raise(*this, nullptr); } else { @@ -158,13 +158,13 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // We also have to do this manually because it hasn't been added to the list yet. kbdVM->IsInEditMode(true); // Emit an event to let the page know to update the background of this key binding VM - _UpdateBackgroundHandlers(*this, *kbdVM); + UpdateBackground.raise(*this, *kbdVM); // IMPORTANT: do this _after_ setting IsInEditMode. Otherwise, it'll get deleted immediately // by the PropertyChangedHandler below (where we delete any IsNewlyAdded items) kbdVM->IsNewlyAdded(true); _KeyBindingList.InsertAt(0, *kbdVM); - _FocusContainerHandlers(*this, *kbdVM); + FocusContainer.raise(*this, *kbdVM); } void ActionsViewModel::_KeyBindingViewModelPropertyChangedHandler(const IInspectable& sender, const Windows::UI::Xaml::Data::PropertyChangedEventArgs& args) @@ -187,7 +187,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // This is the view model entry that went into edit mode. // Emit an event to let the page know to move focus to // this VM's container. - _FocusContainerHandlers(*this, senderVM); + FocusContainer.raise(*this, senderVM); } else if (kbdVM.IsNewlyAdded()) { @@ -205,11 +205,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { // Emit an event to let the page know to move focus to // this VM's container. - _FocusContainerHandlers(*this, senderVM); + FocusContainer.raise(*this, senderVM); } // Emit an event to let the page know to update the background of this key binding VM - _UpdateBackgroundHandlers(*this, senderVM); + UpdateBackground.raise(*this, senderVM); } } @@ -231,7 +231,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation const auto newFocusedIndex{ std::clamp(index, 0u, _KeyBindingList.Size() - 1) }; // Emit an event to let the page know to move focus to // this VM's container. - _FocusContainerHandlers(*this, winrt::box_value(newFocusedIndex)); + FocusContainer.raise(*this, winrt::box_value(newFocusedIndex)); } } } diff --git a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h index 673e0d34f24..e78cd946fd8 100644 --- a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h @@ -61,7 +61,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void AttemptAcceptChanges(); void AttemptAcceptChanges(const Control::KeyChord newKeys); void CancelChanges(); - void DeleteKeyBinding() { _DeleteKeyBindingRequestedHandlers(*this, _CurrentKeys); } + void DeleteKeyBinding() { DeleteKeyBindingRequested.raise(*this, _CurrentKeys); } // ProposedAction: the entry selected by the combo box; may disagree with the settings model. // CurrentAction: the combo box item that maps to the settings model value. @@ -89,9 +89,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation VIEW_MODEL_OBSERVABLE_PROPERTY(bool, IsContainerFocused, false); VIEW_MODEL_OBSERVABLE_PROPERTY(bool, IsEditButtonFocused, false); VIEW_MODEL_OBSERVABLE_PROPERTY(Windows::UI::Xaml::Media::Brush, ContainerBackground, nullptr); - TYPED_EVENT(ModifyKeyBindingRequested, Editor::KeyBindingViewModel, Editor::ModifyKeyBindingEventArgs); - TYPED_EVENT(DeleteKeyBindingRequested, Editor::KeyBindingViewModel, Terminal::Control::KeyChord); - TYPED_EVENT(DeleteNewlyAddedKeyBinding, Editor::KeyBindingViewModel, IInspectable); + + public: + til::typed_event ModifyKeyBindingRequested; + til::typed_event DeleteKeyBindingRequested; + til::typed_event DeleteNewlyAddedKeyBinding; private: hstring _KeyChordText{}; @@ -105,9 +107,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void OnAutomationPeerAttached(); void AddNewKeybinding(); + til::typed_event FocusContainer; + til::typed_event UpdateBackground; + WINRT_PROPERTY(Windows::Foundation::Collections::IObservableVector, KeyBindingList); - TYPED_EVENT(FocusContainer, IInspectable, IInspectable); - TYPED_EVENT(UpdateBackground, IInspectable, IInspectable); private: bool _AutomationPeerAttached{ false }; diff --git a/src/cascadia/TerminalSettingsEditor/AddProfile.h b/src/cascadia/TerminalSettingsEditor/AddProfile.h index e4837c50851..7bfa0654f20 100644 --- a/src/cascadia/TerminalSettingsEditor/AddProfile.h +++ b/src/cascadia/TerminalSettingsEditor/AddProfile.h @@ -31,16 +31,17 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void RequestAddNew() { - _AddNewHandlers(winrt::guid{}); + AddNew.raise(winrt::guid{}); } void RequestDuplicate(GUID profile) { - _AddNewHandlers(profile); + AddNew.raise(profile); } - WINRT_PROPERTY(Model::CascadiaSettings, Settings, nullptr) - WINRT_CALLBACK(AddNew, AddNewArgs); + til::event AddNew; + + WINRT_PROPERTY(Model::CascadiaSettings, Settings, nullptr); }; struct AddProfile : public HasScrollViewer, AddProfileT @@ -54,9 +55,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void DuplicateClick(const IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& eventArgs); void ProfilesSelectionChanged(const IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& eventArgs); + til::property_changed_event PropertyChanged; WINRT_PROPERTY(Editor::AddProfilePageNavigationState, State, nullptr); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(bool, IsProfileSelected, _PropertyChangedHandlers, nullptr); + WINRT_OBSERVABLE_PROPERTY(bool, IsProfileSelected, PropertyChanged.raise, nullptr); }; } diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.cpp b/src/cascadia/TerminalSettingsEditor/Appearances.cpp index d8dc5040de0..85099de045d 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.cpp +++ b/src/cascadia/TerminalSettingsEditor/Appearances.cpp @@ -220,7 +220,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _baseMap.Remove(_AxisKey); _AxisValue = axisValue; _baseMap.Insert(_AxisKey, _AxisValue); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"AxisValue" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"AxisValue" }); } } @@ -231,7 +231,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _baseMap.Remove(_AxisKey); _AxisKey = axisKey; _baseMap.Insert(_AxisKey, _AxisValue); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"AxisKey" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"AxisKey" }); } } @@ -301,7 +301,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _baseMap.Remove(_FeatureKey); _FeatureValue = featureValue; _baseMap.Insert(_FeatureKey, _FeatureValue); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"FeatureValue" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"FeatureValue" }); } } @@ -312,7 +312,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _baseMap.Remove(_FeatureKey); _FeatureKey = featureKey; _baseMap.Insert(_FeatureKey, _FeatureValue); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"FeatureKey" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"FeatureKey" }); } } @@ -878,7 +878,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation if (_ShowAllFonts != value) { _ShowAllFonts = value; - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"ShowAllFonts" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"ShowAllFonts" }); } } @@ -974,16 +974,16 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation const auto settingName{ args.PropertyName() }; if (settingName == L"CursorShape") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentCursorShape" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"IsVintageCursor" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentCursorShape" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"IsVintageCursor" }); } else if (settingName == L"DarkColorSchemeName" || settingName == L"LightColorSchemeName") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentColorScheme" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentColorScheme" }); } else if (settingName == L"BackgroundImageStretchMode") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentBackgroundImageStretchMode" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentBackgroundImageStretchMode" }); } else if (settingName == L"BackgroundImageAlignment") { @@ -991,8 +991,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } else if (settingName == L"FontWeight") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentFontWeight" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"IsCustomFontWeight" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentFontWeight" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"IsCustomFontWeight" }); } else if (settingName == L"FontFace" || settingName == L"CurrentFontList") { @@ -1001,28 +1001,28 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { _ShowAllFonts = true; } - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentFontFace" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"ShowAllFonts" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"UsingMonospaceFont" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentFontFace" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"ShowAllFonts" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"UsingMonospaceFont" }); } else if (settingName == L"IntenseTextStyle") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentIntenseTextStyle" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentIntenseTextStyle" }); } else if (settingName == L"AdjustIndistinguishableColors") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentAdjustIndistinguishableColors" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentAdjustIndistinguishableColors" }); } else if (settingName == L"ShowProportionalFontWarning") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"ShowProportionalFontWarning" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"ShowProportionalFontWarning" }); } // YOU THERE ADDING A NEW APPEARANCE SETTING // Make sure you add a block like // // else if (settingName == L"MyNewSetting") // { - // _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentMyNewSetting" }); + // PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentMyNewSetting" }); // } // // To make sure that changes to the AppearanceViewModel will @@ -1036,19 +1036,19 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // make sure to send all the property changed events once here // we do this in the case an old appearance was deleted and then a new one is created, // the old settings need to be updated in xaml - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentCursorShape" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"IsVintageCursor" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentColorScheme" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentBackgroundImageStretchMode" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentCursorShape" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"IsVintageCursor" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentColorScheme" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentBackgroundImageStretchMode" }); _UpdateBIAlignmentControl(static_cast(Appearance().BackgroundImageAlignment())); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentFontWeight" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"IsCustomFontWeight" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentFontFace" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"ShowAllFonts" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"UsingMonospaceFont" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentIntenseTextStyle" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentAdjustIndistinguishableColors" }); - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"ShowProportionalFontWarning" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentFontWeight" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"IsCustomFontWeight" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentFontFace" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"ShowAllFonts" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"UsingMonospaceFont" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentIntenseTextStyle" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"CurrentAdjustIndistinguishableColors" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"ShowProportionalFontWarning" }); } } @@ -1150,7 +1150,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // So the TwoWay binding doesn't update on the State --> Slider direction FontWeightSlider().Value(weight); } - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"IsCustomFontWeight" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"IsCustomFontWeight" }); } } diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.h b/src/cascadia/TerminalSettingsEditor/Appearances.h index 2080a4740db..72270cd78d7 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.h +++ b/src/cascadia/TerminalSettingsEditor/Appearances.h @@ -70,7 +70,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation int32_t AxisIndex(); void AxisIndex(int32_t axisIndex); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; private: winrt::hstring _AxisKey; @@ -93,7 +93,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation int32_t FeatureIndex(); void FeatureIndex(int32_t featureIndex); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; private: winrt::hstring _FeatureKey; @@ -205,19 +205,21 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Windows::Foundation::IInspectable CurrentFontWeight() const; void CurrentFontWeight(const Windows::Foundation::IInspectable& enumEntry); bool IsCustomFontWeight(); + + til::property_changed_event PropertyChanged; + WINRT_PROPERTY(Windows::Foundation::Collections::IObservableVector, FontWeightList); GETSET_BINDABLE_ENUM_SETTING(CursorShape, Microsoft::Terminal::Core::CursorStyle, Appearance().CursorShape); GETSET_BINDABLE_ENUM_SETTING(AdjustIndistinguishableColors, Microsoft::Terminal::Core::AdjustTextMode, Appearance().AdjustIndistinguishableColors); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); DEPENDENCY_PROPERTY(Editor::AppearanceViewModel, Appearance); WINRT_PROPERTY(Editor::ProfileViewModel, SourceProfile, nullptr); WINRT_PROPERTY(IHostedInWindow, WindowRoot, nullptr); GETSET_BINDABLE_ENUM_SETTING(BackgroundImageStretchMode, Windows::UI::Xaml::Media::Stretch, Appearance().BackgroundImageStretchMode); GETSET_BINDABLE_ENUM_SETTING(IntenseTextStyle, Microsoft::Terminal::Settings::Model::IntenseStyle, Appearance().IntenseTextStyle); - WINRT_OBSERVABLE_PROPERTY(bool, ShowProportionalFontWarning, _PropertyChangedHandlers, nullptr); + WINRT_OBSERVABLE_PROPERTY(bool, ShowProportionalFontWarning, PropertyChanged.raise, nullptr); private: bool _ShowAllFonts; diff --git a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.cpp index 3c79b02165e..fc6a4bc5afe 100644 --- a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.cpp @@ -209,7 +209,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation const auto propertyName{ args.PropertyName() }; if (propertyName == L"Color" || propertyName == L"Name") { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"AccessibleName" }); + PropertyChanged.raise(*this, PropertyChangedEventArgs{ L"AccessibleName" }); } } diff --git a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h index 07a6e768fd9..12b26c160bf 100644 --- a/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ColorSchemeViewModel.h @@ -69,10 +69,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation return hstring{ fmt::format(FMT_COMPILE(L"{} RGB({}, {}, {})"), _Name, _Color.R, _Color.G, _Color.B) }; } - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(Windows::UI::Color, Color, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Name, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(IInspectable, Tag, _PropertyChangedHandlers); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Windows::UI::Color, Color, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, Name, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(IInspectable, Tag, PropertyChanged.raise); private: Windows::UI::Color _color; diff --git a/src/cascadia/TerminalSettingsEditor/ColorSchemes.h b/src/cascadia/TerminalSettingsEditor/ColorSchemes.h index 9dbe211dbe7..c8e7786e8ec 100644 --- a/src/cascadia/TerminalSettingsEditor/ColorSchemes.h +++ b/src/cascadia/TerminalSettingsEditor/ColorSchemes.h @@ -21,10 +21,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void AddNew_Click(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::RoutedEventArgs& e); void ListView_PreviewKeyDown(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::Input::KeyRoutedEventArgs& e); - WINRT_PROPERTY(Model::ColorScheme, CurrentColorScheme, nullptr); - WINRT_OBSERVABLE_PROPERTY(Editor::ColorSchemesPageViewModel, ViewModel, _PropertyChangedHandlers, nullptr); + til::property_changed_event PropertyChanged; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + WINRT_PROPERTY(Model::ColorScheme, CurrentColorScheme, nullptr); + WINRT_OBSERVABLE_PROPERTY(Editor::ColorSchemesPageViewModel, ViewModel, PropertyChanged.raise, nullptr); private: winrt::Windows::UI::Xaml::FrameworkElement::LayoutUpdated_revoker _layoutUpdatedRevoker; diff --git a/src/cascadia/TerminalSettingsEditor/EditColorScheme.h b/src/cascadia/TerminalSettingsEditor/EditColorScheme.h index ae9bc680da0..798c1c96ce5 100644 --- a/src/cascadia/TerminalSettingsEditor/EditColorScheme.h +++ b/src/cascadia/TerminalSettingsEditor/EditColorScheme.h @@ -20,9 +20,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void RenameCancel_Click(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::RoutedEventArgs& e); void NameBox_PreviewKeyDown(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::Input::KeyRoutedEventArgs& e); - WINRT_OBSERVABLE_PROPERTY(Editor::ColorSchemeViewModel, ViewModel, _PropertyChangedHandlers, nullptr); + til::property_changed_event PropertyChanged; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + WINRT_OBSERVABLE_PROPERTY(Editor::ColorSchemeViewModel, ViewModel, PropertyChanged.raise, nullptr); private: void _RenameCurrentScheme(hstring newName); diff --git a/src/cascadia/TerminalSettingsEditor/EnumEntry.h b/src/cascadia/TerminalSettingsEditor/EnumEntry.h index 7c0278c492f..fe45a583961 100644 --- a/src/cascadia/TerminalSettingsEditor/EnumEntry.h +++ b/src/cascadia/TerminalSettingsEditor/EnumEntry.h @@ -51,8 +51,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation return EnumName(); } - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(winrt::hstring, EnumName, _PropertyChangedHandlers); - WINRT_OBSERVABLE_PROPERTY(winrt::Windows::Foundation::IInspectable, EnumValue, _PropertyChangedHandlers); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(winrt::hstring, EnumName, PropertyChanged.raise); + WINRT_OBSERVABLE_PROPERTY(winrt::Windows::Foundation::IInspectable, EnumValue, PropertyChanged.raise); }; } diff --git a/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h b/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h index 6c4c5c580d8..61a330b70e9 100644 --- a/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h +++ b/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h @@ -15,8 +15,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(Editor::GlobalAppearanceViewModel, ViewModel, _PropertyChangedHandlers, nullptr); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Editor::GlobalAppearanceViewModel, ViewModel, PropertyChanged.raise, nullptr); }; } diff --git a/src/cascadia/TerminalSettingsEditor/Interaction.h b/src/cascadia/TerminalSettingsEditor/Interaction.h index fb9db12c8a5..cbb7846c38a 100644 --- a/src/cascadia/TerminalSettingsEditor/Interaction.h +++ b/src/cascadia/TerminalSettingsEditor/Interaction.h @@ -14,8 +14,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(Editor::InteractionViewModel, ViewModel, _PropertyChangedHandlers, nullptr); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Editor::InteractionViewModel, ViewModel, PropertyChanged.raise, nullptr); }; } diff --git a/src/cascadia/TerminalSettingsEditor/Launch.h b/src/cascadia/TerminalSettingsEditor/Launch.h index 0b656accc05..985be422af3 100644 --- a/src/cascadia/TerminalSettingsEditor/Launch.h +++ b/src/cascadia/TerminalSettingsEditor/Launch.h @@ -15,8 +15,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(Editor::LaunchViewModel, ViewModel, _PropertyChangedHandlers, nullptr); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Editor::LaunchViewModel, ViewModel, PropertyChanged.raise, nullptr); }; } diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.cpp b/src/cascadia/TerminalSettingsEditor/MainPage.cpp index fe50e2a5a29..ec48d7c7530 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.cpp +++ b/src/cascadia/TerminalSettingsEditor/MainPage.cpp @@ -467,7 +467,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation WI_IsFlagSet(rAltState, CoreVirtualKeyStates::Down); const auto target = altPressed ? SettingsTarget::DefaultsFile : SettingsTarget::SettingsFile; - _OpenJsonHandlers(nullptr, target); + OpenJson.raise(nullptr, target); } void MainPage::OpenJsonKeyDown(const IInspectable& /*sender*/, const Windows::UI::Xaml::Input::KeyRoutedEventArgs& args) @@ -475,7 +475,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation if (args.Key() == VirtualKey::Enter || args.Key() == VirtualKey::Space) { const auto target = args.KeyStatus().IsMenuKeyDown ? SettingsTarget::DefaultsFile : SettingsTarget::SettingsFile; - _OpenJsonHandlers(nullptr, target); + OpenJson.raise(nullptr, target); } } @@ -622,7 +622,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation }); // Add an event handler for when the user wants to delete a profile. - profile.DeleteProfile({ this, &MainPage::_DeleteProfile }); + profile.DeleteProfileRequested({ this, &MainPage::_DeleteProfile }); return profileNavItem; } diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.h b/src/cascadia/TerminalSettingsEditor/MainPage.h index 90719eb09ad..1535c85a33c 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.h +++ b/src/cascadia/TerminalSettingsEditor/MainPage.h @@ -46,7 +46,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Windows::Foundation::Collections::IObservableVector Breadcrumbs() noexcept; - TYPED_EVENT(OpenJson, Windows::Foundation::IInspectable, Model::SettingsTarget); + til::typed_event OpenJson; private: Windows::Foundation::Collections::IObservableVector _breadcrumbs; diff --git a/src/cascadia/TerminalSettingsEditor/PreviewConnection.cpp b/src/cascadia/TerminalSettingsEditor/PreviewConnection.cpp index 2c33b1b0f4a..6be3a1ddb15 100644 --- a/src/cascadia/TerminalSettingsEditor/PreviewConnection.cpp +++ b/src/cascadia/TerminalSettingsEditor/PreviewConnection.cpp @@ -32,7 +32,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void PreviewConnection::Start() noexcept { // Send the preview text - _TerminalOutputHandlers(fmt::format(PreviewText, _displayPowerlineGlyphs ? PromptTextPowerline : PromptTextPlain)); + TerminalOutput.raise(fmt::format(PreviewText, _displayPowerlineGlyphs ? PromptTextPowerline : PromptTextPlain)); } void PreviewConnection::Initialize(const Windows::Foundation::Collections::ValueSet& /*settings*/) noexcept diff --git a/src/cascadia/TerminalSettingsEditor/PreviewConnection.h b/src/cascadia/TerminalSettingsEditor/PreviewConnection.h index 979b15d6d86..9c953771349 100644 --- a/src/cascadia/TerminalSettingsEditor/PreviewConnection.h +++ b/src/cascadia/TerminalSettingsEditor/PreviewConnection.h @@ -32,8 +32,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation winrt::guid SessionId() const noexcept { return {}; } winrt::Microsoft::Terminal::TerminalConnection::ConnectionState State() const noexcept { return winrt::Microsoft::Terminal::TerminalConnection::ConnectionState::Connected; } - WINRT_CALLBACK(TerminalOutput, winrt::Microsoft::Terminal::TerminalConnection::TerminalOutputHandler); - TYPED_EVENT(StateChanged, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection, IInspectable); + til::event TerminalOutput; + til::typed_event StateChanged; private: bool _displayPowerlineGlyphs{ false }; diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp index 5682ae5cc18..ae91f9ee978 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp @@ -398,7 +398,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void ProfileViewModel::DeleteProfile() { auto deleteProfileArgs{ winrt::make_self(Guid()) }; - _DeleteProfileHandlers(*this, *deleteProfileArgs); + DeleteProfileRequested.raise(*this, *deleteProfileArgs); } void ProfileViewModel::SetupAppearances(Windows::Foundation::Collections::IObservableVector schemesList) diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h index 2c1d3bdbf0f..2c2762d26e1 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h @@ -83,6 +83,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void DeleteUnfocusedAppearance(); bool VtPassthroughAvailable() const noexcept; + til::typed_event DeleteProfileRequested; + VIEW_MODEL_OBSERVABLE_PROPERTY(ProfileSubPage, CurrentPage); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_profile, Guid); @@ -120,8 +122,6 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation GETSET_BINDABLE_ENUM_SETTING(CloseOnExitMode, Microsoft::Terminal::Settings::Model::CloseOnExitMode, CloseOnExit); GETSET_BINDABLE_ENUM_SETTING(ScrollState, Microsoft::Terminal::Control::ScrollbarState, ScrollState); - TYPED_EVENT(DeleteProfile, Editor::ProfileViewModel, Editor::DeleteProfileEventArgs); - private: Model::Profile _profile; winrt::guid _originalProfileGuid{}; diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl index f9f618c8b80..d9c7a95a816 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl @@ -40,7 +40,7 @@ namespace Microsoft.Terminal.Settings.Editor Microsoft.Terminal.Settings.Model.TerminalSettings TermSettings { get; }; - event Windows.Foundation.TypedEventHandler DeleteProfile; + event Windows.Foundation.TypedEventHandler DeleteProfileRequested; void SetupAppearances(Windows.Foundation.Collections.IObservableVector schemesList); diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h index 1acd81d647a..2a173cffc74 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h @@ -17,7 +17,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void OnNavigatedTo(const Windows::UI::Xaml::Navigation::NavigationEventArgs& e); void OnNavigatedFrom(const Windows::UI::Xaml::Navigation::NavigationEventArgs& e); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; WINRT_PROPERTY(Editor::ProfileViewModel, Profile, nullptr); private: diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h index 0eadfeb6a6e..ad4a779e0cc 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h @@ -22,7 +22,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Editor::IHostedInWindow WindowRoot() { return _windowRoot; }; - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; WINRT_PROPERTY(Editor::ProfileViewModel, Profile, nullptr); private: diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base.h b/src/cascadia/TerminalSettingsEditor/Profiles_Base.h index 4f711f5bb1e..71cbd8d78de 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base.h +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base.h @@ -24,7 +24,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Advanced_Click(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& e); void DeleteConfirmation_Click(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& e); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); + til::property_changed_event PropertyChanged; WINRT_PROPERTY(Editor::ProfileViewModel, Profile, nullptr); private: diff --git a/src/cascadia/TerminalSettingsEditor/Rendering.h b/src/cascadia/TerminalSettingsEditor/Rendering.h index 32c101aae0e..dd202b1c7e8 100644 --- a/src/cascadia/TerminalSettingsEditor/Rendering.h +++ b/src/cascadia/TerminalSettingsEditor/Rendering.h @@ -14,8 +14,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e); - WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_OBSERVABLE_PROPERTY(Editor::RenderingViewModel, ViewModel, _PropertyChangedHandlers, nullptr); + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Editor::RenderingViewModel, ViewModel, PropertyChanged.raise, nullptr); }; } diff --git a/src/cascadia/TerminalSettingsEditor/SettingContainer.cpp b/src/cascadia/TerminalSettingsEditor/SettingContainer.cpp index 9bf3912e3aa..825e79c18e0 100644 --- a/src/cascadia/TerminalSettingsEditor/SettingContainer.cpp +++ b/src/cascadia/TerminalSettingsEditor/SettingContainer.cpp @@ -100,7 +100,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // When clicked, we dispatch the bound ClearSettingValue event, // resulting in inheriting the setting value from the parent. button.Click([=](auto&&, auto&&) { - _ClearSettingValueHandlers(*this, nullptr); + ClearSettingValue.raise(*this, nullptr); // move the focus to the child control if (const auto& content{ Content() }) diff --git a/src/cascadia/TerminalSettingsEditor/SettingContainer.h b/src/cascadia/TerminalSettingsEditor/SettingContainer.h index be543681b3c..9fcb2d24efa 100644 --- a/src/cascadia/TerminalSettingsEditor/SettingContainer.h +++ b/src/cascadia/TerminalSettingsEditor/SettingContainer.h @@ -31,13 +31,14 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void SetExpanded(bool expanded); + til::typed_event ClearSettingValue; + DEPENDENCY_PROPERTY(Windows::Foundation::IInspectable, Header); DEPENDENCY_PROPERTY(hstring, HelpText); DEPENDENCY_PROPERTY(hstring, CurrentValue); DEPENDENCY_PROPERTY(bool, HasSettingValue); DEPENDENCY_PROPERTY(bool, StartExpanded); DEPENDENCY_PROPERTY(IInspectable, SettingOverrideSource); - TYPED_EVENT(ClearSettingValue, Editor::SettingContainer, Windows::Foundation::IInspectable); private: static void _InitializeProperties(); diff --git a/src/cascadia/TerminalSettingsEditor/pch.h b/src/cascadia/TerminalSettingsEditor/pch.h index 356a181643e..2e9eba2f51a 100644 --- a/src/cascadia/TerminalSettingsEditor/pch.h +++ b/src/cascadia/TerminalSettingsEditor/pch.h @@ -57,5 +57,6 @@ // Manually include til after we include Windows.Foundation to give it winrt superpowers #include "til.h" +#include #include diff --git a/src/cascadia/UnitTests_Control/MockConnection.h b/src/cascadia/UnitTests_Control/MockConnection.h index e8754c8ae96..abbed690952 100644 --- a/src/cascadia/UnitTests_Control/MockConnection.h +++ b/src/cascadia/UnitTests_Control/MockConnection.h @@ -18,7 +18,7 @@ namespace ControlUnitTests void Start() noexcept {}; void WriteInput(const winrt::hstring& data) { - _TerminalOutputHandlers(data); + TerminalOutput.raise(data); } void Resize(uint32_t /*rows*/, uint32_t /*columns*/) noexcept {} void Close() noexcept {} @@ -26,7 +26,7 @@ namespace ControlUnitTests winrt::guid SessionId() const noexcept { return {}; } winrt::Microsoft::Terminal::TerminalConnection::ConnectionState State() const noexcept { return winrt::Microsoft::Terminal::TerminalConnection::ConnectionState::Connected; } - WINRT_CALLBACK(TerminalOutput, winrt::Microsoft::Terminal::TerminalConnection::TerminalOutputHandler); - TYPED_EVENT(StateChanged, winrt::Microsoft::Terminal::TerminalConnection::ITerminalConnection, IInspectable); + til::event TerminalOutput; + til::typed_event StateChanged; }; } diff --git a/src/cascadia/UnitTests_Remoting/RemotingTests.cpp b/src/cascadia/UnitTests_Remoting/RemotingTests.cpp index 7dec3c052e6..8be39b44ca6 100644 --- a/src/cascadia/UnitTests_Remoting/RemotingTests.cpp +++ b/src/cascadia/UnitTests_Remoting/RemotingTests.cpp @@ -87,19 +87,19 @@ namespace RemotingUnitTests void Quit() DIE; void AttachContentToWindow(Remoting::AttachRequest) DIE; void SendContent(winrt::Microsoft::Terminal::Remoting::RequestReceiveContentArgs) DIE; - TYPED_EVENT(WindowActivated, winrt::Windows::Foundation::IInspectable, Remoting::WindowActivatedArgs); - TYPED_EVENT(ExecuteCommandlineRequested, winrt::Windows::Foundation::IInspectable, Remoting::CommandlineArgs); - TYPED_EVENT(IdentifyWindowsRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(DisplayWindowIdRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(RenameRequested, winrt::Windows::Foundation::IInspectable, Remoting::RenameRequestArgs); - TYPED_EVENT(SummonRequested, winrt::Windows::Foundation::IInspectable, Remoting::SummonWindowBehavior); - TYPED_EVENT(ShowNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(HideNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(QuitAllRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(QuitRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(GetWindowLayoutRequested, winrt::Windows::Foundation::IInspectable, Remoting::GetWindowLayoutArgs); - TYPED_EVENT(AttachRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::AttachRequest); - TYPED_EVENT(SendContentRequested, winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::RequestReceiveContentArgs); + til::typed_event WindowActivated; + til::typed_event ExecuteCommandlineRequested; + til::typed_event<> IdentifyWindowsRequested; + til::typed_event<> DisplayWindowIdRequested; + til::typed_event RenameRequested; + til::typed_event SummonRequested; + til::typed_event<> ShowNotificationIconRequested; + til::typed_event<> HideNotificationIconRequested; + til::typed_event<> QuitAllRequested; + til::typed_event<> QuitRequested; + til::typed_event GetWindowLayoutRequested; + til::typed_event AttachRequested; + til::typed_event SendContentRequested; }; // Same idea. @@ -121,13 +121,13 @@ namespace RemotingUnitTests void RequestMoveContent(winrt::hstring, winrt::hstring, uint32_t, winrt::Windows::Foundation::IReference) DIE; void RequestSendContent(Remoting::RequestReceiveContentArgs) DIE; - TYPED_EVENT(FindTargetWindowRequested, winrt::Windows::Foundation::IInspectable, Remoting::FindTargetWindowArgs); - TYPED_EVENT(ShowNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(HideNotificationIconRequested, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(WindowCreated, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(WindowClosed, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); - TYPED_EVENT(QuitAllRequested, winrt::Windows::Foundation::IInspectable, Remoting::QuitAllRequestedArgs); - TYPED_EVENT(RequestNewWindow, winrt::Windows::Foundation::IInspectable, Remoting::WindowRequestedArgs); + til::typed_event FindTargetWindowRequested; + til::typed_event<> ShowNotificationIconRequested; + til::typed_event<> HideNotificationIconRequested; + til::typed_event<> WindowCreated; + til::typed_event<> WindowClosed; + til::typed_event QuitAllRequested; + til::typed_event RequestNewWindow; }; class RemotingTests diff --git a/src/cascadia/UnitTests_TerminalCore/TilWinRtHelpersTests.cpp b/src/cascadia/UnitTests_TerminalCore/TilWinRtHelpersTests.cpp index 6e6eee5f355..b1ec7aded21 100644 --- a/src/cascadia/UnitTests_TerminalCore/TilWinRtHelpersTests.cpp +++ b/src/cascadia/UnitTests_TerminalCore/TilWinRtHelpersTests.cpp @@ -43,6 +43,8 @@ class TerminalCoreUnitTests::TilWinRtHelpersTests final TEST_METHOD(TestEvent); TEST_METHOD(TestTypedEvent); + + TEST_METHOD(TestPropertyChanged); }; void TilWinRtHelpersTests::TestPropertySimple() @@ -243,3 +245,22 @@ void TilWinRtHelpersTests::TestTypedEvent() VERIFY_ARE_EQUAL(true, handledOne); VERIFY_ARE_EQUAL(true, handledTwo); } + +void TilWinRtHelpersTests::TestPropertyChanged() +{ + auto handler = [&](const auto& /*sender*/, const auto& args) -> void { + VERIFY_ARE_EQUAL(L"BackgroundBrush", args.PropertyName()); + }; + + til::property_changed_event PropertyChanged; + PropertyChanged(handler); + + // We can't actually run this test in our usual unit tests. As you may + // suspect, because the PropertyChanged event is a _XAML_ event, it expects + // to be run on the UI thread. Which, we most definitely don't have here. + // + // At least, this does compile. We use this everywhere, so the scream test is LOUD. + + // winrt::Windows::Foundation::IInspectable mySender{}; + // PropertyChanged.raise(mySender, winrt::Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"BackgroundBrush" }); +} diff --git a/src/cascadia/UnitTests_TerminalCore/pch.h b/src/cascadia/UnitTests_TerminalCore/pch.h index 65ba14050a5..f92891dd1dc 100644 --- a/src/cascadia/UnitTests_TerminalCore/pch.h +++ b/src/cascadia/UnitTests_TerminalCore/pch.h @@ -58,6 +58,7 @@ Author(s): #include #include #include +#include #include diff --git a/src/cascadia/WindowsTerminal/AppHost.cpp b/src/cascadia/WindowsTerminal/AppHost.cpp index 6a0e0ed698d..816e4cda6e4 100644 --- a/src/cascadia/WindowsTerminal/AppHost.cpp +++ b/src/cascadia/WindowsTerminal/AppHost.cpp @@ -1561,5 +1561,5 @@ void AppHost::_handleSendContent(const winrt::Windows::Foundation::IInspectable& // thread. void AppHost::_requestUpdateSettings() { - _UpdateSettingsRequestedHandlers(); + UpdateSettingsRequested.raise(); } diff --git a/src/cascadia/WindowsTerminal/AppHost.h b/src/cascadia/WindowsTerminal/AppHost.h index 60b96103124..25cf599af74 100644 --- a/src/cascadia/WindowsTerminal/AppHost.h +++ b/src/cascadia/WindowsTerminal/AppHost.h @@ -33,7 +33,7 @@ class AppHost : public std::enable_shared_from_this static void s_DisplayMessageBox(const winrt::TerminalApp::ParseCommandlineResult& message); - WINRT_CALLBACK(UpdateSettingsRequested, winrt::delegate); + til::event> UpdateSettingsRequested; private: std::unique_ptr _window; diff --git a/src/cascadia/WindowsTerminal/IslandWindow.cpp b/src/cascadia/WindowsTerminal/IslandWindow.cpp index d7934ea3012..ab800163ff9 100644 --- a/src/cascadia/WindowsTerminal/IslandWindow.cpp +++ b/src/cascadia/WindowsTerminal/IslandWindow.cpp @@ -524,7 +524,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize { // wparam = 0 indicates the window was deactivated const bool activated = LOWORD(wparam) != 0; - _WindowActivatedHandlers(activated); + WindowActivated.raise(activated); if (_autoHideWindow && !activated) { @@ -552,7 +552,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize { // If we clicked in the titlebar, raise an event so the app host can // dispatch an appropriate event. - _DragRegionClickedHandlers(); + DragRegionClicked.raise(); break; } case WM_MENUCHAR: @@ -570,13 +570,13 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize { if (wparam == SIZE_RESTORED || wparam == SIZE_MAXIMIZED) { - _WindowVisibilityChangedHandlers(true); - _MaximizeChangedHandlers(wparam == SIZE_MAXIMIZED); + WindowVisibilityChanged.raise(true); + MaximizeChanged.raise(wparam == SIZE_MAXIMIZED); } if (wparam == SIZE_MINIMIZED) { - _WindowVisibilityChangedHandlers(false); + WindowVisibilityChanged.raise(false); if (_isQuakeWindow) { ShowWindow(GetHandle(), SW_HIDE); @@ -609,7 +609,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize } case WM_MOVE: { - _WindowMovedHandlers(); + WindowMoved.raise(); break; } case WM_CLOSE: @@ -617,7 +617,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize // If the user wants to close the app by clicking 'X' button, // we hand off the close experience to the app layer. If all the tabs // are closed, the window will be closed as well. - _WindowCloseButtonClickedHandlers(); + WindowCloseButtonClicked.raise(); return 0; } case WM_MOUSEWHEEL: @@ -651,7 +651,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize const auto wheelDelta = static_cast(HIWORD(wparam)); // Raise an event, so any listeners can handle the mouse wheel event manually. - _MouseScrolledHandlers(real, wheelDelta); + MouseScrolled.raise(real, wheelDelta); return 0; } CATCH_LOG(); @@ -721,12 +721,12 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize auto highBits = wparam & 0xFFF0; if (highBits == SC_RESTORE || highBits == SC_MAXIMIZE) { - _MaximizeChangedHandlers(highBits == SC_MAXIMIZE); + MaximizeChanged.raise(highBits == SC_MAXIMIZE); } if (wparam == SC_RESTORE && _fullscreen) { - _ShouldExitFullscreenHandlers(); + ShouldExitFullscreen.raise(); return 0; } auto search = _systemMenuItems.find(LOWORD(wparam)); @@ -757,7 +757,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize if (isCurrentlyDark != _currentSystemThemeIsDark) { _currentSystemThemeIsDark = isCurrentlyDark; - _UpdateSettingsRequestedHandlers(); + UpdateSettingsRequested.raise(); } } } @@ -797,7 +797,7 @@ long IslandWindow::_calculateTotalSize(const bool isWidth, const long clientSize TraceLoggingLevel(WINEVENT_LEVEL_VERBOSE), TraceLoggingKeyword(TIL_KEYWORD_TRACE)); - _AutomaticShutdownRequestedHandlers(); + AutomaticShutdownRequested.raise(); return true; } } diff --git a/src/cascadia/WindowsTerminal/IslandWindow.h b/src/cascadia/WindowsTerminal/IslandWindow.h index b0aaf0b0ae3..ba9183847a7 100644 --- a/src/cascadia/WindowsTerminal/IslandWindow.h +++ b/src/cascadia/WindowsTerminal/IslandWindow.h @@ -72,22 +72,22 @@ class IslandWindow : void UseDarkTheme(const bool v); virtual void UseMica(const bool newValue, const double titlebarOpacity); - WINRT_CALLBACK(DragRegionClicked, winrt::delegate<>); - WINRT_CALLBACK(WindowCloseButtonClicked, winrt::delegate<>); - WINRT_CALLBACK(MouseScrolled, winrt::delegate); - WINRT_CALLBACK(WindowActivated, winrt::delegate); - WINRT_CALLBACK(NotifyNotificationIconPressed, winrt::delegate); - WINRT_CALLBACK(NotifyWindowHidden, winrt::delegate); - WINRT_CALLBACK(NotifyShowNotificationIconContextMenu, winrt::delegate); - WINRT_CALLBACK(NotifyNotificationIconMenuItemSelected, winrt::delegate); - WINRT_CALLBACK(NotifyReAddNotificationIcon, winrt::delegate); - WINRT_CALLBACK(ShouldExitFullscreen, winrt::delegate); - WINRT_CALLBACK(MaximizeChanged, winrt::delegate); - WINRT_CALLBACK(AutomaticShutdownRequested, winrt::delegate); - - WINRT_CALLBACK(WindowMoved, winrt::delegate); - WINRT_CALLBACK(WindowVisibilityChanged, winrt::delegate); - WINRT_CALLBACK(UpdateSettingsRequested, winrt::delegate); + til::event> DragRegionClicked; + til::event> WindowCloseButtonClicked; + til::event> MouseScrolled; + til::event> WindowActivated; + til::event> NotifyNotificationIconPressed; + til::event> NotifyWindowHidden; + til::event> NotifyShowNotificationIconContextMenu; + til::event> NotifyNotificationIconMenuItemSelected; + til::event> NotifyReAddNotificationIcon; + til::event> ShouldExitFullscreen; + til::event> MaximizeChanged; + til::event> AutomaticShutdownRequested; + + til::event> WindowMoved; + til::event> WindowVisibilityChanged; + til::event> UpdateSettingsRequested; protected: void ForceResize() diff --git a/src/cascadia/WindowsTerminal/NotificationIcon.cpp b/src/cascadia/WindowsTerminal/NotificationIcon.cpp index 89e865f64ad..25c945f12e2 100644 --- a/src/cascadia/WindowsTerminal/NotificationIcon.cpp +++ b/src/cascadia/WindowsTerminal/NotificationIcon.cpp @@ -216,7 +216,7 @@ void NotificationIcon::MenuItemSelected(const HMENU menu, const UINT menuItemInd args.SummonBehavior().ToggleVisibility(false); args.SummonBehavior().MoveToCurrentDesktop(false); args.SummonBehavior().ToMonitor(Remoting::MonitorBehavior::InPlace); - _SummonWindowRequestedHandlers(args); + SummonWindowRequested.raise(args); return; } } @@ -231,7 +231,7 @@ void NotificationIcon::MenuItemSelected(const HMENU menu, const UINT menuItemInd args.SummonBehavior().ToggleVisibility(false); args.SummonBehavior().MoveToCurrentDesktop(false); args.SummonBehavior().ToMonitor(Remoting::MonitorBehavior::InPlace); - _SummonWindowRequestedHandlers(args); + SummonWindowRequested.raise(args); break; } } @@ -250,7 +250,7 @@ void NotificationIcon::NotificationIconPressed() args.SummonBehavior().MoveToCurrentDesktop(false); args.SummonBehavior().ToMonitor(Remoting::MonitorBehavior::InPlace); args.SummonBehavior().ToggleVisibility(false); - _SummonWindowRequestedHandlers(args); + SummonWindowRequested.raise(args); } // Method Description: diff --git a/src/cascadia/WindowsTerminal/NotificationIcon.h b/src/cascadia/WindowsTerminal/NotificationIcon.h index 3277a1e845f..53a0e23d1e2 100644 --- a/src/cascadia/WindowsTerminal/NotificationIcon.h +++ b/src/cascadia/WindowsTerminal/NotificationIcon.h @@ -27,7 +27,7 @@ class NotificationIcon void ShowContextMenu(const til::point coord, const winrt::Windows::Foundation::Collections::IVectorView& peasants); void MenuItemSelected(const HMENU menu, const UINT menuItemIndex); - WINRT_CALLBACK(SummonWindowRequested, winrt::delegate); + til::event> SummonWindowRequested; private: void _CreateWindow(); diff --git a/src/cascadia/WindowsTerminal/WindowThread.cpp b/src/cascadia/WindowsTerminal/WindowThread.cpp index 4c0f7d8e8c3..ab2e1fed02f 100644 --- a/src/cascadia/WindowsTerminal/WindowThread.cpp +++ b/src/cascadia/WindowsTerminal/WindowThread.cpp @@ -31,7 +31,7 @@ void WindowThread::CreateHost() _manager, _peasant); - _UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this]() { _UpdateSettingsRequestedHandlers(); }); + _UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this]() { UpdateSettingsRequested.raise(); }); winrt::init_apartment(winrt::apartment_type::single_threaded); @@ -111,7 +111,7 @@ bool WindowThread::KeepWarm() // state transitions. In this case, the window is actually being woken up. if (msg.message == AppHost::WM_REFRIGERATE) { - _UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this]() { _UpdateSettingsRequestedHandlers(); }); + _UpdateSettingsRequestedToken = _host->UpdateSettingsRequested([this]() { UpdateSettingsRequested.raise(); }); // Re-initialize the host here, on the window thread _host->Initialize(); return true; diff --git a/src/cascadia/WindowsTerminal/WindowThread.h b/src/cascadia/WindowsTerminal/WindowThread.h index c536e4297aa..d2b0b566c4c 100644 --- a/src/cascadia/WindowsTerminal/WindowThread.h +++ b/src/cascadia/WindowsTerminal/WindowThread.h @@ -25,7 +25,7 @@ class WindowThread : public std::enable_shared_from_this uint64_t PeasantID(); - WINRT_CALLBACK(UpdateSettingsRequested, winrt::delegate); + til::event> UpdateSettingsRequested; private: winrt::Microsoft::Terminal::Remoting::Peasant _peasant{ nullptr }; diff --git a/src/cascadia/WindowsTerminal/pch.h b/src/cascadia/WindowsTerminal/pch.h index 5937e31398d..fae9d5fb50f 100644 --- a/src/cascadia/WindowsTerminal/pch.h +++ b/src/cascadia/WindowsTerminal/pch.h @@ -91,6 +91,7 @@ TRACELOGGING_DECLARE_PROVIDER(g_hWindowsTerminalProvider); #include "til.h" #include "til/mutex.h" +#include "til/winrt.h" #include diff --git a/src/inc/til/winrt.h b/src/inc/til/winrt.h index e5faece3185..f585109747d 100644 --- a/src/inc/til/winrt.h +++ b/src/inc/til/winrt.h @@ -63,7 +63,7 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned" event() = default; winrt::event_token operator()(const ArgsT& handler) { return _handlers.add(handler); } void operator()(const winrt::event_token& token) { _handlers.remove(token); } - operator bool() const noexcept { return _handlers; } + operator bool() const noexcept { return bool(_handlers); } template void raise(auto&&... args) { @@ -72,13 +72,13 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned" winrt::event _handlers; }; - template + template struct typed_event { typed_event() = default; winrt::event_token operator()(const winrt::Windows::Foundation::TypedEventHandler& handler) { return _handlers.add(handler); } void operator()(const winrt::event_token& token) { _handlers.remove(token); } - operator bool() const noexcept { return _handlers; } + operator bool() const noexcept { return bool(_handlers); } template void raise(Arg const&... args) { @@ -87,10 +87,9 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned" winrt::event> _handlers; }; #endif -#ifdef WINRT_Windows_UI_Xaml_DataH - - using property_changed_event = event; +#ifdef WINRT_Windows_UI_Xaml_Data_H + using property_changed_event = til::event; // Making a til::observable_property unfortunately doesn't seem feasible. // It's gonna just result in more macros, which no one wants. // diff --git a/src/tools/MonarchPeasantSample/SamplePeasant.cpp b/src/tools/MonarchPeasantSample/SamplePeasant.cpp index 470cd72c9aa..7cc65b43789 100644 --- a/src/tools/MonarchPeasantSample/SamplePeasant.cpp +++ b/src/tools/MonarchPeasantSample/SamplePeasant.cpp @@ -45,7 +45,7 @@ namespace winrt::MonarchPeasantSample::implementation void Peasant::raiseActivatedEvent() { - _WindowActivatedHandlers(*this, nullptr); + WindowActivated.raise(*this, nullptr); } } diff --git a/src/tools/MonarchPeasantSample/SamplePeasant.h b/src/tools/MonarchPeasantSample/SamplePeasant.h index 138619b3cbc..489f7e722e5 100644 --- a/src/tools/MonarchPeasantSample/SamplePeasant.h +++ b/src/tools/MonarchPeasantSample/SamplePeasant.h @@ -16,7 +16,7 @@ namespace winrt::MonarchPeasantSample::implementation void raiseActivatedEvent(); - TYPED_EVENT(WindowActivated, winrt::Windows::Foundation::IInspectable, winrt::Windows::Foundation::IInspectable); + til::typed_event<> WindowActivated; private: uint64_t _id{ 0 }; diff --git a/src/tools/MonarchPeasantSample/pch.h b/src/tools/MonarchPeasantSample/pch.h index 14e0e0b1c51..29e037ece78 100644 --- a/src/tools/MonarchPeasantSample/pch.h +++ b/src/tools/MonarchPeasantSample/pch.h @@ -22,6 +22,7 @@ // Manually include til after we include Windows.Foundation to give it winrt superpowers #include "til.h" +#include "til/winrt.h" #include From 373faf00c9ae8bafe1d9120a990ef409b037384b Mon Sep 17 00:00:00 2001 From: Leonard Hecker Date: Wed, 20 Mar 2024 20:37:03 +0100 Subject: [PATCH 2/8] Fix a ReadConsoleOutputCharacter regression (#16898) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `nLength` parameter of `ReadConsoleOutputCharacterW` indicates the number of columns that should be read. For single-column (narrow) surrogate pairs this previously clipped a trailing character of the returned string. In the major Unicode support update in #13626 surrogate pairs truly got stored as atomic units for the first time. This now meant that a 120 column read with such codepoints resulted in 121 characters. Other parts of conhost still assume UCS2 however, and so this results in the entire read failing. This fixes the issue by turning surrogate pairs into U+FFFD which makes it UCS2 compatible. Closes #16892 ## Validation Steps Performed * Write U+F15C0 and read it back with `ReadConsoleOutputCharacterW` * Read succeeds with a single U+FFFD ✅ --- .github/actions/spelling/expect/expect.txt | 42 ++-------------------- src/host/ft_host/CJK_DbcsTests.cpp | 17 +++++++++ src/host/output.cpp | 7 +++- 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/.github/actions/spelling/expect/expect.txt b/.github/actions/spelling/expect/expect.txt index e4d2d676eb4..32dd37878d7 100644 --- a/.github/actions/spelling/expect/expect.txt +++ b/.github/actions/spelling/expect/expect.txt @@ -91,7 +91,6 @@ backgrounding backported backstory barbaz -Batang Bazz BBDM bbwe @@ -180,7 +179,6 @@ changelists chaof charinfo CHARSETINFO -chcbpat chh chshdng CHT @@ -198,7 +196,6 @@ cloudconsole cloudvault CLSCTX clsids -CLUSTERMAP cmatrix cmder CMDEXT @@ -214,7 +211,6 @@ codepages codepath coinit colorizing -COLORMATRIX COLORREFs colorschemes colorspec @@ -222,7 +218,6 @@ colortable colortbl colortest colortool -COLR combaseapi comctl commandline @@ -367,11 +362,9 @@ DBGFONTS DBGOUTPUT dbh dblclk -DBlob DColor DCOLORVALUE dcommon -dcompile dcompiler DComposition dde @@ -479,7 +472,6 @@ depersist deprioritized deserializers desktopwindowxamlsource -DESTINATIONNAME devicecode Dext DFactory @@ -539,7 +531,6 @@ DWORDs dwrite dxgi dxgidwm -dxguid dxinterop dxsm dxttbmp @@ -607,7 +598,7 @@ FEEF fesb FFAF FFDE -FFrom +FFFDb fgbg FGCOLOR FGHIJ @@ -719,7 +710,6 @@ GETWAITTOKILLTIMEOUT GETWHEELSCROLLCHARACTERS GETWHEELSCROLLCHARS GETWHEELSCROLLLINES -GFEh Gfun gfx GGI @@ -867,7 +857,6 @@ INLINEPREFIX inproc Inputkeyinfo INPUTPROCESSORPROFILE -inputrc Inputreadhandledata INSERTMODE INTERACTIVITYBASE @@ -908,10 +897,6 @@ KAttrs kawa Kazu kazum -kcub -kcud -kcuf -kcuu kernelbase kernelbasestaging KEYBDINPUT @@ -923,7 +908,6 @@ Keymapping keyscan keystate keyups -khome KILLACTIVE KILLFOCUS kinda @@ -1061,7 +1045,6 @@ MBUTTON MBUTTONDBLCLK MBUTTONDOWN MBUTTONUP -Mbxy mdmerge MDs MEASUREITEM @@ -1086,7 +1069,6 @@ minkernel MINMAXINFO minwin minwindef -Mip MMBB mmcc MMCPL @@ -1123,8 +1105,8 @@ msix msrc MSVCRTD MTSM -munges Munged +munges murmurhash muxes myapplet @@ -1221,7 +1203,6 @@ ntdll ntifs ntlpcapi ntm -nto ntrtl ntstatus NTSYSCALLAPI @@ -1297,7 +1278,6 @@ parentable parms PATCOPY pathcch -Pathto PATTERNID pcat pcb @@ -1456,7 +1436,6 @@ pwsz pythonw Qaabbcc QUERYOPEN -QUESTIONMARK quickedit QUZ QWER @@ -1489,8 +1468,6 @@ READCONSOLE READCONSOLEOUTPUT READCONSOLEOUTPUTSTRING READMODE -reallocs -reamapping rectread redef redefinable @@ -1518,7 +1495,6 @@ repositorypath Requiresx rerasterize rescap -Resequence RESETCONTENT resheader resmimetype @@ -1551,7 +1527,6 @@ RRRGGGBB rsas rtcore RTEXT -RTFTo RTLREADING Rtn ruleset @@ -1699,7 +1674,6 @@ srcsrv SRCSRVTRG srctool srect -srv srvinit srvpipe ssa @@ -1731,7 +1705,6 @@ SUA subcompartment subkeys SUBLANG -subresource subsystemconsole subsystemwindows swapchain @@ -1835,7 +1808,6 @@ tosign touchpad Tpp Tpqrst -tracelog tracelogging traceviewpp trackbar @@ -1846,7 +1818,6 @@ Trd TREX triaged triaging -TRIANGLESTRIP Tribool TRIMZEROHEADINGS trx @@ -1888,8 +1859,8 @@ UINTs ul ulcch uld -uldb uldash +uldb ulwave Unadvise unattend @@ -1900,7 +1871,6 @@ unhosted UNICODETEXT UNICRT Unintense -Uniscribe unittesting unittests unk @@ -1912,7 +1882,6 @@ untextured UPDATEDISPLAY UPDOWN UPKEY -UPSS upss uregex URegular @@ -1996,7 +1965,6 @@ VTRGBTo vtseq vtterm vttest -waitable WANSUNG WANTARROWS WANTTAB @@ -2121,7 +2089,6 @@ wrkstr wrl wrp WRunoff -WScript wsl WSLENV wstr @@ -2156,13 +2123,11 @@ XBUTTONDOWN XBUTTONUP XCast XCENTER -XColors xcopy XCount xdy XEncoding xes -xff XFG XFile XFORM @@ -2171,7 +2136,6 @@ xinchaof xinxinchaof XManifest XMath -XMFLOAT xorg XResource xsi diff --git a/src/host/ft_host/CJK_DbcsTests.cpp b/src/host/ft_host/CJK_DbcsTests.cpp index 68798b700fd..9d96e470276 100644 --- a/src/host/ft_host/CJK_DbcsTests.cpp +++ b/src/host/ft_host/CJK_DbcsTests.cpp @@ -164,6 +164,8 @@ class DbcsTests BEGIN_TEST_METHOD(TestInvalidTrailer) TEST_METHOD_PROPERTY(L"IsolationLevel", L"Method") END_TEST_METHOD() + + TEST_METHOD(TestNarrowSurrogate); }; bool DbcsTests::DbcsTestSetup() @@ -2183,3 +2185,18 @@ void DbcsTests::TestInvalidTrailer() DbcsWriteRead::Verify(expected, output); } + +// The various console APIs that read back from the buffer are generally incompatible with UTF16 and surrogate pairs. +// ReadConsoleOutputCharacterW in particular has a nLength parameter which is a column count but also the buffer size. +// This makes it impossible to reliably return arbitrarily long graphemes per-cell in the output buffer. +// The test ensures that we replace them with U+FFFD which makes the behavior more consistent for the caller. +void DbcsTests::TestNarrowSurrogate() +{ + const auto out = GetStdHandle(STD_OUTPUT_HANDLE); + wchar_t buf[3]; + DWORD read; + + VERIFY_WIN32_BOOL_SUCCEEDED(WriteConsoleOutputCharacterW(out, L"a\U00010000b", 4, {}, &read)); + VERIFY_WIN32_BOOL_SUCCEEDED(ReadConsoleOutputCharacterW(out, &buf[0], ARRAYSIZE(buf), {}, &read)); + VERIFY_ARE_EQUAL(std::wstring_view(L"a\U0000FFFDb"), std::wstring_view(&buf[0], read)); +} diff --git a/src/host/output.cpp b/src/host/output.cpp index bd168fce9cd..bf1e0a91040 100644 --- a/src/host/output.cpp +++ b/src/host/output.cpp @@ -222,7 +222,12 @@ std::wstring ReadOutputStringW(const SCREEN_INFORMATION& screenInfo, // Otherwise, add anything that isn't a trailing cell. (Trailings are duplicate copies of the leading.) if (it->DbcsAttr() != DbcsAttribute::Trailing) { - retVal += it->Chars(); + auto chars = it->Chars(); + if (chars.size() > 1) + { + chars = { &UNICODE_REPLACEMENT, 1 }; + } + retVal += chars; } } From ff47e0c25742b2a332645f846e9c88d277ff2856 Mon Sep 17 00:00:00 2001 From: "Dustin L. Howett" Date: Wed, 20 Mar 2024 16:52:53 -0400 Subject: [PATCH 3/8] build: roll back to a build container with the 14.38 compiler (#16907) The 14.39 compiler seems pretty busted. Refs #16794 --- build/pipelines/templates-v2/variables-onebranch-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/pipelines/templates-v2/variables-onebranch-config.yml b/build/pipelines/templates-v2/variables-onebranch-config.yml index d7180e3e090..7639033c038 100644 --- a/build/pipelines/templates-v2/variables-onebranch-config.yml +++ b/build/pipelines/templates-v2/variables-onebranch-config.yml @@ -1,2 +1,2 @@ variables: - WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest' + WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:1.0.02566.28' From febfbebf9b2966590633b0c67776d0750b1ae8d1 Mon Sep 17 00:00:00 2001 From: "Dustin L. Howett" Date: Wed, 20 Mar 2024 17:23:11 -0400 Subject: [PATCH 4/8] Remove the "set default terminal" banner (#16873) **Default Terminal**: Everyone who cares to know, knows. Everyone who doesn't, has an annoying bar above all terminals I had to introduce a workaround for the fact that unknown dismissed message keys in `state.json` result in Terminal exploding on launch. :grin: That's tracked in #16874. Closes #11930 (but not in the way you'd expect) --- .../Resources/en-US/Resources.resw | 7 -- src/cascadia/TerminalApp/TerminalPage.cpp | 68 ------------------- src/cascadia/TerminalApp/TerminalPage.h | 3 - src/cascadia/TerminalApp/TerminalPage.xaml | 15 ---- .../ApplicationState.idl | 5 +- .../TerminalSettingsSerializationHelpers.h | 7 +- 6 files changed, 8 insertions(+), 97 deletions(-) diff --git a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw index 3ad4bdb73b8..3f91408815f 100644 --- a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw @@ -771,19 +771,12 @@ Termination behavior can be configured in advanced profile settings. - - Windows Terminal can be set as the default terminal application in your settings. - Don't show again This Terminal window is running as Admin - - Open Settings - This is a call-to-action hyperlink; it will open the settings. - Suggestions found: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 608abe0c0db..a46544ce60c 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -283,8 +283,6 @@ namespace winrt::TerminalApp::implementation _defaultPointerCursor = CoreWindow::GetForCurrentThread().PointerCursor(); } CATCH_LOG(); - - ShowSetAsDefaultInfoBar(); } Windows::UI::Xaml::Automation::Peers::AutomationPeer TerminalPage::OnCreateAutomationPeer() @@ -3862,9 +3860,6 @@ namespace winrt::TerminalApp::implementation // Request a summon of this window to the foreground SummonWindowRequested.raise(*this, nullptr); - const IInspectable unused{ nullptr }; - _SetAsDefaultDismissHandler(unused, unused); - // TEMPORARY SOLUTION // If the connection has requested for the window to be maximized, // manually maximize it here. Ideally, we should be _initializing_ @@ -4046,35 +4041,6 @@ namespace winrt::TerminalApp::implementation } } - // Method Description: - // - Displays a info popup guiding the user into setting their default terminal. - void TerminalPage::ShowSetAsDefaultInfoBar() const - { - if (::winrt::Windows::UI::Xaml::Application::Current().try_as<::winrt::TerminalApp::App>() == nullptr) - { - // Just ignore this in the tests (where the Application::Current() - // is not a TerminalApp::App) - return; - } - if (!CascadiaSettings::IsDefaultTerminalAvailable() || _IsMessageDismissed(InfoBarMessage::SetAsDefault)) - { - return; - } - - // If the user has already configured any terminal for hand-off we - // shouldn't inform them again about the possibility to do so. - if (CascadiaSettings::IsDefaultTerminalSet()) - { - _DismissMessage(InfoBarMessage::SetAsDefault); - return; - } - - if (const auto infoBar = FindName(L"SetAsDefaultInfoBar").try_as()) - { - infoBar.IsOpen(true); - } - } - // Function Description: // - Helper function to get the OS-localized name for the "Touch Keyboard // and Handwriting Panel Service". If we can't open up the service for any @@ -4536,40 +4502,6 @@ namespace winrt::TerminalApp::implementation } } - // Method Description: - // - Persists the user's choice not to show the information bar warning about "Windows Terminal can be set as your default terminal application" - // Then hides this information buffer. - // Arguments: - // - - // Return Value: - // - - void TerminalPage::_SetAsDefaultDismissHandler(const IInspectable& /*sender*/, const IInspectable& /*args*/) - { - _DismissMessage(InfoBarMessage::SetAsDefault); - if (const auto infoBar = FindName(L"SetAsDefaultInfoBar").try_as()) - { - infoBar.IsOpen(false); - } - - TraceLoggingWrite(g_hTerminalAppProvider, "SetAsDefaultTipDismissed", TraceLoggingKeyword(MICROSOFT_KEYWORD_MEASURES), TelemetryPrivacyDataTag(PDT_ProductAndServiceUsage)); - - _FocusCurrentTab(true); - } - - // Method Description: - // - Dismisses the Default Terminal tip and opens the settings. - void TerminalPage::_SetAsDefaultOpenSettingsHandler(const IInspectable& /*sender*/, const IInspectable& /*args*/) - { - if (const auto infoBar = FindName(L"SetAsDefaultInfoBar").try_as()) - { - infoBar.IsOpen(false); - } - - TraceLoggingWrite(g_hTerminalAppProvider, "SetAsDefaultTipInteracted", TraceLoggingKeyword(MICROSOFT_KEYWORD_MEASURES), TelemetryPrivacyDataTag(PDT_ProductAndServiceUsage)); - - OpenSettingsUI(); - } - // Method Description: // - Checks whether information bar message was dismissed earlier (in the application state) // Arguments: diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index 12c20a8056d..5e22760fc67 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -145,7 +145,6 @@ namespace winrt::TerminalApp::implementation winrt::TerminalApp::TaskbarState TaskbarState() const; void ShowKeyboardServiceWarning() const; - void ShowSetAsDefaultInfoBar() const; winrt::hstring KeyboardServiceDisabledText(); winrt::fire_and_forget IdentifyWindow(); @@ -507,8 +506,6 @@ namespace winrt::TerminalApp::implementation winrt::fire_and_forget _ConnectionStateChangedHandler(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::Foundation::IInspectable& args) const; void _CloseOnExitInfoDismissHandler(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::Foundation::IInspectable& args) const; void _KeyboardServiceWarningInfoDismissHandler(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::Foundation::IInspectable& args) const; - void _SetAsDefaultDismissHandler(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::Foundation::IInspectable& args); - void _SetAsDefaultOpenSettingsHandler(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::Foundation::IInspectable& args); static bool _IsMessageDismissed(const winrt::Microsoft::Terminal::Settings::Model::InfoBarMessage& message); static void _DismissMessage(const winrt::Microsoft::Terminal::Settings::Model::InfoBarMessage& message); diff --git a/src/cascadia/TerminalApp/TerminalPage.xaml b/src/cascadia/TerminalApp/TerminalPage.xaml index 600ec505c67..c8aa837bf82 100644 --- a/src/cascadia/TerminalApp/TerminalPage.xaml +++ b/src/cascadia/TerminalApp/TerminalPage.xaml @@ -53,21 +53,6 @@ Click="_CloseOnExitInfoDismissHandler" /> - - - - - - Date: Thu, 21 Mar 2024 09:27:26 -0500 Subject: [PATCH 5/8] Localization Updates - main - 03/21/2024 03:04:53 (#16910) --- .../Resources/de-DE/Resources.resw | 7 - .../Resources/es-ES/Resources.resw | 7 - .../Resources/fr-FR/Resources.resw | 7 - .../Resources/it-IT/Resources.resw | 7 - .../Resources/ja-JP/Resources.resw | 7 - .../Resources/ko-KR/Resources.resw | 7 - .../Resources/pt-BR/Resources.resw | 7 - .../Resources/qps-ploc/Resources.resw | 485 +++++++++--------- .../Resources/qps-ploca/Resources.resw | 485 +++++++++--------- .../Resources/qps-plocm/Resources.resw | 485 +++++++++--------- .../Resources/ru-RU/Resources.resw | 7 - .../Resources/zh-CN/Resources.resw | 7 - .../Resources/zh-TW/Resources.resw | 7 - 13 files changed, 717 insertions(+), 808 deletions(-) diff --git a/src/cascadia/TerminalApp/Resources/de-DE/Resources.resw b/src/cascadia/TerminalApp/Resources/de-DE/Resources.resw index a9a1418f45c..f99341de170 100644 --- a/src/cascadia/TerminalApp/Resources/de-DE/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/de-DE/Resources.resw @@ -766,19 +766,12 @@ Das Beendigungsverhalten kann in den erweiterten Profileinstellungen konfiguriert werden. - - Windows-Terminal kann in Ihren Einstellungen als standardmäßige Terminalanwendung festgelegt werden. - Nicht mehr anzeigen Dieses Terminalfenster wird als Administrator ausgeführt. - - Einstellungen öffnen - This is a call-to-action hyperlink; it will open the settings. - Gefundene Vorschläge: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/es-ES/Resources.resw b/src/cascadia/TerminalApp/Resources/es-ES/Resources.resw index de6422a9786..7eaf5023fd7 100644 --- a/src/cascadia/TerminalApp/Resources/es-ES/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/es-ES/Resources.resw @@ -763,19 +763,12 @@ El comportamiento de finalización se puede configurar en la configuración avanzada del perfil. - - Terminal Windows se puede establecer como la aplicación de terminal predeterminada en la configuración. - No volver a mostrar Esta ventana de terminal se está ejecutando como administrador - - Abrir Configuración - This is a call-to-action hyperlink; it will open the settings. - Sugerencias encontradas: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/fr-FR/Resources.resw b/src/cascadia/TerminalApp/Resources/fr-FR/Resources.resw index 76e4930f0ff..3f5a403a79a 100644 --- a/src/cascadia/TerminalApp/Resources/fr-FR/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/fr-FR/Resources.resw @@ -763,19 +763,12 @@ Le comportement d’arrêt peut être configuré dans les paramètres de profil avancés. - - Terminal Windows peut être défini comme application de terminal par défaut dans vos paramètres. - Ne plus afficher Cette fenêtre de terminal s’exécute en tant qu’Administrateur - - Ouvrir les paramètres - This is a call-to-action hyperlink; it will open the settings. - {0} suggestions trouvées {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/it-IT/Resources.resw b/src/cascadia/TerminalApp/Resources/it-IT/Resources.resw index 2e10ffd0952..fb7b04cd57d 100644 --- a/src/cascadia/TerminalApp/Resources/it-IT/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/it-IT/Resources.resw @@ -763,19 +763,12 @@ È possibile configurare il comportamento di terminazione nelle impostazioni avanzate del profilo. - - Terminale Windows può essere impostato come applicazione terminale predefinita nelle impostazioni. - Non mostrare più questo messaggio Questa finestra del terminale è in esecuzione come amministratore - - Apri Impostazioni - This is a call-to-action hyperlink; it will open the settings. - Suggerimenti trovati: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/ja-JP/Resources.resw b/src/cascadia/TerminalApp/Resources/ja-JP/Resources.resw index 43c8ff9e04b..48db8a0fd68 100644 --- a/src/cascadia/TerminalApp/Resources/ja-JP/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/ja-JP/Resources.resw @@ -764,19 +764,12 @@ 終了動作は、プロファイルの詳細設定で構成できます。 - - Windows ターミナルは、設定で既定のターミナル アプリケーションとして設定できます。 - 今後表示しない このターミナル ウィンドウは管理者として実行されています - - 設定を開く - This is a call-to-action hyperlink; it will open the settings. - 候補が見つかりました: {0} 件 {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/ko-KR/Resources.resw b/src/cascadia/TerminalApp/Resources/ko-KR/Resources.resw index 7e56ede9497..820db0c8fed 100644 --- a/src/cascadia/TerminalApp/Resources/ko-KR/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/ko-KR/Resources.resw @@ -763,19 +763,12 @@ 고급 프로필 설정에서 종료 동작을 구성할 수 있습니다. - - Windows 터미널 설정에서 기본 터미널 응용 프로그램으로 설정할 수 있습니다. - 다시 표시 안 함 이 터미널 창이 관리자 권한으로 실행되고 있습니다. - - 설정 열기 - This is a call-to-action hyperlink; it will open the settings. - 찾은 제안: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/pt-BR/Resources.resw b/src/cascadia/TerminalApp/Resources/pt-BR/Resources.resw index 99e21f6fd1f..2ba06ec576d 100644 --- a/src/cascadia/TerminalApp/Resources/pt-BR/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/pt-BR/Resources.resw @@ -763,19 +763,12 @@ O comportamento de término pode ser configurado nas configurações avançadas do perfil. - - Terminal do Windows pode ser definido como o aplicativo de terminal padrão em suas configurações. - Não mostra de novo Esta janela do Terminal está funcionando como Administrador - - Abrir Configurações - This is a call-to-action hyperlink; it will open the settings. - Sugestões encontradas: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/qps-ploc/Resources.resw b/src/cascadia/TerminalApp/Resources/qps-ploc/Resources.resw index 9b79e55b561..4a3e99ee3ff 100644 --- a/src/cascadia/TerminalApp/Resources/qps-ploc/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/qps-ploc/Resources.resw @@ -118,148 +118,148 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Şėťŧіηĝѕ ¢ǿΰľď ʼnσŧ ъē ŀоαðзđ ƒŕôм ƒïłê. Сђěćĸ ƒǿŕ šулŧå× ёřґοгş, įήćļůđíʼnğ ťяαΐľίήğ ĉômmāš. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Şĕţţіⁿģѕ ςŏûℓđ ʼnθт в℮ ℓòăδēδ ƒřσm ƒіℓε. Çћέĉк ƒòя şŷиτåж эřѓόґş, ΐлсŀµðĭηġ ŧŕàįŀїиĝ ċõmмåş. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Сθŭļď пǿţ ƒīпđ ŷŏúг δєƒǻůŀť ρřŏƒΐļę ій ýŏűя ĺīѕŧ őƒ ряσƒïℓëş - ŭŝĩʼnğ ťнз ƒìŕšτ φѓöƒїℓё. Сħëċķ ťθ маķë ŝύґè ŧћë "defaultProfile" mãтçĥεş τнę ĢŨÎĎ òƒ ǿиé оƒ ÿøųŕ φгоƒìļéş. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ćǿΰľđ πöт ƒîηđ уоџř đєƒаџļт φгóƒíĺέ įń γσΰґ ľϊѕţ øƒ φřбƒїļēś - ųŝĩηġ тђę ƒίяśт φґθƒĩĺē. €ђéćκ ťб máќë ѕцřз ťħè "defaultProfile" mǻτςĥéѕ ţђè ĞÚІĎ ôƒ õňë òƒ ÿбμř ряǿƒїļĕѕ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"defaultProfile\""} - ₣ǿΰʼnđ mųĺŧιρĺě ргöƒїℓęš щϊтħ ţђє ѕάмë ĢЏΊĎ ĩń ÿόůґ ŝεтŧĭлģş ƒíļе - įģиόяīπģ đυφļīčâťзѕ. Мãќĕ ŝúŕ℮ еάсĥ φяòƒĩℓę'ѕ ĜЏĪĎ íş űņíqцэ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + ₣õůήδ мџŀŧĭрłè рѓőƒιĺéŝ ŵїτђ τне šаме ĢŬΪĎ ιή ŷôûя şёţţïňģŝ ƒïļē - ĩĝпоѓĩлğ đűρļіċáť℮ş. Μªќ℮ şúѓё ėǻςн ρґőƒîłè'š ĢЦЇĐ ιś ũŋĩqυέ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - ₣σцηδ ǻ φѓθƒίłε ŵīŧћ âⁿ īπνâŀϊδ "colorScheme". Ðëƒąŭłтійğ ťђàť φřőƒįĺё τό тђę δěƒαūļт ¢ōℓόřŝ. Макз šūгê тħªť ώĥέл ѕěттΐñğ â "colorScheme", ťĥэ νªℓùέ mάτćђеš ŧĥĕ "name" бƒ ā ċôĺöг ѕĉђęmз įη τђę "schemes" łíšţ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + ₣ŏџŋð ä ρѓõƒіℓę шîţћ ǻй īпνªŀīð "colorScheme". Đëƒαυľτîпĝ ŧђãť ρřоƒíĺě ŧő тнë ðĕƒãůľŧ çōļóяş. Μâĸè śűřė τћàŧ ώнēη şеŧťįⁿğ д "colorScheme", ţћé νáℓūë máτсħěş ŧнє "name" ōƒ á сóℓöѓ ščнèмë їп тħė "schemes" łîšť. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"colorScheme\"","\"name\"","\"schemes\""} - Νб ρяöƒΐłēѕ ẁèŗё ƒбύʼnð îń ўθůг ѕėţтîпĝš. !!! !!! !!! !!! + Пò φгŏƒїĺèѕ ẁєґє ƒοúиđ ΐņ ўøûя šзŧţìŋġѕ. !!! !!! !!! !!! - Àĺŀ ρґбƒіłεѕ щзяє ђїđδзʼn įň ýòυѓ šэτţĭήĝś. Ϋóũ mцşť ћàν℮ αť ŀèàşŧ öлě ⁿŏń-ђīδδéη φŗθƒìℓέ. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ãļł рŗǿƒíŀέŝ ωėŗě ћіďđέʼn ιⁿ ўòüѓ şėţтΐйĝş. Υōυ мûŝт ĥªνэ àτ ľєäѕţ óňě иôŋ-ђïδđěń φŗõƒΐľé. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Şèťŧϊņģś сõüℓđ ηбţ ъέ яεłôåδěđ ƒŕόм ƒįļě. Çнэск ƒσя śÿηтå× ēřŕόѓŝ, іпċŀμðîʼnğ тŗǻϊĺīηĝ ¢ǿммãš. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ŝęťтįлġś çǿµŀđ лόţ ьэ яēℓбаďêđ ƒгǿм ƒīľē. Ċћєсќ ƒοг ѕγŋţαх έŗгόѓś, ïπċℓύδϊņĝ ťгąîľϊиĝ čòммªŝ. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ťēмφőгάřĩℓу υѕїήģ τħє Ẅĩиδõώѕ Τёřмίпāľ ďēƒάυĺτ š℮τтĭńġѕ. !!! !!! !!! !!! !!! ! + Ŧěmрθřǻŕĩℓÿ џśîŋģ ţĥз Ẁĭņðбшѕ Ŧзŗмìήâĺ ðėƒàцľŧ ŝěτтĭņģŝ. !!! !!! !!! !!! !!! ! - ₣áίĺėđ ţō ľбаð śэŧťίлğş !!! !!! + ₣дīłėδ τö ĺōáđ š℮τтіňģś !!! !!! - Ëηςσϋлŧëŗėδ эŕřоґš ωĥιļ℮ ℓǿάδϊŋğ ūŝēŗ śετťΐπĝś !!! !!! !!! !!! ! + Έлςöůлťëяèδ éґѓőґş ẁђīļé łσǻđιπģ џśёґ ѕ℮ŧтíⁿĝş !!! !!! !!! !!! ! - ΩΚ + ΘК - Ẅàřñíⁿģ: !! + Ŵāŕиĩпģ: !! - Ťнé "{0}" ιŝп'ŧ ŕμňήįŋģ ôń ỳθũŕ mªčђįпέ. Ţћіš čǻń ргëνзⁿţ ťĥε Τеŕmіήáĺ ƒŗøm ґêçэіνĩиģ ќ℮ÿъōåŗδ ìŋφџţ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ťĥє "{0}" įšή'ŧ řΰňηіпğ θл ŷбυŕ мāĉћіņë. Τĥίѕ ćªñ рŕзνзπт τнέ Τёřmîпǻĺ ƒŗóм ѓéčêîνîñģ ķёŷъǿãŗð ĩⁿφµт. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {0} will be replaced with the OS-localized name of the TabletInputService - ÕК + ÒĶ - ₣ªïļеδ тő ŗεĺòãδ şетţіŋģѕ !!! !!! ! + ₣αĭℓэđ τǿ гэľоāδ śэŧŧįηģš !!! !!! ! https://go.microsoft.com/fwlink/?linkid=2125419 {Locked}This is a FWLink, so it will be localized with the fwlink tool - Αьóμţ ! + Άвòűт ! - ₣ēëďьдćк !! + ₣ээđъàċк !! - Ѕēţťїñğś !! + Ŝęťţĩπģş !! - Ćäπςèŀ ! + Сåήċēĺ ! - Ćļбŝĕ ªľľ !!! + Ćłőŝě áľļ !!! - Qύîτ ! + Qûіŧ ! - Đô ÿòû шªñť τō ςŀθšě ǻľĺ τªвś? !!! !!! !!! + Đŏ уǿü ẃάñт тő ¢ľõśé ăℓℓ ŧаъś? !!! !!! !!! - Μµľťιφļė ρаńêѕ !!! ! + Мũļťįρľê φāńεš !!! ! - Çĺòšĕ... !! + Çŀŏѕё... !! - €łǿѕē Ťäьş τб τнё Ѓΐĝђτ !!! !!! + Čļöѕέ Ţàьś тø ťħě Гïĝнţ !!! !!! - Çľόśĕ Ωţђєŗ Ťǻьś !!! ! + Ĉļőşе Öŧђεŗ Ţдьŝ !!! ! - Ĉĺõŝĕ Τàъ !!! + Сļŏšè Τàв !!! - Ĉłŏşё Ρаπє !!! + Ćľοšэ Ρàņε !!! - Šφļΐт Ťάь !!! + Šφľîŧ Ţǻь !!! - Šφľίţ Ρªńе !!! + Şрļĭţ Ραŋè !!! - Шеь Ѕ℮âґ¢ĥ !!! + Щēь Ŝêαřçĥ !!! - Çοℓõґ... !! + Ćбłöř... !! - Çūŝŧσm... !!! + Сџşţбм... !!! - Ŕĕšęτ ! + Ŕēśёť ! - Яěňämě Ťαв !!! + Γёŋάmē Τаъ !!! - Ðüрĺíсąтз Ťáь !!! + Đύφļϊçåţέ Ţάъ !!! - ₣οüⁿδ ά ρѓőƒіĺз шιтћ аή îйνåℓīď "backgroundImage". Ðєƒâŭŀťïʼnģ ŧĥäτ рřŏƒīℓë τô ћãνё ñō ьàĉќġяοµπď îмǻġё. Μāκе ŝύґé ŧнàτ ẁћзή šĕτťійğ ά "backgroundImage", ťħē νдļûě íş ä νåĺϊđ ƒìℓę ραтħ ŧб ãή їmаĝē. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + ₣σůήđ а рřòƒïłè щíţħ ªŋ îŋνāℓіď "backgroundImage". Ďєƒªϋĺţįпĝ ŧħåť рřθƒίľē ţó нąνê ńǿ ъàċкğѓóūñď îмåğэ. Мàκě ŝμяз ťнªţ ẁĥėл šęτŧΐñġ á "backgroundImage", тђε νáľΰє їś α νдŀĩδ ƒïļë φäŧħ τö ãп ϊмªġę. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"backgroundImage\""} - ₣øμηđ à φŗοƒïľë ŵіŧĥ åň îʼnνăľΐđ "icon". Ðзƒăϋľţĭņġ тĥãт рŗǿƒιℓë тŏ ђǻνê иŏ īсŏń. Мàĸę śϋгë τħáτ ωĥ℮ή ѕěťτΐήĝ åŋ "icon", тђĕ νªļцĕ īş α νάłįδ ƒįŀĕ φăτħ τо аη імäĝз. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣όūпđ ǻ ргõƒįļє ωĩţђ ªň ϊήνåľīď "icon". Đêƒàùĺţíηģ тнаŧ φřòƒїℓє ţб ħдνĕ ŋò ĭćбñ. Μαќě śüяê τћåţ ωĥëη śзťŧĭηģ áй "icon", ţħє νàĺųэ ίѕ ǻ ναℓїđ ƒíľě φǻτĥ ťθ ăŋ ĭmǻģε. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"icon\""} The word "icon" in quotes is locked, the word icon OUTSIDE of quotes should be localized. - Ẁâřήîņĝŝ ώёѓè ƒθϋňđ ωђĭĺё φàŕşïпğ γоúг κëўьĭńδįиģš: !!! !!! !!! !!! !!! + Щдřńіńġš ωεяέ ƒöџήδ ẁнĭŀè ρąґśîήġ γôµґ кęуъїñďϊņģś: !!! !!! !!! !!! !!! - • ₣õųŋð α ķęŷьіʼnδіπġ шϊтђ тŏõ мǻлý ŝτŗΐйģŝ ƒог ťĥě "keys" åřгãў. Ťћ℮ŕ℮ ŝћòџℓđ òиļý ъ℮ ǿлέ ѕтѓїńģ νăľūе ιñ тħě "keys" âŗґάÿ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + • ₣őûńđ å κєÿьΐпđĩŋģ шíţћ ŧøо mαиў śτřιñĝŝ ƒôг ŧђē "keys" дřгãỳ. Ţнέŕê śћőũŀδ όŋłγ ъę òⁿё śťŗΐņĝ νáℓΰê įη ŧће "keys" ªŕѓдý. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"keys\"","•"} This glyph is a bullet, used in a bulleted list. - • ₣аĭļєδ ţô рąяşё дľĺ šŭвçõммâиðŝ θƒ ηеśŧĕđ ςóммàиď. !!! !!! !!! !!! !!! + • ₣αιľęδ τō ρāřşέ αℓļ şũвçőммāпðŝ òƒ ʼnęşťёđ ćőмmáйδ. !!! !!! !!! !!! !!! - • ₣оûиð α ќěÿъϊηδīпĝ ţћăť ẁâš mîşŝįŋğ ă řëqцїгéδ рäŕªmзť℮ř νǻℓůé. Ŧћιş ќёуъįпđїлģ ώíľľ вê їĝлσŕèð. !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + • ₣ôцñδ ǻ ќęγъĭʼnđϊⁿĝ ţħāτ щąś мĩšŝįņĝ ª řèqυïяеď φǻŗåmетėŗ νáļūé. Τħĩš ķэўвįпđīņğ ẃіľł ь℮ ΐģηòřėδ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="•"} This glyph is a bullet, used in a bulleted list. - • Ťĥè šφ℮ĉīƒîěð "ťĥèмё" шãѕ ηőţ ƒöυпð ĩń ţнё ŀίѕŧ őƒ ţћęмэś. Ť℮mрøяâґïŀỳ ƒâŀľįⁿĝ ъà¢ĸ τŏ ťħë δēƒàΰļτ ναļūэ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + • Тћĕ ŝρёςĩƒīęď "τћêm℮" ẁаś ηοť ƒōϋηð іŋ ťне ĺιşţ бƒ τћémėś. Ť℮mрσґäяīľŷ ƒдℓŀïʼnġ ъáςк ŧó τĥ℮ ďëƒåŭℓť νаľūë. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="•"} This glyph is a bullet, used in a bulleted list. - Ţђё "globals" ρŕǿрēřţγ īŝ ð℮рŕêċāţēď - γõűŗ ѕěτŧĩŋĝѕ mīģћτ ηèëδ ϋрđăťіʼnġ. !!! !!! !!! !!! !!! !!! !!! ! + Ťђé "globals" φгöφëŕτγ їѕ ďēφѓē¢áτєδ - ÿòџř ŝетτіήğş mіğђт πє℮đ ϋρδªτîηġ. !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"globals\""} @@ -267,642 +267,635 @@ {Locked}This is a FWLink, so it will be localized with the fwlink tool - ₣θř мőřē įňƒо, ŝεê ŧħĩş щēь раĝè. !!! !!! !!! + ₣ôѓ mθřē іпƒő, śэе ťħіš ώéь φάģз. !!! !!! !!! - ₣ǻįℓέď τǿ зжφáŋδ à ċôмmãŋð щîťħ "iterateOn" šĕŧ. Ţћΐš сбммǻлδ ωĭłľ ьê ĭģήόřèď. !!! !!! !!! !!! !!! !!! !!! !! + ₣åίĺзđ ŧø éхφǻйď а çбмmãņđ ŵíŧħ "iterateOn" ѕ℮ŧ. Ţĥīѕ ċοммąπď ŵіℓļ вέ ιġπǿяёď. !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"iterateOn\""} - ₣ôūиď ā ćŏmmάиð ωìτн άή ϊńνåľîđ "colorScheme". Ţћìš сомmáņđ щĭļℓ ьє îģπōřęδ. Мдќĕ šųґз тнãŧ шнěñ ŝέţťîñğ â "colorScheme", тħĕ νāłũē màтсђėѕ ŧĥё "name" σƒ д ćθļσř śсђèмè ιņ ťћē "schemes" ľĭśť. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣õΰпď ą čоммдⁿδ ẅίτħ ăп íиνаłіð "colorScheme". Тнïş ċσmmãⁿδ ωîĺł ьę їģñóґéδ. Μãķέ ŝũř℮ ŧнǻţ щĥĕп šзτťіⁿğ ã "colorScheme", ŧħє νаłџē måŧćн℮ѕ тђê "name" οƒ ã ċóļőѓ śçĥємє ΐʼn ţђέ "schemes" ļΐѕŧ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"colorScheme\"","\"name\"","\"schemes\""} - ₣õūńđ à "splitPane" ¢бmmåⁿď ώιťĥ ąή ιηνãļіð "size". Ťђΐŝ ċöммдиđ ẁìℓĺ ъė ιğňõřёď. Μάќę ѕųřé τнз śΐźё îѕ ъėτẃĕεń 0 ǻńð 1, εж¢ĺμŝιν℮. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣σùņð α "splitPane" ςöмmǻńđ ŵіťн āⁿ ίňνǻŀιď "size". Τћιş čôмmαñδ ẁĭłļ ъĕ īĝйŏгēđ. Μάкé ѕûřέ тђê śįźе įѕ вëтώєèή 0 äʼnδ 1, ĕ×ċłцşìν℮. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"splitPane\"","\"size\""} - ₣ªїľéď тο φдгŝз "startupActions". !!! !!! !!! + ₣αίŀèď το рàяśё "startupActions". !!! !!! !!! {Locked="\"startupActions\""} - ₣бūñð мцļťϊφŀĕ ëňνΐгøñм℮ņт νăřīªьłёѕ ẁιţћ тĥé ŝǻмĕ ňάмĕ îй ð탃èяēπт ċãşêѕ (ĺøẃεя/υрφёŗ) - όлℓŷ õⁿє νâℓųε ωĭŀļ ъē џş℮δ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣ōũńď mũłťιрļε ĕήνïґőŋмèŋŧ νаřîåъļęš щįţн ťĥё śámê ňämé îń ďĩƒƒзґěňţ ĉãśĕş (ľŏшèґ/ũρрег) - оņłỳ олě νдłūэ щίłℓ ьє ũşęδ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ǻⁿ öρтîǿήäℓ ĉøммāŋð, ẁіťħ ãŗğúmэлтş, ţõ ьэ ѕρàẃⁿεð ϊη τħ℮ ñ℮ẃ тàв όѓ ρâиз !!! !!! !!! !!! !!! !!! !!! + Λň όφţĩøŋàľ čómmаňδ, ẃΐŧĥ āŗğμмĕŋτѕ, τó ь℮ šφªшлêđ íň тħę ⁿěẅ тαь σř рäńë !!! !!! !!! !!! !!! !!! !!! - Μσνε ƒθςúš τô аʼnøŧĥëѓ τăв !!! !!! ! + Μöνę ƒøсųѕ ŧø αņŏτђзŕ τãв !!! !!! ! - Μōνė ƒøсűš ŧō ŧĥέ ńęхţ τǻв !!! !!! ! + Μőνз ƒθçŭŝ ţŏ ŧђé ñê×т ťªъ !!! !!! ! - Ап ǻℓìάš ƒøř ŧнё "focus-tab" šũвćőмmąйð. !!! !!! !!! !!! + Άņ áĺîäš ƒòґ τħè "focus-tab" šϋвċømмáπď. !!! !!! !!! !!! {Locked="\"focus-tab\""} - Мöνё ƒόčŭś тó ťĥę ρřένΐőůš ţåь !!! !!! !!! + Мøνĕ ƒσсûŝ ťő тђе рґένίøŭš ţαв !!! !!! !!! - Μøνε ƒοĉцś тнę ţаъ ąŧ ťће ġïνєη їлđέж !!! !!! !!! !! + Μбνέ ƒøĉüŝ ťћĕ ţáв áŧ ťĥě ĝїνеń їпđèж !!! !!! !!! !! - Мõνë ƒøĉύśēđ ρаηз ŧο ţĥз тăь αт ţћę ĝîνёп ĭйďĕж !!! !!! !!! !!! !! + Мôνé ƒσćųşзð ρąπè ťő ţнê тăв ãť ťнз ģìνзл ïпđēж !!! !!! !!! !!! !! - Μōνё ƒōςúŝéδ рäйě τό ãňøťнεř τάъ !!! !!! !!! + Мőν℮ ƒóĉūŝêđ φäлê тò åиόтĥêя τåъ !!! !!! !!! - Ал åľįâѕ ƒоґ ťĥé "move-pane" šύъčοmмäⁿđ. !!! !!! !!! !!! + Áή äĺīàѕ ƒθŗ ţћè "move-pane" šύвćõммαňď. !!! !!! !!! !!! {Locked="\"move-pane\""} - Ѕрεςίƒỳ ţĥέ şìžз ǻŝ ά ρĕгςěйτāğє бƒ ŧђě рāґεŋť φªñέ. Vàŀįđ ναℓüĕŝ ªяє вεтшêзʼn (0,1), єхčĺūşïνę. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Ŝрέċΐƒŷ ŧħę śĩžз àŝ á рεŗčзņţαĝê оƒ тћé φáŗêʼnŧ ρàηе. Vаļіđ νàļμέš âѓε вêŧẃзĕη (0,1), ė×čĺµѕіνė. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Ċѓēαťė ă лєщ тдв !!! ! + Čŕěǻтè å лēω тāв !!! ! - Ãņ åļϊåš ƒоř ţĥё "new-tab" şџьĉŏммάňđ. !!! !!! !!! !! + Āŋ аłįαš ƒоґ τĥĕ "new-tab" ѕΰъċômmăñδ. !!! !!! !!! !! {Locked="\"new-tab\""} - Мσν℮ ƒόčųš тσ äŋσţћєŕ ραηê !!! !!! ! + Мǿνĕ ƒøĉϋŝ ţô аňôťĥэř φаπё !!! !!! ! - ∆ń αŀϊäś ƒòř ŧĥе "focus-pane" şüьςømmáⁿð. !!! !!! !!! !!! + Αń åłĭǻš ƒôґ ŧĥë "focus-pane" šцьçбmмåñð. !!! !!! !!! !!! {Locked="\"focus-pane\""} - ₣òсüѕ τђĕ рáńэ αţ ŧђē ğįνēñ їñđę× !!! !!! !!! + ₣θċũś ťнę φäñë àт тђє ġινęη ίñďĕх !!! !!! !!! - Ôφёл ŵĭŧћ ŧĥê ğίνèή рŕσƒįľė. Δςċėрťś єιťнёŗ ťђε ήämз θŗ ĜЦΊÐ őƒ а рřόƒιℓē !!! !!! !!! !!! !!! !!! !!! + Οφεπ ώιŧћ тђė ģĩνëп рřόƒίļé. Ąćсéрţŝ еìτђєř ŧђε ήǻmé òř ĢŨÎÐ ôƒ ą ρѓǿƒìĺê !!! !!! !!! !!! !!! !!! !!! - Ĉŕёåŧë å иèш ѕφℓĭţ φáηě !!! !!! + Ċґеăτê ä ⁿęẅ šрłιť φåлè !!! !!! - Αŋ ąłįǻś ƒоř тĥě "split-pane" ŝυвćοмmǻņð. !!! !!! !!! !!! + Áη åℓįдŝ ƒōŗ тħĕ "split-pane" ŝύвсбмmаñđ. !!! !!! !!! !!! {Locked="\"split-pane\""} - €řęäţė τђε ⁿëώ ράήê άŝ â ћσŗīźǿⁿťαľ śφłΐт (τħíпќ [-]) !!! !!! !!! !!! !!! + €řĕäţз ťнę ⁿэŵ ρáňë ăŝ á ђòяįżŏиτåĺ šрĺíт (ŧнîņĸ [-]) !!! !!! !!! !!! !!! - Ċŕęâτĕ ţħę ŋęω φåиĕ ǻš á νзŕтĭĉáľ ŝρĺíţ (ŧнϊńĸ [|]) !!! !!! !!! !!! !!! + Çŕєăţė ťĥз йєŵ φάиě åѕ α νèřтĩċāℓ šρŀîţ (тђìŋĸ [|]) !!! !!! !!! !!! !!! - Çґэάтє тĥè иĕẅ ρªήз ъý ďúрłίςάтĭʼnğ τће ρŕσƒîłè øƒ ŧħê ƒōςџѕêđ ρäπē !!! !!! !!! !!! !!! !!! ! + €яêàтё ťħє ņėŵ ρàňė ъŷ δûρℓίċāŧïŋģ ţĥё φŗőƒίłé őƒ тђ℮ ƒоçųşеð рâņє !!! !!! !!! !!! !!! !!! ! - Öφéи ΐπ ţћē ğίνęπ ðιŕè¢ťőяγ іпšŧêâð õƒ ţђę φŕόƒΐł℮'ś ѕęţ "startingDirectory" !!! !!! !!! !!! !!! !!! !!! ! + Ωреń ĭη ŧне ġινĕη ďϊŕëćŧőŗỳ ìňŝτěàδ ŏƒ ŧнε ρřóƒìĺė'ś ŝєт "startingDirectory" !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"startingDirectory\""} - Όρěή ŧħē ţёгмĩņªℓ ŵīţĥ ťħέ рřονΐðęđ ťιťľę їńѕŧзàδ óƒ τћé φŕоƒΐŀë'ѕ šετ "title" !!! !!! !!! !!! !!! !!! !!! !! + Оφèñ ţнэ ţēгмίŋáℓ ẅĭτĥ ţнз ргоνίďęð тĭťℓě ίήśтèāď ôƒ τħê ρŗõƒįļε'ŝ šëť "title" !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"title\""} - Фφėй τĥě тдв щìŧћ ŧħë şρĕćіƒїéđ ćøĺôґ, ĭⁿ #ŕřğġъв ƒôґмάŧ !!! !!! !!! !!! !!! ! + Õφ℮ņ τĥ℮ ŧäв ẁïŧħ τĥе śрèçīƒíéð çŏļοѓ, įπ #řřģĝъь ƒòŗмáт !!! !!! !!! !!! !!! ! - Òρёп ťђë ŧãь ŵїŧĥ ţάвТїτĺє ōνëгřīďîńĝ đėƒäųĺт ţĭтℓе αήδ šµφφřзśŝïñģ ţįτłè çћªпĝè мêśšǻĝêš ƒřом ťħê àрφľìсåτїöή !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ωрέʼn ťђë ťáв ẃîτн ŧаьŤϊŧĺ℮ õνёггĭđΐиğ đēƒāΰŀţ τīťļë âňď ŝûφρгëѕѕíήĝ ţīţłě çĥãήğė мëѕŝàĝєş ƒŕбm ŧħέ äφφĺįçªŧįση !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"tabTitle\""} - Ίñћзгíт тħé тзŗмîπâℓ'ŝ оώή зйνїгóⁿměлτ νāŗíαвŀзş ẅĥéʼn сѓ℮äťιηġ ţħè ņ℮ẅ ťάь òѓ рáñę, řãťђег τнаñ ćŕĕâтìʼnġ á ƒřëşђ ëπνїřōпмзлт вℓǿск. Ťћîѕ đ℮ƒāύℓтś ţо śєт шћĕń α "command" įş рąśśėđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + İʼnĥëřĩţ тħз тεŕмїήāĺ'ś бщή эʼnνìяθⁿмєлτ νåŕįάвŀėѕ ẅћęη çяεąŧĩήġ ţĥє ⁿėẅ тàь ōŕ рдńé, řдτђěѓ τнäπ ćгзâτĩηģ а ƒřëŝħ ĕņνíѓőňмέπτ ъℓøςķ. Ťћĭš ðèƒαµĺŧš ţó šеτ ώћєп ą "command" їš ρǻŝşěδ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"command\""} - Öрєή тнè τäь шιţђ τĥέ śφéćīƒįéď çόℓбґ ѕçĥёмė, ίŋşτèàď ǿƒ τћє ρŕòƒïľє'ѕ ŝĕŧ "colorScheme" !!! !!! !!! !!! !!! !!! !!! !!! !! + Őφєʼn ťнє ŧãв ẁīţн тђě şρè¢ĭƒîєđ сοļōг şćĥεmé, ïŋŝтēàď ôƒ ŧнз рŗоƒĭℓэ'ş ѕéτ "colorScheme" !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"colorScheme\""} - Ďĩѕρłǻў ţĥє άφφľīçäтϊôň νзяšισŋ !!! !!! !!! + Đîśрľáý ţђě άφρļîсåťìǿи νеѓśΐŏŋ !!! !!! !!! - Ŀдùлçн ţнē ẁίйďσш mα×імїźěδ !!! !!! !! + Ĺąµήçħ ŧћé ωїñδőẁ mджîмĩźέð !!! !!! !! - Ľáυŋĉħ ŧĥè ẁīⁿđοẃ ϊπ ƒџŀļşсŕé℮ń мǿδэ !!! !!! !!! ! + Ľâųήċћ τнё ωілďöω īʼn ƒΰļŀś¢ѓеëń mоđέ !!! !!! !!! ! - Μŏνε ƒǿçùš ťο ţћē âďĵã¢ĕñť рąŋĕ ίʼn ŧћε śφёςϊƒΐеδ ðіŕęčŧïоŋ !!! !!! !!! !!! !!! !! + Μóνз ƒσ¢ûş ŧø ţће āδјαсэŋŧ ρāήê íʼn ťĥě ѕφесíƒĩëđ δïŗёçтĭǿл !!! !!! !!! !!! !!! !! - Ąπ ăłιªŝ ƒοґ τĥė "move-focus" şûьĉбмmåʼnď. !!! !!! !!! !!! + Ãŋ åĺϊąş ƒŏя τнë "move-focus" šůъċôммåηď. !!! !!! !!! !!! {Locked="\"move-focus\""} - Τĥê ðîязĉţіби ťò mōνε ƒбçцѕ ϊп !!! !!! !!! + Τĥë đĩґėċτïσй ţó мöνē ƒбςūś įπ !!! !!! !!! - Šẃãρ ťнę ƒóςųşзð φąпё ώīŧђ τĥέ âđĵα¢ёηť рãņε їʼn ŧнē ŝφєςіƒΐĕδ ðĩř℮¢ţïби !!! !!! !!! !!! !!! !!! !!! + Ѕẁăр ŧђё ƒοсџşèð φàŋé ώίτħ тђз аđĵăĉēŋτ φąñ℮ іл ťђė şφёčìƒī℮δ ďїřεćтίǿń !!! !!! !!! !!! !!! !!! !!! - Τĥ℮ δîŕé¢τįòή тθ мõνέ ťћę ƒöċûşêð рãηė їň !!! !!! !!! !!! + Ťћê ðįŕэčŧíöй тò мōνε ţħз ƒσčůšèđ рäйë їń !!! !!! !!! !!! - Łäŭпсћ тћё шïήďŏш ίή ƒòćΰş мøδε !!! !!! !!! + ₤âüήсћ τħě ώίʼnďǿώ îη ƒŏčυѕ mōđέ !!! !!! !!! - Тĥîş φąѓáměтëґ ĭš άή їⁿτĕґηäł їmρĺēмéήťάτįõπ đэţãìł ãʼnđ şђòџĺð ⁿõŧ ъе ùŝзð. !!! !!! !!! !!! !!! !!! !!! ! + Ţħìŝ рªŗãmęţėг įş ąй ĩйτέŗпāℓ ΐмφℓēm℮ʼnţăŧïöп đεţάїĺ áпδ ŝĥσϋļδ иθт ьė µŝэď. !!! !!! !!! !!! !!! !!! !!! ! - Šрёčĭƒý â ťęґмïπăŀ щìňðöώ ŧб яџń ťћě ğïνèή ¢óмmаπđłįπė ìʼn. "0" дļωªўѕ гεƒёřş ţǿ ŧћë ćυŗřěήт ẁіňđŏŵ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Šφĕċιƒу å тèѓmĭπåľ ẁίňðощ ŧŏ гûń ŧћз ğïνеñ čόммдⁿđłιňэ įη. "0" åĺẁåγš ґëƒєґş ťō τђє ćūгяєňţ ẅіʼnðоẁ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! - Şφзсĩƒŷ ťћē φǿѕĩťїоη ƒóř ţћє тęгmĩňªļ, íп "×,ŷ" ƒøѓmäт. !!! !!! !!! !!! !!! ! + Ѕрε¢íƒÿ тћё φоѕїтîσʼn ƒθř ŧнё ţεямįňàŀ, īй "×,у" ƒõřmąт. !!! !!! !!! !!! !!! ! - Ѕρэ¢ϊƒỳ тĥē ήŭмьĕŕ θƒ ċóℓμmиѕ äлδ řŏẅś ƒōř ťђё τёямιňǻł, ίņ "¢,я" ƒσѓmªτ. !!! !!! !!! !!! !!! !!! !!! + Ѕρєčìƒÿ τĥэ лцмвēг òƒ ¢σļџмηş ǻʼnδ řŏщѕ ƒбг тђě τεřмίйãŀ, ĩʼn "ċ,ŕ" ƒоŗмǻτ. !!! !!! !!! !!! !!! !!! !!! - Ρřėŝš тнε вŭτťôй ťô õрεπ ã ήėŵ τěгмΐпāľ ťąв ẅīťђ ўбµѓ ďэƒāμļť ρґοƒĭłέ. Ōρęи τћз ƒļуőùť τθ šèľēςţ ŵнìςн рřоƒϊĺĕ ŷòυ шăлť τø όφэʼn. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + Рřëŝš ťħе ьűŧтōп тő ǿρĕπ ã ηëẅ ťэяmïňăļ ťáъ ẁïťћ ýőџг δзƒåüĺτ рґσƒĩľé. Øрèŋ ţнε ƒļγõūţ ťο šēℓėсŧ ẅђį¢ĥ ρгθƒìℓě ўбũ щáήŧ ţо όрëŋ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - Пέщ Τăв !! + ∏ęш Τäь !! - Öрęп à πéω тªв !!! ! + Ώреп à ήєẅ тάв !!! ! - Ăļŧ+Сℓιçκ ŧö šρłïť ţĥе ¢ūŕřěŋŧ ẅιńδŏẅ !!! !!! !!! !! + Ǻŀť+Сŀĩćĸ ţŏ šρŀïт ťĥê ¢ŭŗřεŋτ ẅίⁿðøщ !!! !!! !!! !! - Şћîƒţ+Ċĺїсĸ ţó θρėņ ª ŋėẅ щіņðôẁ !!! !!! !!! + Ѕħιƒť+€ĺīçķ ŧö бφéñ à йêщ ẃϊπδöẅ !!! !!! !!! - Ċţŕℓ+Čŀìĉκ το бφęи άŝ ªδmίήîŝτґąŧøѓ !!! !!! !!! ! + Ċţґł+Çļϊςķ ťб ôρęй άš ãδmιňιšŧŗаτоř !!! !!! !!! ! - €ĺôŝè ! + €łǿşę ! - €łǿѕě ! + Çłōśê ! - Çŀбѕé ! + Ċĺбšэ ! - Μǻжїмίżê !! + Мāжįмϊźê !! - Мíиΐмĩžè !! + Μïņĩмîžĕ !! - Μìʼnіміžė !! + Мîⁿĩmïźè !! - Μΐπĩmíźě !! + Μíηîмĭżє !! - Ąвοµτ ! + Λъοΰť ! - Ѕěиð ₣ëëðъаċќ !!! + Ŝєйδ ₣еëđъдçĸ !!! - ǾЌ + ФЌ - Věŗšίöŋ: !! + V℮ґşϊσπ: !! This is the heading for a version number label - Ġєтťĩňģ Śŧåгτ℮ď !!! ! + Ġěтţїηġ Ѕтāгŧëð !!! ! A hyperlink name for a guide on how to get started using Terminal - Šőύѓċέ Čōðé !!! + Ѕōúяčε €öďé !!! A hyperlink name for the Terminal's documentation - Đőςűмĕņŧãţîǿņ !!! + Ðθčμмéпťдťįόŋ !!! A hyperlink name for user documentation - Ґзĺėàşě Ńотëѕ !!! + Гэĺзăšë Ņσţєš !!! A hyperlink name for the Terminal's release notes - Рřïνǻćý Рόľіςŷ !!! ! + Ρѓîνªĉŷ Ρоℓìсỳ !!! ! A hyperlink name for the Terminal's privacy policy - Ŧĥϊŗď-Рàŕтý Йŏţįсεś !!! !!! + Тђïѓđ-Рăŕŧÿ Ŋστīĉêš !!! !!! A hyperlink name for the Terminal's third-party notices - Çăņсεℓ ! + Čαñçĕľ ! - Ċŀőšè áℓľ !!! + Çĺθšê āĺĺ !!! - Ðõ ýοũ ẃαⁿť ţό ¢ľοşέ ǻļĺ ẁïⁿðőẅŝ? !!! !!! !!! + Đô ÿόµ ẅąиţ ťо ¢ľόŝĕ дℓĺ ẅîлδσщŝ? !!! !!! !!! - Ĉǻñсéł ! + Çåň¢ęŀ ! - Сŀőŝé дŀℓ !!! + Ĉĺŏşέ ǻľĺ !!! - Ðо ŷοµ щąʼnţ ţô сļöś℮ дŀŀ ţåвŝ? !!! !!! !!! + Ðσ ўоū ώªπτ ŧθ çľöšє ãŀļ τавŝ? !!! !!! !!! - Ċªŋçёĺ ! + Çάⁿčĕļ ! - Ćľόѕê āήуẁāŷ !!! + €łøşз ąηγŵâÿ !!! - Ẁāѓŋίⁿġ !! + Шąґйíⁿĝ !! - Υŏυ âѓĕ åьбůт ŧó ćℓоšέ å ŕèάđ-бпĺÿ ŧэѓmїňâł. Ðø ýθŭ ώϊşĥ ţó ĉóņτϊпûë? !!! !!! !!! !!! !!! !!! !!! + ¥õυ áŕę ǻвòūŧ тô čłôšє ă ѓεąď-öлļý ťëѓmΐηáŀ. Ðο ўоц ẃίşĥ тô ¢οηŧϊпųе? !!! !!! !!! !!! !!! !!! !!! - Čάʼnčзŀ ! + Ċåŋĉэł ! - ¥бů åŕэ αъουŧ τό рαŝťε тëхţ тħαţ ιş ŀθπġêř ŧħâй 5 Кîβ. Ďŏ ýöџ ẁîŝħ ŧô ςσñтíⁿΰэ? !!! !!! !!! !!! !!! !!! !!! !!! + Ύøµ āŗε åъбΰŧ ťò рάšţê ťé×ŧ тћάт īš łõлĝеŕ ŧнăй 5 КĩЬ. Ðο убű ώіšн ťо ¢θńтįпϋĕ? !!! !!! !!! !!! !!! !!! !!! !!! - Ρãŝτē άņŷщāý !!! + Ρăŝτě åηýώâŷ !!! - Ŵǻґñΐņģ !! + Ẅáŕпìŋģ !! - €αήċêļ ! + Сâηċэļ ! - Ŷõϋ åяέ âвőџт тō рάşťē τзхŧ ŧħάт çöⁿτāϊлš mµĺťΐрļэ ŀιňэѕ. Іƒ γőú рâšтё ŧћīş тєжŧ íʼnŧŏ ỳŏùř ѕћėłł, ĭτ mâÿ гēŝцℓţ ĩп ŧнέ űпëжφе¢ťęď эх℮ćųŧîθи θƒ çомmàⁿδŝ. Ðō уοϋ ŵīŝђ τǿ čôʼnтїŋűέ? !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + Ỳøµ άяę ªвøΰţ ţθ рäşтē ŧё×ť τĥąŧ ¢οηŧάίńš мûľтįрļê ŀĭŋêś. ̓ ÿöũ φâŝŧе тĥїŝ ŧежт įńто ÿóûґ ѕнэłĺ, ïŧ mдý řēşųľτ įή ŧће űňęжρĕċţĕď ê×έćϋťιőň σƒ ćŏmмäŋðŝ. Ðό ўŏù ωϊşђ ŧǿ ςöņτîлμē? !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - Ρăśťě ăηŷшâγ !!! + Рåšте дйÿώªÿ !!! - Ŵäŗŋĩñĝ !! + Шåřŋìńğ !! - Тýφë ã ćömmаήδ иăме... !!! !!! + Ŧγφэ ǻ čбммâņδ ⁿåmε... !!! !!! - Νό мªŧςħϊŋģ ĉőmmâηδš !!! !!! + Ио mάтĉђìήġ сömмäńðѕ !!! !!! - Àĉťîöŋ śĕãѓсн mθđе !!! !! + Ǻĉţιόл š℮âřĉн моδє !!! !! This text will be read aloud using assistive technologies when the command palette switches into action (command search) mode. - Τáь тįтℓę møδє !!! ! + Τàь тįţŀé мõδё !!! ! This text will be read aloud using assistive technologies when the command palette switches into a mode that filters tab names. - Сǿммàлđ-ĺĩⁿė mθðе !!! !! + Ĉôмmάηδ-ℓĭñè mоðē !!! !! This text will be read aloud using assistive technologies when the command palette switches into the raw commandline parsing mode. - Мθяє ŏрτιóлš ƒôѓ "{}" !!! !!! + Μοřё бρτїõñś ƒŏř "{}" !!! !!! This text will be read aloud using assistive technologies when the user selects a command that has additional options. The {} will be expanded to the name of the command containing more options. - Єжэςūŧĭñģ ĉбmmäήδ ļΐήê ωįℓŀ ĭʼnνõκё ţђė ƒōľľóщίⁿġ ςбмmăпðŝ: !!! !!! !!! !!! !!! !! + É×ěçüŧìñğ čõммãňð ľíπ℮ щįŀŀ ΐпνöкé τħę ƒōłŀóщιлĝ çõmmăпðś: !!! !!! !!! !!! !!! !! Will be followed by a list of strings describing parsed commands - ₣дїĺēď рåѓşĭⁿğ çõmмάñð ļîπ℮: !!! !!! !! + ₣діŀėđ ρдŗšιʼnğ ćóмmάŋδ ľĩńе: !!! !!! !! - €őммάпď Рªļ℮ţţė !!! ! + Čŏmmªŋđ Ρáľέτŧє !!! ! - Ťàь Śщíţςħєґ !!! + Ταв Şẃįţĉћэŗ !!! - Τýрė à ţǻь иàмє... !!! !! + Τўрė à τâь йªмē... !!! !! - Ñσ mâτçĥĩйĝ τåъ ńãмĕ !!! !!! + Ņб mâţčђιπğ τàв ʼnаmè !!! !!! - Еñťєŗ à wt çőmмáйđℓĩńĕ ŧō яцή !!! !!! !!! + Елτĕŗ å wt çбmmάпďľϊņε тο ѓũʼn !!! !!! !!! {Locked="wt"} - Мôяе őρťįŏňś ƒøŕ "{}" !!! !!! + Мǿřё øрτĩøňѕ ƒŏг "{}" !!! !!! This text will be read aloud using assistive technologies when the user selects a command that has additional options. The {} will be expanded to the name of the command containing more options. - Ŧурě д čōmmáηð пαмë... !!! !!! + Ťурέ á ćôмmäйδ ŋåm℮... !!! !!! - ∏ô mâť¢ħįńġ çоmmдпđŝ !!! !!! + Ňб мάŧсĥįиĝ ćόмmăŋðš !!! !!! - Śūġģęŝţīôⁿś mêήџ !!! ! + Şΰĝĝėśτíόŋѕ мéⁿμ !!! ! - Μоřє ôрŧίöŋŝ !!! + Μŏгε σρťїŏήš !!! - Şųģġëŝŧíόⁿѕ ƒόüлδ: {0} !!! !!! + Śŭģĝ℮ŝτΐθʼnš ƒοϋиď: {0} !!! !!! {0} will be replaced with a number. - €ŕīmşоʼn !! + Çŗїmśòʼn !! - Ŝτэěľ Вłϋĕ !!! + Ŝŧёēľ Вĺϋέ !!! - Мëδĭűм Ś℮α Ĝґёεň !!! ! + Мęδĩûм Śėα Ĝřéел !!! ! - Ðāřќ Őѓаňġε !!! + Ðаѓķ Öґăиģэ !!! - Мεδïυm Vιòľĕţ Γěđ !!! !! + Мёđíμm Vīǿĺēτ Ŗёδ !!! !! - Ďøðġĕѓ Βĺΰ℮ !!! + Ðŏðġеř Ьłűĕ !!! - Ŀΐmε Ĝŗęëń !!! + Ľīмę Ģŕèεń !!! - Ýеℓŀǿω ! + Ўёľĺθш ! - Ьľυë Vïσłèť !!! + βłůè Vīοĺêт !!! - Şĺāťę Βŀųэ !!! + Śłăţĕ Бļцë !!! - £įмε ! + Ĺίме ! - Ţαⁿ + Тди - Маģĕиŧǻ !! + Μªġёиτå !! - Ćŷăл ! + Ćýãл ! - Ŝќŷ ßℓџë !! + Ŝкý Ьľüз !! - Ðàґķ Ģяāý !!! + Ďàяќ Ğґǻу !!! - Тћĩş ĺĩŋќ īѕ іňνдľĩδ: !!! !!! + Ťђĩš łіήķ îş įπνäļīð: !!! !!! - Тђĩѕ ŀіńк ŧурě іś ĉύřѓéŋтľỳ πθт şùφрõґŧêδ: !!! !!! !!! !!! + Ţћìś ĺĭⁿĸ тγрε ĩѕ ςµŗяέŋţŀŷ ňόт ŝμрφòгţзð: !!! !!! !!! !!! - Ċâπćєł ! + €ǻň¢ėĺ ! - Ѕёŧťĭńġş !! + Ѕзťŧīŋġş !! - Ẅē ĉøůĺď лθτ щяįŧė τб ýσüř şέťťíⁿġŝ ƒĭľє. Čħёсĸ тĥė ρēѓмīŝśĩόⁿŝ θπ ŧħάţ ƒĩłє τо ĕлşύŗе тнáŧ тнĕ řέаδ-óпŀу ƒľåĝ ìš ņøτ ŝεŧ āпď τħдτ ẃґïťě аςсεśş ϊş ĝгâņţεð. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Щέ ςоůℓď πöŧ ωŗĩŧе ŧó γøųŕ ŝěťţїπġś ƒĩĺέ. Ĉнěçķ τђё ρęřмîѕŝîόήš őй ŧĥàŧ ƒίŀє ťó êйѕµřë ťĥаť тнз ŗėªð-ôήľў ƒŀåġ īş ņŏţ şзť ãлδ ŧћãţ шřΐţē àçςéşş ĩŝ ģяǻηťēđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Ьâçκ ! + Ьąčќ ! - ßâςќ ! + Бдćκ ! - ΟĶ + ÒЌ - Ðěвυģ ! + Ďęъůģ ! - Ēгŕθř ! + Ėяяôґ ! - Ìлƒöŗмáŧιòʼn !!! + Ĩηƒθѓmăťїŏп !!! - Ẁάґŋίήġ !! + Шåгⁿϊņĝ !! - Ćļΐφвőдřđ čøńŧεⁿťś (ρŗэνίêш): !!! !!! !!! + Ćļіρъőàŕđ ςбйťêйτŝ (φŕёνϊėẅ): !!! !!! !!! - Μοřě όρτîойš !!! + Мοřë òφťîσπś !!! - Ẁĩʼnðőώ ! + Ẅїņđòẃ ! This is displayed as a label for a number, like "Window: 10" - üñπámеð ώīηďŏщ !!! ! + ųńņãмëð ωϊηðσẅ !!! ! text used to identify when a window hasn't been assigned a name by the user - Ęηţęř ă ⁿěω лдm℮: !!! !! + Ёήтєг ã п℮ẅ ήąмę: !!! !! - ØЌ + ΩĶ - Čªпċέł ! + Ćάηċéℓ ! - ₣ąϊľêδ ţó ř℮πǻmё шįŋδŏώ !!! !!! + ₣àιŀ℮ď ţó řέлāмε ẁΐиδøẁ !!! !!! - Δиоŧĥêř щϊπðǿẅ ẃĩтн ţђąţ πаmέ åŀѓēªðγ è×їśтŝ !!! !!! !!! !!! ! + Дńõţнėř ωїиδōщ ẅΐťĥ ţђаţ ňǻмę ãłřėãđў ĕхΐśтѕ !!! !!! !!! !!! ! - Μдхįmїżέ !! + Μā×ΐmïż℮ !! - Ґęşŧóгè Đóшй !!! + Геşťог℮ Ďőωŋ !!! - Ĉθммάⁿđ Ράłεтťè !!! ! + Ĉοmмдňđ Ρãĺëţтę !!! ! - ₣осµѕ Ţèґmιйàł !!! ! + ₣óĉύś Ŧęřмīиǻĺ !!! ! This is displayed as a label for the context menu item that focuses the terminal. - Ẅĩήðôщš !! + Щіʼnδǿẃŝ !! This is displayed as a label for the context menu item that holds the submenu of available windows. - Őρёπ ά ⁿεщ тǻв įⁿ ġΐνëʼn şťàґтΐήġ đϊŕĕčŧōřγ !!! !!! !!! !!! + Οφ℮ŋ á ⁿέẅ ťάъ ιň ģïνėń ŝτåřтіηĝ đíяęçťõѓỳ !!! !!! !!! !!! - Оφęⁿ ã πęẃ ώĭńδôẅ ώïťћ ĝіνęʼn šţǻгŧįиģ ðїřêςτοŗу !!! !!! !!! !!! !! + Ŏφεń д иěŵ ẅιπδõω ŵīťн ĝїνëи ŝтăяŧіηğ ďïŕзċτбяў !!! !!! !!! !!! !! - Ѕрŀĭт τнє ẁìⁿδöщ άπď şţąѓт ĩⁿ ġĭνêŋ ďįгěçţбгŷ !!! !!! !!! !!! ! + Šрĺîţ ťнз шìŋδóщ àлð ŝτäѓţ ïп ğΐνêп ďίřèċţоŕу !!! !!! !!! !!! ! - Èхφóřŧ Τèжŧ !!! + Êхφőŕτ Τėхτ !!! - ₣άιļěđ ŧо ěхрŏгť тēѓмïйäℓ ċбητėήт !!! !!! !!! + ₣ǻĭľēð тǿ ежрõѓť ŧèямїήăļ ¢öлţêит !!! !!! !!! - Šŭčċέšśƒūļℓỳ ĕхροѓŧèð τэřміиäĺ čσňţэʼnτ !!! !!! !!! !! + Şΰςċэśѕƒúĺℓў ê×ρóřţэδ ţėŗмїйǻŀ çøⁿтзŋť !!! !!! !!! !! - ₣ìŋð ! + ₣ϊńđ ! - Ρłāîⁿ Ťĕם !!! + Ρℓªïή Тзхť !!! - Ţėřmĩⁿäтîбň ьεђªνįог ĉαή ье ĉόπƒϊĝŭяэδ ΐп ǻđνǻήсєð φґσƒĭľе şέŧŧϊŋğѕ. !!! !!! !!! !!! !!! !!! !! - - - Ẁїⁿðóщŝ Ŧеŕмìиаĺ ¢ªņ ьě ѕéŧ ąŝ ťђ℮ ďęƒåūłť тêґмίŋªℓ αрρłίċăŧíőň ìη ŷσϋг ѕėťťϊпġŝ. !!! !!! !!! !!! !!! !!! !!! !!! + Τêŗмïйаţĭŏņ ъęĥανіóґ çαп ьē ĉǿñƒíġΰřεđ ΐñ àďναñçεď рґσƒïľе ѕēťťīʼnģş. !!! !!! !!! !!! !!! !!! !! - Đõŋ'ť šћσẁ àģаΐņ !!! ! + Ďôŋ'т šћόώ аĝαιη !!! ! - Ťħіš Ţзѓмϊηāℓ ẅìήδόŵ ĭѕ яџпņîйģ àŝ Āđмій !!! !!! !!! !!! - - - Ŏφėп Ѕėţŧΐņğş !!! - This is a call-to-action hyperlink; it will open the settings. + Ŧђïѕ Τèřмîиαŀ ẅїňďôщ îś ґūņйîňġ âş ∆δmій !!! !!! !!! !!! - Śϋĝģėѕŧïöⁿś ƒоùлď: {0} !!! !!! + Ŝŭģġеšŧіôлś ƒǿμñδ: {0} !!! !!! {0} will be replaced with a number. - Ĉħэсķіńğ ƒōя ùρδдτĕѕ... !!! !!! + Снεĉќíлĝ ƒбя úφďàŧєš... !!! !!! - Áи μρðαťέ іś ªνăįļăвŀе. !!! !!! + Ąп ůρδäŧ℮ îş àνдίļăъľё. !!! !!! - Įпśţάľℓ ⁿōщ !!! + Ĩпŝťαļł пŏщ !!! - Ŧħė "newTabMenu" ƒìэļđ сöлŧăìηŝ mǿř℮ ţнäñ оπ℮ зйţŕγ ǿƒ ŧỳρė "remainingProfiles". Ǿηĺý ŧħέ ƒіŗşŧ ôйė щįłℓ ьè čôпşίðεґέđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Τĥε "newTabMenu" ƒΐėŀď ĉοптдїńś мбгз τнǻņ ŏηë éńţŗý óƒ ŧγρē "remainingProfiles". Òⁿŀÿ ŧћę ƒīяѕт όňě щіĺļ ъê ĉôńšĩďēгεď. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="newTabMenu"} {Locked="remainingProfiles"} - Τћ℮ "__content" ρřǿрéŕŧỳ ίѕ řёśэŗνęđ ƒôя їπτεřйаľ üş℮ !!! !!! !!! !!! !!! + Ţћĕ "__content" рґöρэřţý îѕ яєŝęѓνέď ƒōŕ ίиţĕŗπáŀ ϋśě !!! !!! !!! !!! !!! {Locked="__content"} - Οφёи ą đϊаĺöĝ ĉбņŧâĭпíиģ ρяŏδúćţ ΐηƒøŗmªτïóņ !!! !!! !!! !!! ! + Õρёʼn ã ðîäłóĝ ĉôитаϊⁿíñģ φŗøđũćτ įñƒŏґмąтιόⁿ !!! !!! !!! !!! ! - Ωрèй ţђè čбľǿя φîĉќéг ťô ĉĥσθşз τħě čоĺōѓ ôƒ тнĩѕ тåь !!! !!! !!! !!! !!! + Øφєń ţнε сöļŏя ριçκэŗ ŧõ ςђőǿšе τћē ĉòļòŕ оƒ ţнïš тåъ !!! !!! !!! !!! !!! - Φφéⁿ ţћě ςθммâňð φăļéτťĕ !!! !!! ! + Őφέи τнĕ ċоmmâпđ рαļетŧ℮ !!! !!! ! - Θрèη ª ⁿêẁ ŧąв µѕїʼnğ τнέ ªčтíνė ρŕоƒíŀê ïй ţħè čúяřĕπť đîřēćţőѓÿ !!! !!! !!! !!! !!! !!! ! + Öφėп а πėш тāв űśìňĝ τĥê дсťїνє ρŕõƒїļè ΐй ťђë čцŗřëʼnт ðιřεçŧόґỳ !!! !!! !!! !!! !!! !!! ! - Ëхрόѓţ τħĕ сōиţєņтş ōƒ ťĥе ťěжτ вŭƒƒёѓ ΐñţō ã ŧěхŧ ƒìŀэ !!! !!! !!! !!! !!! ! + Ε×рøгŧ ŧħë čòлťεŋтš òƒ ţĥè τęם вúƒƒëŗ ίⁿťô ã ŧė×ŧ ƒϊľє !!! !!! !!! !!! !!! ! - Øρĕⁿ ŧће şëªяćħ δϊαļŏģ !!! !!! + Οφéή тħě ѕěάѓćн ðīāļθĝ !!! !!! - Ŕєиáмē ŧђΐŝ тдъ !!! ! + Я℮ηдmё ŧħιѕ τâв !!! ! - Ωρęⁿ тĥĕ ѕéţτїηĝś ρǻģė !!! !!! + Õρęπ тћε ѕеťţįŋģѕ φдġé !!! !!! - Φφέл â πέŵ рάňē ŭśіńģ ŧнэ ª¢ţΐνĕ φŗõƒĩļέ īⁿ ŧĥĕ çцřŗėиť đĩгёĉťóŗỳ !!! !!! !!! !!! !!! !!! ! + Ωρèŋ à и℮ẁ φаʼné ϋşîлģ τĥě ăćŧіνę ρřбƒíłè ίп τĥё ćũŕŕĕʼnт ďĩřеċтŏřÿ !!! !!! !!! !!! !!! !!! ! - Ĉŀôѕė дĺľ тāьş τò τħė яĩġћт όƒ τĥΐŝ ŧǻв !!! !!! !!! !!! + Ċŀóśę ąŀŀ τåъś ţô ťħè ŗīġнŧ бƒ тĥíş τäъ !!! !!! !!! !!! - Ćĺόśе ãŀℓ ťάъŝ ℮хсèφţ ťĥїѕ ŧâь !!! !!! !!! + Čłǿśе ǻℓļ τǻьŝ ℮жčēφτ ťнιś ťǻъ !!! !!! !!! - €ĺòŝэ τђíŝ ţåв !!! ! + Čľõŝě ţђĩş ťåв !!! ! - Єmφтγ... !! + Éмрţу... !! - Çℓσş℮ Ράиε !!! + Čĺθŝé Рäʼnз !!! - Ĉĺοŝě ŧнέ άçŧινè φâηė īƒ mџľťĭрłέ рªņēŝ äя℮ ρŗеšěпť !!! !!! !!! !!! !!! + Сľǿŝέ ŧĥé ªćτΐνέ рдπє ïƒ mûŀŧіρļ℮ рăň℮ş ăяę ρŗеšèñŧ !!! !!! !!! !!! !!! - Ґĕѕёт ŧãь ¢øĺõř !!! ! + Řēšėŧ ţâъ ςółоѓ !!! ! Text used to identify the reset button - Мōνє Тдь τő Ņėẅ Ẁîʼnďσщ !!! !!! + Мøνê Ťãь ŧο ∏έẁ Ŵĩήðôώ !!! !!! - Мòνέš τдъ тσ ą ńэω ωìлðøẅ !!! !!! ! + Μôνëŝ тдъ τŏ а ʼnёẁ ẃїńðσш !!! !!! ! - Ŕųň ăŝ Áďмîπĭšŧгăţόŗ !!! !!! + Γυń ªѕ Åďмĩʼnіşτгąτоѓ !!! !!! This text is displayed on context menu for profile entries in add new tab button. - Ąçтΐνэ φапë мőνёð τő "{0}" тãв !!! !!! !!! + Âċţίν℮ ράл℮ мõνēđ τо "{0}" ťăъ !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the tab the pane was moved to. - "{0}" ţάв mσνëđ ţô "{1}" ẁΐпδοω !!! !!! !!! + "{0}" ŧαь mōνеď ţθ "{1}" ŵíйðòŵ !!! !!! !!! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. {1} is the name of the window the tab was moved to. - "{0}" ţªь мŏνєð ţσ пёẅ ẁĩńδόẅ !!! !!! !!! + "{0}" ťав мŏνêď τó лěẅ ωìⁿðóŵ !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. - "{0}" ταъ møνęδ ţő рõśíτιŏп "{1}" !!! !!! !!! + "{0}" ťªъ mόνêđ ťо рóѕïŧĩǿⁿ "{1}" !!! !!! !!! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. {1} is the new tab index in the tab row. - Ǻċτΐνé φâήе мǿνéđ ţθ "{0}" ťäъ ïи "{1}" ŵιņđõш !!! !!! !!! !!! ! + Δçŧϊνέ φǻлę мǿνéð то "{0}" ţåъ īń "{1}" ώïʼnđθẅ !!! !!! !!! !!! ! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the tab the pane was moved to. {1} is the name of the window the pane was moved to. Replaced in 1.19 by TerminalPage_PaneMovedAnnouncement_ExistingWindow2 - Åčţΐνē φàле мονêď τõ "{0}" ώĭňđòω !!! !!! !!! + Ąćŧіνэ φαņέ мöνэδ τǿ "{0}" шїňðόш !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the window the pane was moved to. - Ăćτíνέ φãήз мθνěđ ţǿ ňέẃ ωίňďóẁ !!! !!! !!! + Āсţїν℮ φаπе mõνзð τθ ʼnëώ ώíлđōẁ !!! !!! !!! This text is read out by screen readers upon a successful pane movement to a new window. - Äĉŧîνє φåňε móνέð ťö ňεω ŧâь !!! !!! !! + Άĉŧіνэ райэ móνэď τő ńеẃ ţάъ !!! !!! !! This text is read out by screen readers upon a successful pane movement to a new tab within the existing window. - ΃ śèţ, ţђέ ćòмmǻŋď шіŀľ ъэ дррэňδĕð тθ ťĥє φѓōƒíľэ'ś δéƒâūŀт ćомmāņď їиśťēāđ ŏƒ ѓēрłά¢íηĝ іт. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Ϊƒ š℮ŧ, ţħе ĉŏмmαήđ щĩľĺ ъé ăррëʼnđεđ ţσ ŧђε рřõƒīł℮'ŝ đεƒάΰļт çömmªņð íлѕŧέǻð öƒ řėφłąćïиğ ΐτ. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Ŗεšτäřť Сòплέ¢тίøņ !!! !! + Ґëŝŧâřτ Ĉоⁿη℮ςŧіòή !!! !! - Ѓêşŧãřŧ тн℮ âçτìνе рàⁿê ćбñйєĉтĩόʼn !!! !!! !!! ! + Ґêśţåгŧ ťħě ãсţīνè рãŋэ çōлиєċŧīοп !!! !!! !!! ! \ No newline at end of file diff --git a/src/cascadia/TerminalApp/Resources/qps-ploca/Resources.resw b/src/cascadia/TerminalApp/Resources/qps-ploca/Resources.resw index 39f25a2af6b..aed4a5aed74 100644 --- a/src/cascadia/TerminalApp/Resources/qps-ploca/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/qps-ploca/Resources.resw @@ -118,148 +118,148 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Şêťτīήĝş соűŀð пôţ ъĕ łόάðēđ ƒřŏm ƒīŀє. €неĉк ƒøř ŝŷиτåх ëŕѓбŗš, ĭйςľμđĭлĝ ţŗåîłιńġ čōммάŝ. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ŝ℮ťтïйģѕ ĉōυĺδ ŋøŧ ъ℮ łоªðзð ƒяòm ƒїļê. Сĥëĉκ ƒôѓ ŝÿŋŧâж έřґöгѕ, ίňćĺμðįʼnĝ τřăíŀīňġ сθmмâş. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ċòΰļđ иōŧ ƒïńď ỳőũѓ ðέƒдúĺτ ρґθƒīℓε įи ўоŭř ļĩšţ σƒ рŗοƒїĺėś - úśіʼnĝ ťнë ƒιяšτ рґοƒìĺэ. Ĉђε¢ĸ ŧø mαĸэ ѕµгę ŧħз "defaultProfile" мªт¢ћēѕ τђз ĞÙІĐ ǿƒ олě όƒ ўòμř φґоƒїľēŝ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Сöŭłď ŋόť ƒíńđ ýоùѓ ďёƒāůℓť ρґοƒįℓĕ ĩñ ŷôűг ľīśт ōƒ φяŏƒīĺεŝ - űѕīňĝ тђè ƒιŕśŧ ргσƒіļë. Çĥέĉķ ţο макē ѕμѓє ŧћε "defaultProfile" mąтĉħěš ťђέ ĠЏΪĎ оƒ öήë бƒ уøúŕ ρяöƒΐℓëś. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"defaultProfile\""} - ₣ŏúиð mūľτίρĺє ρŕоƒìļэş шітĥ τнέ šǻmέ ĜŰÎĎ ιπ γòúř ѕêτтįŋġš ƒїĺē - іĝņôŕįņģ ďµρℓі¢âτéś. Μáќê ѕυřé êăςђ φŗŏƒіℓё'ş ĞЦĪÐ їѕ ųňìqůе. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + ₣оΰпđ мµŀтïφĺé рґòƒïľėѕ ẅìťћ ťђé şªме ĞŲĨĐ îи ўσúř šёťтìηġŝ ƒιŀ℮ - īġņøѓïñģ ðцρľιćăт℮ş. Мǻĸē śūřє ĕäćħ φŗóƒīłè'š ĞŨΊÐ īš ũñïqϋз. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - ₣θüπδ å ρябƒїľê ẃĭτħ äñ ïⁿνăłĭδ "colorScheme". Ďēƒàųĺτіñĝ ţћāŧ φяоƒįŀë ŧō тĥė ð냪ūľт ¢ǿľŏгŝ. Мάĸз şυґ℮ ŧĥάţ ẃħзń ś℮ţтîñğ å "colorScheme", тћέ νåŀύэ мåτсђέš ťнě "name" οƒ ą сŏļòя ѕċнзmз ïŋ тћê "schemes" ℓīšť. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + ₣ōûйδ ą φřøƒϊℓε ẁϊŧħ ãй іʼnνàℓîδ "colorScheme". Ðзƒªџŀŧīηģ ţĥáт φяσƒιľê ŧσ ŧĥё ðзƒαũļт ςσļôřş. Μåķé šŭŕé ţнäť ẁħёʼn şēτтïпġ ã "colorScheme", τнз νâļúē mªŧ¢ђęš ţђε "name" óƒ ǻ ċσℓôŗ śςħėmэ іŋ ŧħě "schemes" ℓїšť. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"colorScheme\"","\"name\"","\"schemes\""} - Лõ ρѓòƒίℓеş ẁėřє ƒõũňδ іⁿ γóŭг ѕèτťîņĝѕ. !!! !!! !!! !!! + Ńθ ρгσƒìľёš ẁëŗέ ƒθџиð íⁿ ỳθця ŝéтŧįйġŝ. !!! !!! !!! !!! - Λℓł φґòƒîŀєş шěřé ћĭδðęй ΐⁿ ýбύя ѕзτŧϊηġş. Ўŏú мυŝτ ћάνè ãτ ℓ℮άŝŧ σń℮ ηőй-ђίððэп ргоƒîľĕ. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Àŀł φŕŏƒíľеş шёѓĕ ħīđδєņ íⁿ уоŭя ѕèтťіŋģŝ. Ўøц мųšт ђáνė ǻτ łεàšť бηз пόл-ћíďðęή ρѓоƒĩĺě. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ŝėţŧĩηġš ċόϋĺδ йöт вε řзĺόàðęđ ƒřôm ƒϊľę. Ćĥěçκ ƒòŗ ŝупţá× ęřґогş, ĩηćℓџđíńģ ţяªίľΐлğ ςómмаŝ. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ѕēтτïйġş čόµľδ ⁿοт ьē ґεłöāď℮ď ƒгом ƒīŀέ. Ĉђэск ƒõг šŷήτă× èѓřóґş, іπсŀцδīņġ тřąіļΐńģ ċοmmаŝ. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ťзmρöяáгįℓý úѕіηĝ тђė Шĩήďőẃŝ Ťεґмįńåļ ðèƒáύĺτ ŝзţŧïпğš. !!! !!! !!! !!! !!! ! + Ţзmрőгáѓïłÿ ϋšïпĝ τђě Ŵíиδǿώŝ Ŧεгmïñдĺ đёƒàцℓŧ ŝéтτįиğѕ. !!! !!! !!! !!! !!! ! - ₣âīľέδ τσ łόªð ѕéтťĭňğѕ !!! !!! + ₣αίℓёď ţó ļŏãď şёτŧîʼnģѕ !!! !!! - Έηčôüņţέŗэđ ℮řгòяś ŵђïļė ℓŏάδìлĝ ϋśęř şĕţŧïⁿģš !!! !!! !!! !!! ! + Επčбųňтзřēδ ëŕřõґѕ ŵħϊŀе ļοăđіηğ ŭşёŗ ѕêťţιпģş !!! !!! !!! !!! ! - ÖЌ + ÖĶ - Ẃàŗⁿіиğ: !! + Ŵǻŕлιηĝ: !! - Ťħз "{0}" îşй'τ ŗŭⁿņΐήğ ǿй уōůг маςђīñ℮. Ţħįѕ çàņ ρгένэлŧ ŧђэ Ţзгmìиãł ƒŗőm язсέïνϊŋġ κєỳъбăŕď ĩпρùт. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Тĥέ "{0}" íśŋ'ţ ŕŭñŋĩηġ ǿñ ýōύŕ мдčħĩⁿě. Ťђįş çдⁿ ρřëνεⁿţ ţħę Ţêґмïňªł ƒѓőм яĕс℮īνïŋġ кĕŷвőαŕδ įŋρυť. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {0} will be replaced with the OS-localized name of the TabletInputService - ОΚ + ÔĶ - ₣ǻíľēδ тθ ŗêľσªď šэτтīņĝš !!! !!! ! + ₣αΐĺěđ ťŏ ґεℓǿâδ šĕτťїпģŝ !!! !!! ! https://go.microsoft.com/fwlink/?linkid=2125419 {Locked}This is a FWLink, so it will be localized with the fwlink tool - Äвŏûŧ ! + Αъθџţ ! - ₣зêďьàćĸ !! + ₣еèðвáċĸ !! - Şěŧτιņģѕ !! + Şзţťΐήģş !! - Сąŋ¢эľ ! + Ĉąñсэŀ ! - Ĉłóşê äļľ !!! + Ċłøş℮ äļļ !!! - Qùїţ ! + Qûïŧ ! - Ďо уòц ẃāňţ ťŏ çľоśë âŀľ ŧàьѕ? !!! !!! !!! + Ďθ ỳσŭ ẃąńŧ ťō čĺбšэ άļĺ тáвѕ? !!! !!! !!! - Мūļţìрĺé ρăηêš !!! ! + Μüℓτĩφĺĕ рαʼnėş !!! ! - €łǿѕė... !! + Çℓòѕĕ... !! - Ćℓóšě Τάвś ţб τħэ Ŕîğћτ !!! !!! + Ćľöśè Ťåвş ŧб ţħė Яîġнŧ !!! !!! - €ŀǿśĕ Òτђεŗ Ťăъѕ !!! ! + Çļōşэ Φтĥέŗ Тавŝ !!! ! - Ćℓőşё Тåв !!! + Čℓσşэ Ťāв !!! - €łбśё Ρăие !!! + Ĉłοŝе Рåŋę !!! - Şφĺїт Ŧάъ !!! + Ŝρľιţ Ταв !!! - Šрℓíт Рåⁿé !!! + Şφļїτ Ρăňе !!! - Ŵéь Ѕеάřċћ !!! + Ẃėъ Ѕёâŕςђ !!! - Çôļöя... !! + Čбŀòř... !! - Ćųşτőм... !!! + Čΰšŧōм... !!! - Ѓĕşєτ ! + Ѓěŝ℮ţ ! - Гèήàмє Ŧαъ !!! + Γèпäмĕ Ţǻв !!! - Ðůρĺΐćаťē Ťăь !!! + Đùφłιćåτê Ţαъ !!! - ₣ōυηď ã ргøƒιł℮ ẃιτн ǻп ιпνâłíď "backgroundImage". Đëƒåµĺţîпġ τнåŧ ρŕøƒϊłê ţσ ĥανè ñõ ъáςκĝѓόúñđ ίмąğé. Маĸ℮ śũř℮ тħãŧ щнεή śëтŧīʼnĝ ä "backgroundImage", тђз νǻĺùě ϊş á νãļїδ ƒīĺé рªţћ ťõ ăπ ιmąĝ℮. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + ₣θůⁿδ д φřбƒîℓе ωîτн äⁿ ΐŋνåŀįð "backgroundImage". Đêƒаūĺтĩйĝ тĥąť рґòƒїĺè ŧó ћãνз ñǿ ьāскģŕòΰйδ îmãĝé. Мäкз śûřє τħàť ŵнεη śèŧτίиğ ά "backgroundImage", ťђè νάłúе ĩš д νªℓїđ ƒιĺĕ рǻтĥ ŧö дñ іmāġз. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"backgroundImage\""} - ₣бüπδ á рřоƒìļе ωїťĥ άи ϊñναłïð "icon". Ďεƒαϋℓтìήĝ τнάť φгбƒíľε ţσ ĥąνε ήǿ îçőй. Мǻķέ šùŕĕ τћąτ шђ℮η śёŧŧїπğ дņ "icon", ţнĕ νâļúé ĭš ā νâℓïð ƒìľè φáťћ тό āń ΐmäğē. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣σúлð ª φŗōƒíŀе щîţђ áñ ìлνăℓΐď "icon". Ďёƒацŀťìиğ τнåŧ φŕöƒїľ℮ τо ђаνě ňό ΐ¢ôл. Мăĸé şûѓė τнаť шћėñ śётţĭńġ дп "icon", тнè νãĺúε ïѕ ª νªłĭď ƒîļз ρåŧĥ τσ âⁿ íмªģė. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"icon\""} The word "icon" in quotes is locked, the word icon OUTSIDE of quotes should be localized. - Ẅαѓʼnіπğş ẁèŕĕ ƒθϋпđ ẅнΐℓė рáѓѕįňġ ýõųŗ ќĕýьîлđїηġś: !!! !!! !!! !!! !!! + Ẃăѓηіпğѕ ẃëřė ƒóџπδ ώħīĺ℮ ρдřѕιŋģ γοϋŕ ĸēÿъϊпδΐлġŝ: !!! !!! !!! !!! !!! - • ₣ōůňđ ã κėуьĩήδĭⁿĝ ẅιтн τŏõ мăńў ŝτгìпġѕ ƒôŗ τĥē "keys" ǻгѓάγ. Тħêřè ѕħοúľδ ôʼnļý ьè σлĕ šτŕίйĝ νǻłύз їή ţћĕ "keys" ăяґàу. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + • ₣όŭηď α ĸĕўьĩŋðίńĝ ẁĭτħ τõö мαņγ šţяĭŋĝŝ ƒõř ţћê "keys" àŗŕąý. Ťħēŗë ŝнøůŀď ōήłγ вė öлè şτґĩπġ νάłúė îņ тнě "keys" ãггâу. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"keys\"","•"} This glyph is a bullet, used in a bulleted list. - • ₣ąīℓэď ŧθ рąŗşė åĺļ şцвċőмmåиđş ōƒ ñεšţęð çσмmąńđ. !!! !!! !!! !!! !!! + • ₣ąίℓєδ ŧó рάřšε ăŀľ šύьсόмmâⁿδş öƒ ñέşтéδ çómмαйđ. !!! !!! !!! !!! !!! - • ₣ôϋήð ά кêýьιńďΐпģ тħάţ ωǻś mĩšŝїηģ ά язqύіŗёđ ραґąмèťęŗ ναłυ℮. Тнίŝ ķěýвĭňđïʼnğ ẁįĺĺ вė ίģπőгèδ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + • ₣ōůπð å ќэŷвĩήðіпğ τĥãţ ŵαŝ mїşşīπġ á ґеqµіřёδ рáяàмěţěг νάłΰέ. Ŧђιś ķэγьіήđϊʼnġ ẃîℓľ ь℮ ĩĝņбŗёď. !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="•"} This glyph is a bullet, used in a bulleted list. - • Тђэ śрéςįƒîέð "ťнěmэ" ŵǻś иоŧ ƒόűпð їи ţнé ŀîŝŧ όƒ ţђёmĕş. Ţэмφőяåŕіℓý ƒαļļіņġ ьá¢ќ ŧö ţђē ďěƒãųļτ νăľùė. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + • Ťћė ѕрзčîƒī℮đ "τħêmэ" шаѕ ηστ ƒøùʼnď īп τђę łíšŧ ǿƒ тħęm℮ś. Τ℮мφǿґåříłў ƒâļŀíπģ ьą¢ĸ ţõ ťђê đèƒàűℓţ νáļúě. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="•"} This glyph is a bullet, used in a bulleted list. - Ŧћė "globals" φгóφеřŧŷ ïś δëρŕęčдτëð - ўοűѓ šêττīņğš мιġћţ йëзδ ûφďαţîńĝ. !!! !!! !!! !!! !!! !!! !!! ! + Τħě "globals" ρřōрëѓťỳ їѕ δëφяєćатěδ - ŷόΰŗ śëτŧілğѕ mįģĥτ ⁿеεď üρďάτїйğ. !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"globals\""} @@ -267,642 +267,635 @@ {Locked}This is a FWLink, so it will be localized with the fwlink tool - ₣óґ mοге ïηƒő, ѕеэ ŧћїѕ ẃėь ρаğē. !!! !!! !!! + ₣öѓ møŗε ïⁿƒò, š℮з τнìš щέь ρąğ℮. !!! !!! !!! - ₣åįļёδ тó εхρąηδ а ¢őммǻлď ωĭŧђ "iterateOn" şėť. Ŧħïŝ ¢ŏmmдʼnď щιĺļ вé īġŋöŕєδ. !!! !!! !!! !!! !!! !!! !!! !! + ₣ªîļėď ťο éжрǻńð ã ćǿмmąʼnď ώїţћ "iterateOn" šēŧ. Τнιŝ çόmmàŋď ẁïłĺ ъе īģпöгèð. !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"iterateOn\""} - ₣óύлð ǻ сŏммàπď ώīŧн аη іńνāļΐď "colorScheme". Ŧнιş ςōmmăñđ ωíļĺ ъэ іģŋόгэð. Μäκэ ŝűѓέ ťћâţ ẃĥзņ šéτŧіпģ ã "colorScheme", τђë νäĺϋе мåţċђěš ţħê "name" θƒ ª сбℓθŗ šċĥέmè įⁿ ţнĕ "schemes" ℓîŝт. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣óüņď á ċσmмãπð щīťĥ αʼn ίñνāŀĩð "colorScheme". Ťнìš ćбmmāйď шïℓľ ъё ïğņőŗэď. Μåќę śύѓе ťĥαţ щĥеπ šётťїňġ а "colorScheme", ťħë νàŀΰê măтςђèŝ τнё "name" óƒ ª çôłοŕ ѕсĥемĕ іи ťђε "schemes" ľįѕŧ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"colorScheme\"","\"name\"","\"schemes\""} - ₣οūиď ά "splitPane" ĉôмmǻήď ωїтħ άл ìйνàĺìð "size". Τħĭѕ ĉбммåпđ ẃįľŀ ьė ĭġńôŕēđ. Мàќë ѕџяė тħé śϊžέ ϊѕ ъёτωέēň 0 åņð 1, έ×ĉłυśіνė. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣όµйδ å "splitPane" ςŏmмáņđ ẃìţн ąи їŋνάℓįð "size". Тђĩś çõmмäήð щіłℓ вэ ΐğņøŗêδ. Μǻκє ѕυřé ŧћě śîźě ΐŝ ъěτẅз℮п 0 ªńð 1, ёхςłυѕīνě. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"splitPane\"","\"size\""} - ₣āїľєð тõ ρăґşэ "startupActions". !!! !!! !!! + ₣āΐłęð тò φάŗšě "startupActions". !!! !!! !!! {Locked="\"startupActions\""} - ₣ǿŭⁿđ mŭℓţϊφłз éήνīřθлmеⁿт νάŕίªьℓэѕ щïτн ŧнę şăмё ʼnǻмê ĭņ δίƒƒ℮řέηт сäѕєѕ (ℓóẅĕг/ύφрέя) - όηłγ òńз νáľůĕ ŵįłℓ в℮ ůşèđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣öŭňđ mûℓţϊφłē έņνіяоимĕʼnт νáгΐάвļęś ωìŧħ тĥĕ šąmё ñдmě ĩи ďīƒƒěŗęήт ĉáŝéś (ľοщèя/ùррēя) - õπℓý бʼnэ νąłϋз ŵïłℓ вє ùѕêđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! - Δй θрτίøņāĺ ¢øмmāиď, шΐŧн äŗġџměŋτŝ, ŧò ьé ѕрąώʼnĕđ ĭŋ ŧħё иěш ţäв οѓ φåŋĕ !!! !!! !!! !!! !!! !!! !!! + Ąπ öρŧîòлäŀ ¢ǿмmãπđ, ŵĭтћ äřġůmĕηтš, το вε šράщπєď ĭπ ţђē ņέщ τãъ õř рàйё !!! !!! !!! !!! !!! !!! !!! - Мöνę ƒöċџš ŧő απõŧћэŕ ŧάв !!! !!! ! + Мôνę ƒŏсűş тö аńбτћęŗ тàъ !!! !!! ! - Μōνę ƒθćůš ţø τħέ ηë×ŧ τав !!! !!! ! + Μονэ ƒοčũš τό ťĥе ⁿзжť тäв !!! !!! ! - Δń ªŀιáş ƒőř тĥè "focus-tab" şцв¢ōmmāиď. !!! !!! !!! !!! + ∆ņ ãłíäŝ ƒθг ţĥэ "focus-tab" ѕűвĉòмmáηď. !!! !!! !!! !!! {Locked="\"focus-tab\""} - Μòνе ƒŏςųš тб ŧђэ рřёνįøùş τâв !!! !!! !!! + Мőνē ƒоċμś τō ŧђę φŕēνϊóцş ťàъ !!! !!! !!! - Мóνé ƒόсύŝ тнε ŧăь ǻť ţħé ĝíνêη ιπδе× !!! !!! !!! !! + Моνë ƒöçûŝ τĥε ţαъ äт ţħε ĝίνëŋ ίņďěх !!! !!! !!! !! - Мōνε ƒøсűѕêð ρăйē ťõ ťĥе τåь áт ŧђз ġίν℮й ìлðєж !!! !!! !!! !!! !! + Мöνē ƒòçυšęð φăņé ŧô τĥё тāъ āτ ţĥë ğįνёņ ΐʼnδêж !!! !!! !!! !!! !! - Μóνє ƒôςŭşèδ φåйз ţŏ ãиότћėг ţªъ !!! !!! !!! + Μόνê ƒǿćμśèð ρåиė τō åпбŧћзř ŧåъ !!! !!! !!! - Äη āℓîāŝ ƒбг тĥē "move-pane" śűвςòmmáñð. !!! !!! !!! !!! + Ąń ąłîäŝ ƒöѓ тħé "move-pane" śцв¢òмmăπδ. !!! !!! !!! !!! {Locked="\"move-pane\""} - Şрé¢îƒỳ ţћĕ ŝιžè àѕ α φèřćěⁿτăĝё ŏƒ тђе φāřéиť φǻⁿё. Vâłΐď νªℓũėś àŕє вέťщèеⁿ (0,1), ëжĉŀŭŝìνе. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Şρέçĩƒỳ ťћё šїźę âš ª φέŕçέлťαġě θƒ ŧħē φǻŕėńť φªηĕ. Vàŀíď νǻłµ℮ś ªřе ъēťώёэŋ (0,1), ē×ĉłϋşĩνė. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Ĉřėǻŧĕ ă ŋéщ τąь !!! ! + Сŕěăтě ă йεŵ тàъ !!! ! - Ăŋ āļιдş ƒǿŕ ţĥέ "new-tab" ŝũв¢ömмăñð. !!! !!! !!! !! + Άп âłìàś ƒбř ţћè "new-tab" šûьĉòmмąйδ. !!! !!! !!! !! {Locked="\"new-tab\""} - Мøνё ƒŏĉűš ŧσ āηóţћéя рăŋĕ !!! !!! ! + Мόνę ƒöčυś τø ăиŏтнëґ φάňę !!! !!! ! - Αñ ªļίàŝ ƒоř ŧђє "focus-pane" šŭвĉömмàήδ. !!! !!! !!! !!! + Дŋ ąľιàš ƒôř ŧħё "focus-pane" śûъĉбmмаʼnđ. !!! !!! !!! !!! {Locked="\"focus-pane\""} - ₣оçμş тнε ρáήе ãτ тђė ğïνеи ϊпðēж !!! !!! !!! + ₣ôςűş ţħέ φâиє дт ťћέ ġίνéи ιņδĕх !!! !!! !!! - Ώрêп ώïţħ ŧнê ġϊνĕи ρřöƒįłę. Áćсεφτś ℮ϊťĥěř ťђê ήámĕ ŏŗ ĠŬĬĎ òƒ ª рŕöƒïĺé !!! !!! !!! !!! !!! !!! !!! + Öφěй щíţħ ťћε ğīνёⁿ φґõƒіĺė. ∆ςćëρťş ēįţнèя тĥě ņάмé бř ĜÛΊĎ ǿƒ ª рŕόƒϊłê !!! !!! !!! !!! !!! !!! !!! - Ċѓзąŧέ å πεẃ ŝрℓîт рâпэ !!! !!! + Ćřεàτę ª пєẃ ŝρℓîŧ ρãйę !!! !!! - Λņ âļіąš ƒоŗ тĥе "split-pane" śϋъсöммаʼnð. !!! !!! !!! !!! + ∆ň àŀîåš ƒоŕ тђе "split-pane" śµвсômmāñδ. !!! !!! !!! !!! {Locked="\"split-pane\""} - €ѓэâť℮ ţĥé ñĕω ρâήé дş ά нôґιžσйŧдŀ şρĺìŧ (ťніήк [-]) !!! !!! !!! !!! !!! + Ċгéåτє ţнė ñĕŵ ρáπė ąš á ħôřїżöñтάľ šрℓϊт (τћíñĸ [-]) !!! !!! !!! !!! !!! - €ґéαťĕ тħę πēẃ ρàлè âš â νêяţĭċāļ śрℓіť (ŧћіŋķ [|]) !!! !!! !!! !!! !!! + Ĉѓέāтė ţнê πёẃ ρäņё āš ā νеřťîĉâľ ŝρŀϊť (τћϊņк [|]) !!! !!! !!! !!! !!! - €яėǻτè ŧнё иэẃ ρªņέ ъў đűρļϊ¢άŧĭηģ ťћĕ φřøƒіℓę ōƒ ţђė ƒøċџśеđ φâπě !!! !!! !!! !!! !!! !!! ! + Ĉřēâťє ŧћê πέŵ φàńε ъў đûρĺϊςάтίńğ ţћε рŕóƒïℓē ôƒ ŧħ℮ ƒôċŭśεδ φâήë !!! !!! !!! !!! !!! !!! ! - Φрĕñ ïη тнě ğίνęņ ðϊřêçтőřŷ ϊπšŧęãđ οƒ тне рябƒїŀε'ŝ śет "startingDirectory" !!! !!! !!! !!! !!! !!! !!! ! + Ŏφēή ĭл τĥé ġΐνэñ đīřĕĉťǿґу îņşţěαð оƒ ŧђе φřōƒΐļė'ŝ ŝ℮ţ "startingDirectory" !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"startingDirectory\""} - Óφзñ τђé ŧзřmίηãĺ щíтћ τћэ ряõνΐďēδ тĩţŀ℮ îήŝτεдď őƒ ŧђę ргóƒīļé'ś śĕŧ "title" !!! !!! !!! !!! !!! !!! !!! !! + Όρεⁿ тћ℮ ťėґmíʼnªĺ ώĩтћ τнé φѓŏνįďèď ŧιťŀ℮ ϊŋşťéāď őƒ тђε рřǿƒĩľë'ş şêţ "title" !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"title\""} - Φрèʼn ťĥė тăъ шіţћ ťĥе ŝρеςĩƒìęð ĉőĺбя, ϊŋ #ŕґĝġвв ƒθѓmāŧ !!! !!! !!! !!! !!! ! + Оρêή ţђë ŧαв ωĩŧћ τћê ŝρēčίƒιęð ćôļóŗ, īη #ггģģвв ƒǿřmåτ !!! !!! !!! !!! !!! ! - Òφ℮л ţнє τąь ώîтħ ţąъТįŧłэ òνëѓѓïδϊήģ ðěƒáųľţ ŧιţļέ ãʼnđ ѕμрφґєśšíñģ ţįтŀё сĥäйğè мéşѕдģέѕ ƒґøм τħè ǻрφĺϊćáτĩőņ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ορĕņ тĥë таь ωįŧђ тăвŤιтłё ον℮ґŕìδĭπġ ďэƒάùľť ţΐŧłę ăⁿď śüφрřĕşšΐʼnğ тíтļè ĉђąиġë měşšąģĕś ƒяőm ţћ℮ ąρφĺΐсаτίöй !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"tabTitle\""} - Íпħěřιţ τђ℮ ŧзгmïπāĺ'ѕ οωⁿ ёйνïŕоňмĕлť νǻŗĩдъŀёś ώĥëʼn ćгěаτίņģ ŧђε ⁿëẁ τäв óѓ ρąηě, ŕàŧħèг ţђăŋ ĉřēãтíňġ ä ƒřεśћ éиνìřσʼnm℮пŧ ъļõċķ. Ŧђíŝ δёƒàúℓτš ťό ѕęţ ẁħèή à "command" ίš φâśš℮ð. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ϊπħěřïт тĥέ ťэґmιŋąℓ'ŝ оẅή ëʼnνīŕőпmєŋτ νâřϊǻьľėś ẁħĕη ċѓĕаťіпğ ţħë ήэщ ťäь όг ρâлë, гáтнэя τћαή ςгęâŧìñġ â ƒřеŝћ єйνιŕőñmĕπŧ ъļõĉķ. Ŧнĩś δёƒàùŀτš ţо ŝéт ωћ℮π ª "command" ιŝ ράşśеđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"command\""} - Ωρзп ťђě τªв ẁïтħ тĥз śрèčįƒίέď ćõļőґ ŝćĥèmз, ΐпѕтėąδ øƒ ťħэ φřбƒіľę'ş ŝєţ "colorScheme" !!! !!! !!! !!! !!! !!! !!! !!! !! + Ωрêй тħĕ ťάв ώїτħ τĥë şφěςíƒįеď сòŀõŗ ѕĉнзmе, їŋšτέåđ őƒ ŧħέ ρѓбƒîłε'ŝ ѕęŧ "colorScheme" !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"colorScheme\""} - Ďĩşρŀãу τħε áррℓíćαтïöй νēŗśιóή !!! !!! !!! + Ďĩѕρłăγ ťне äφρļϊćąτìôñ νęŕѕïǿⁿ !!! !!! !!! - Ŀąϋńçħ ţћэ ωĩиďŏŵ mахîmϊźέđ !!! !!! !! + Ŀâύйĉħ ťнє ẅїñðõẃ мª×ĩмĭżэď !!! !!! !! - £āμη¢ĥ ťђë щìńδőẃ ĭŋ ƒūłŀś¢ґззπ мŏδё !!! !!! !!! ! + Ŀãűисћ тнё ωįлδøẃ ĩʼn ƒůłℓś¢гεέи mбðє !!! !!! !!! ! - Мòνě ƒōċųš τō тћę āđĵāčęⁿτ рдŋě ïņ ţћέ şρєĉįƒìēð ďїѓэçťïõπ !!! !!! !!! !!! !!! !! + Μöνě ƒǿćųś ţø ťђе ǻðјå¢℮йт φąήë іπ ťћė ѕρėćїƒіεď đϊřеċтîóñ !!! !!! !!! !!! !!! !! - Åи ãłīåš ƒõґ ţĥз "move-focus" şµвςŏмmаŋď. !!! !!! !!! !!! + Ǻπ ªℓïǻŝ ƒόŕ ţĥз "move-focus" ŝűъčοмmάπδ. !!! !!! !!! !!! {Locked="\"move-focus\""} - Ťћê ďířёċťìõʼn τõ мòνė ƒøĉúš īή !!! !!! !!! + Тнė ďίѓèċţϊōň ťö мøνè ƒθсųş ίή !!! !!! !!! - Şẁãр ťĥě ƒо¢ùŝéδ φăи℮ ŵιτħ ţħė ąđјăсéňτ рăлė ιñ тћė šφεсïƒì℮ď ďїґ℮ćτíŏņ !!! !!! !!! !!! !!! !!! !!! + Šẅаφ τћë ƒŏçŭšėđ ρąήè ώĭŧħ ŧĥē аďјā¢ēйτ рǻńë ĩп ţħε ѕφĕĉĩƒīēď đîŕэċŧїòň !!! !!! !!! !!! !!! !!! !!! - Ŧђ℮ δìřęçťîôπ тõ мõνз τнĕ ƒőčűѕ℮ð φãήĕ ïп !!! !!! !!! !!! + Ŧħε ďΐřéċтїŏй τö mθνĕ τћέ ƒőćυѕзđ рàиĕ ĩń !!! !!! !!! !!! - Ļάųи¢ħ ťĥē ẅιñďσẁ ιñ ƒŏςũş môďē !!! !!! !!! + Ŀаµп¢ђ ťћė шϊⁿδǿẃ íй ƒôćûş мöđē !!! !!! !!! - Ŧħíš рαŗāмêτēг īŝ âʼn ιиŧēŗπåļ ιмφĺєmęņтάтìöл δєтάįĺ άиð ѕĥσυĺδ иõт ъе µš℮đ. !!! !!! !!! !!! !!! !!! !!! ! + Ŧħιš рáгàмĕтêŗ ϊŝ άń íηŧєŕŋάĺ ϊmφľémёńтăţíőń đęтàĭļ диď šнθυłď ήøŧ ъ℮ ùśєđ. !!! !!! !!! !!! !!! !!! !!! ! - Śрëċΐƒÿ á ŧęŗмĩήαľ щίňđбŵ τö гύη тħέ ĝΐνęņ соmmāπδĺïиê ιň. "0" áļωåÿś ѓэƒзгś ţö тђĕ çϋггéńť щïⁿðбш. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ѕφêċīƒŷ ą ţěřmΐñåľ ŵϊňðбω ŧб řūл ŧħе ğίνéη çômмâηδłîʼnē įπ. "0" дľẃäŷѕ ґėƒëŗś тό ŧħè ćŭгяëπŧ ŵĭńðōω. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ŝρêсіƒŷ τћє рσѕїťїŏй ƒõř тħ℮ тéґміŋаľ, ìη "х,ÿ" ƒõямăŧ. !!! !!! !!! !!! !!! ! + Śφ℮сίƒу ţħè ρóşΐťιöʼn ƒōŗ ŧђε тёŕmĩʼnªŀ, ìń "×,ý" ƒõŗмāт. !!! !!! !!! !!! !!! ! - Şрэçĩƒý τћê иϋмьēř ǿƒ ĉσℓцмπѕ âⁿð гõẁŝ ƒøř ŧђє τэґmíňāļ, ΐл "ς,ґ" ƒόямąŧ. !!! !!! !!! !!! !!! !!! !!! + Śρěćϊƒÿ ťħє ŋџmьēŗ оƒ сοłůмʼnś аʼnď яóẁѕ ƒõя ŧĥе тεřмίⁿǻĺ, įη "с,ř" ƒöгмáŧ. !!! !!! !!! !!! !!! !!! !!! - Ρѓęśş тђέ ьϋţťóʼn ŧò бρэʼn ά йзш ťéŗmіñаł τάь ώĩτн ỳôűř đꃪúľť рřбƒіℓε. Òрęň тћě ƒľγøŭţ τö šëłëсţ ώнì¢ћ ρŗθƒїℓě ўøμ ŵªпт тθ оφёň. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + Ρґëšş ţђê вúţтôʼn ţó ǿφеʼn а ňêŵ ťĕямιπаℓ ţав шĭţĥ уòůŕ đэƒäџℓť ρґöƒιŀě. Ôρēη ťнє ƒĺỳöϋŧ τо śеłęčτ ŵћΐĉћ ρřöƒϊļė уōů ẃåņт ťö θрêⁿ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - Ņёш Ţǻв !! + Ňещ Ŧăь !! - Θφęň ã πεŵ ťãъ !!! ! + Öрзи д пéẁ ţαъ !!! ! - Ǻŀť+€ľĩćќ ťø ŝφļįť ťħě čϋгŕєпŧ ώίńđøω !!! !!! !!! !! + Åĺţ+Ĉŀïćκ ťó şρľïτ τħĕ čũгŗëŋŧ ŵīηďøẅ !!! !!! !!! !! - Şнìƒτ+Ĉℓіćķ ťő оφéл á ñêώ щįηðŏẃ !!! !!! !!! + Šнĩƒт+Çℓιĉĸ ţø ŏрεη α πέẃ шīήðõẃ !!! !!! !!! - Çŧŗł+Сĺі¢ќ ŧö øρ℮η ąŝ ăđмìйĩśťѓāţσř !!! !!! !!! ! + Ćтѓℓ+Сℓї¢κ тó σρёп ąŝ ªđмιйіşŧŗаŧοѓ !!! !!! !!! ! - €ℓоšė ! + Çĺøś℮ ! - Ĉłοŝé ! + €ĺοşé ! - Čŀōѕз ! + Ċľõѕě ! - Мä×ϊмîžę !! + Μάжįмîżę !! - Мϊŋímīźε !! + Μíиímĩżé !! - Мĭʼnĭmįžě !! + Μĭиімĩż℮ !! - Μΐňîmΐżе !! + Μĭńįмĩź℮ !! - ∆вőũť ! + Àвōŭţ ! - Ŝеňð ₣зéďвǻçĸ !!! + Ś℮пđ ₣зèδъàćќ !!! - ŐК + ΏĶ - Vëѓśίöη: !! + Vзŗšįоⁿ: !! This is the heading for a version number label - Ģеţŧіñģ Ŝťäгт℮ď !!! ! + Ģêťŧΐňĝ Šţàřтëð !!! ! A hyperlink name for a guide on how to get started using Terminal - Şоùяčе Сòδë !!! + Ŝσϋřćę Ĉòďė !!! A hyperlink name for the Terminal's documentation - Ďθ¢µméńŧâτĭοņ !!! + Ðσčûmейŧąţîǿη !!! A hyperlink name for user documentation - Řëŀэǻŝэ ∏ōŧèş !!! + Ґεℓ℮âѕє Ńōτэš !!! A hyperlink name for the Terminal's release notes - Ρѓίνąсỳ Роℓїςу !!! ! + Ρяίνäсу Рθļĩ¢у !!! ! A hyperlink name for the Terminal's privacy policy - Ťĥιŗđ-Ρдгţỳ Ņóτíс℮ŝ !!! !!! + Ťнΐяð-Ραяţу Йōŧîĉеŝ !!! !!! A hyperlink name for the Terminal's third-party notices - Çāñċёŀ ! + €ªňćêļ ! - Çłοśе άℓľ !!! + Ċľöŝē áłŀ !!! - Ďσ ýŏú ώǻňť ţο ĉłøѕз ǻĺĺ шіπδöщş? !!! !!! !!! + Ðǿ уǿú ẃǻлŧ ţō çŀθѕє ǻľĺ ẁĩⁿďőώŝ? !!! !!! !!! - Čāи¢ēĺ ! + Ċªñсεļ ! - Ćľθşе ąŀŀ !!! + Ĉľōѕε ãļℓ !!! - Ďø ýθµ ώαņт τø čłōşз άłℓ τăвѕ? !!! !!! !!! + Ďό γσџ ẅǻńτ ŧο сĺòśè āľŀ тäьŝ? !!! !!! !!! - Ĉαήçĕľ ! + Сāйсéľ ! - Ĉļòşę аηÿŵãÿ !!! + Çļøśé áņỳщăŷ !!! - Ẁªґпιńğ !! + Ẁαяήîʼnĝ !! - Ϋθџ ǻřё авøųт ţő ¢ľõşě ã ŗēăδ-σňľỳ ţέѓmίлàľ. Ďō ўøū шĭşђ ŧθ čòлτíʼnŭė? !!! !!! !!! !!! !!! !!! !!! + Ύõŭ àŗё āьǿŭτ ţθ çŀôşĕ â ґèαđ-õŋłÿ ťěŗмįņаľ. Đò ýбų ẁίŝħ ţŏ čôñτΐйџê? !!! !!! !!! !!! !!! !!! !!! - Ćáñćзľ ! + Ćăņçëľ ! - Ўθů αŗē аьσùт тô рǻšţé ť℮жτ тћåτ îѕ ℓöήĝєř ťндņ 5 КîБ. Ðō ýбũ ẁĭѕħ ţθ ¢óņťíņŭě? !!! !!! !!! !!! !!! !!! !!! !!! + Ύõµ ąѓê åъоϋţ ŧø ρдşŧĕ ţę×ţ ťђáτ ίş łǿлģ℮ѓ ţнăń 5 ЌїБ. Đō ÿőų ẃĩśћ тō ¢όⁿťΐлůз? !!! !!! !!! !!! !!! !!! !!! !!! - Ρáşťε ǻиÿщáỳ !!! + Раŝтε ãńỳщāу !!! - Шãŕŋĭⁿġ !! + Ẅǻŗήĭňĝ !! - Сàñčéŀ ! + Ĉąŋćėĺ ! - ¥οµ ǻřé āвöüţ тό φāŝťě тěхт τђâť ¢øŋťăīиš mµŀťΐρŀέ ĺìñèѕ. ΃ γоŭ рăśťэ ţнìś ţĕжτ ιʼnτǿ γοџѓ şђэℓŀ, ΐť мαý яέśųľт ΐй ŧђз ūηë×φĕçтĕδ зж℮ćϋţīøй öƒ ćòмmăйďš. Đø ýôΰ ŵĩѕђ ťσ ¢οήťĭņüë? !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + Ўоυ àяє āьôυť ţŏ ρăŝтè тежţ τђãτ čǿŋтдĩηś mцŀŧĩрℓě łìʼnėš. ΃ ýσц ρǻŝтê τђίś τě×τ ìηťŏ ỳσůґ śћēļŀ, íт мäŷ гëśцℓт îň тћё ųпèхφєсτєδ ė×êćџтίőņ бƒ сøмmąлđŝ. Ðò ỳǿџ щīŝћ ťö ¢óńŧĭиџě? !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - Рάѕτě ăπýшãў !!! + Рдşťë άñỳŵåŷ !!! - Ẃâгиĭήģ !! + Ẃąŗпĭʼnġ !! - Τÿφę å ċòmmдňδ ήάm℮... !!! !!! + Ťÿрε ǻ сõmмǻлδ лàме... !!! !!! - Лó mąŧċħΐʼnğ ćοmmāиδѕ !!! !!! + Пō мάŧ¢ĥιпģ ĉőммάлδš !!! !!! - À¢тïøй ѕéâяćћ мǿďė !!! !! + ∆сτîõņ š℮αŗčħ mõðэ !!! !! This text will be read aloud using assistive technologies when the command palette switches into action (command search) mode. - Ţдв тĩţℓė мбðě !!! ! + Ťаь тíťĺê mθďе !!! ! This text will be read aloud using assistive technologies when the command palette switches into a mode that filters tab names. - €òmмаʼnđ-ļΐήё mбđĕ !!! !! + Сòмmªπď-ℓìņê mǿđē !!! !! This text will be read aloud using assistive technologies when the command palette switches into the raw commandline parsing mode. - Мοŕε ŏφţîοŋś ƒθŕ "{}" !!! !!! + Мòŕε õρτίǿήѕ ƒŏґ "{}" !!! !!! This text will be read aloud using assistive technologies when the user selects a command that has additional options. The {} will be expanded to the name of the command containing more options. - Έхęсûţïñġ сбmmåńð ℓїʼnє ŵϊľļ іпνǿќ℮ тнє ƒōłļøẃīйģ ςöмmдņđŝ: !!! !!! !!! !!! !!! !! + Έжĕćũţіпġ çǿмmаńđ ŀîπè ώíļļ íлνōķě ťћз ƒőłłǿщίήğ ĉθмmäňðś: !!! !!! !!! !!! !!! !! Will be followed by a list of strings describing parsed commands - ₣àįĺэđ φàŕšîπĝ сθмmаиδ ℓίйė: !!! !!! !! + ₣ąĩľĕď рàŗśìπğ ¢бmмаπδ ℓιńє: !!! !!! !! - Čõмmąήď Ρâŀзτтε !!! ! + Ċǿмmāňδ Ρäℓέτťę !!! ! - Ťǻь Ŝώїťčћëя !!! + Тáъ Ѕẁĭŧ¢ħĕř !!! - Ţуφе α ŧãъ лāмэ... !!! !! + Τŷρė à ţãъ ńаmё... !!! !! - Ñŏ мāт¢нійġ τǻв лǻmë !!! !!! + Ŋο mãτ¢ħįпģ ŧдв ŋámë !!! !!! - Ëŋŧέґ ā wt ċöмmªńδłíηё ŧо гŭⁿ !!! !!! !!! + Ēητėя α wt ćōмmάпđłįήę ŧô ŗúŋ !!! !!! !!! {Locked="wt"} - Мõřĕ οφťĩόňś ƒòѓ "{}" !!! !!! + Мθґέ орŧîõиŝ ƒøř "{}" !!! !!! This text will be read aloud using assistive technologies when the user selects a command that has additional options. The {} will be expanded to the name of the command containing more options. - Ťŷφэ д çōммâⁿδ ńàмέ... !!! !!! + Тŷφє à ςόммãņð ñāмė... !!! !!! - ∏ŏ мдťçħīŋğ ςõмmăиδş !!! !!! + Ñǿ mäŧčћіиğ соmмªŋďŝ !!! !!! - Ŝūğģєŝтΐόйś мέⁿυ !!! ! + Ѕµğğêŝţïöήš мзиū !!! ! - Μǿѓэ òφţíǿиѕ !!! + Мбяё òрţϊõňş !!! - Ŝúģĝеŝţíθⁿŝ ƒσųйď: {0} !!! !!! + Śμġģëѕτϊǿňš ƒσϋⁿď: {0} !!! !!! {0} will be replaced with a number. - Ċŕīmѕοη !! + Ċŗΐmşǿπ !! - Şŧэéł ßļüę !!! + Ŝτеêľ Вŀüĕ !!! - Мêδιџм Şєǻ Ğяě℮ņ !!! ! + Мέďîųm Ŝéª Ĝŗεзп !!! ! - Đäřќ Όŕāŋģе !!! + Đдгκ Οґâήĝë !!! - Мėδϊùm Vїόℓєť Яеď !!! !! + Мėðįΰm Vïøľέţ Ŗěð !!! !! - Ďбđġęř ßĺυё !!! + Đбδģĕя Ъłūě !!! - ₤ϊмē Ġŗэзⁿ !!! + ₤îмè Ģґéëη !!! - Ýèŀłσẁ ! + ¥еĺľόш ! - βŀυě Vìøľеŧ !!! + Ъℓцê Vĩöŀěτ !!! - Şŀãтę Ъľųё !!! + Ѕŀάťê Ъŀυé !!! - £ϊmε ! + Ľίмё ! - Τàň + Ťāʼn - Мāğęήтâ !! + Мαġęпτă !! - Çỳàň ! + Ćγąή ! - Şκў βľµĕ !! + Ѕку ßļυ℮ !! - Ďªřķ Ğѓάŷ !!! + Ďářк Ĝгāу !!! - Тћїŝ łїńк îš ïⁿνάľïð: !!! !!! + Ţђíš ℓιпĸ іŝ ΐиνªĺίδ: !!! !!! - Ťђїś ĺίпĸ ťýφє іš čΰŕřěлŧľу ŋόŧ şũрρθґτэð: !!! !!! !!! !!! + Ŧĥіś ĺĩпќ тỳφэ ϊš čџяѓёиŧŀỳ πøţ šũρρōŕťэď: !!! !!! !!! !!! - Сαпсêŀ ! + Čǻŋ¢έł ! - Śěтŧΐπģş !! + Śéтţīйġŝ !! - Ẁ℮ сǿµŀδ ибť ẁŕìŧ℮ ţō ýǿύř šёťťίήģš ƒϊĺе. Сĥέçќ τнē р℮řmîşşιолš οи τђàŧ ƒĭĺè ţο εńŝũяĕ тнåŧ ŧħэ гêáð-бⁿļÿ ƒľąĝ ĩş ņøť ŝëτ âπď тħàť ẃѓįţę äсćėŝŝ íš ģяάлτêð. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Ŵэ ĉøűļδ πōτ ẅяìťė ťõ ўоūŕ ŝěŧţĩηġš ƒΐĺĕ. Çћěςк τћε φĕŗmìѕšιőʼnѕ øл ťћāт ƒïŀĕ ŧò єŋśџѓз ŧндţ τћè řęàđ-όŋľγ ƒłàģ їš ñσŧ śĕт ãπð тћâτ ŵяιťę āč¢ěśѕ ΐş ĝяāⁿţêđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Бãçķ ! + Бåсκ ! - Βäċк ! + Βåск ! - ŎЌ + ΏΚ - Ďёъμğ ! + Ðєьùğ ! - Еřřôґ ! + Éѓяσř ! - Ĭйƒòгmäтїοп !!! + Íŋƒσгmаτіθŋ !!! - Ŵàŕήįπğ !! + Ẅąѓŋιņĝ !! - Çĺіφъσдґð ςŏňŧ℮ήŧş (рřêνїэẁ): !!! !!! !!! + Ćĺίφвõάгď ćǿπтєπτş (φřêνїέω): !!! !!! !!! - Мǿřë σрŧіõñŝ !!! + Мóřė ôрťίōήś !!! - Ŵΐпðοŵ ! + Ẁιлδõẃ ! This is displayed as a label for a number, like "Window: 10" - ûñήåmêď ẁιηđőώ !!! ! + μńηаméð шїñδόщ !!! ! text used to identify when a window hasn't been assigned a name by the user - Элţêř à пёẅ ήåмě: !!! !! + Ěпŧěŕ ª ŋėẁ ηàmè: !!! !! - ǾЌ + ŎЌ - Ĉāⁿčėĺ ! + Сàπçёļ ! - ₣дĭļеđ тő řēŋâмэ ŵìʼnδòώ !!! !!! + ₣âΐļěð ťθ řэπамè ẃíлðоώ !!! !!! - Åлŏţћεґ ẅïлďбω ωїťн тћåŧ лªmέ åŀѓέäđÿ ε×ιšŧş !!! !!! !!! !!! ! + Ăлóŧћėґ щίňđοŵ ώίţн ťћдτ ήåме äļřёǻδŷ ęхіşţş !!! !!! !!! !!! ! - Мà×ΐmϊžз !! + Мàхιmįżє !! - Ŕёśтŏřė Ďоωл !!! + Ґέşτοřę Đόẅň !!! - Ĉŏmmàпδ Рàľéŧтє !!! ! + Ċоmmäňδ Рâĺеŧţз !!! ! - ₣öċūş Тēŗмīʼnåł !!! ! + ₣σċΰš Ţэŗмįņаĺ !!! ! This is displayed as a label for the context menu item that focuses the terminal. - Ẅϊŋδøщѕ !! + Ŵΐŋđσẃš !! This is displayed as a label for the context menu item that holds the submenu of available windows. - Ôрëй д ņĕώ тăъ îл ĝĩν℮п ŝţаŕтΐлġ đìгëĉτбŗў !!! !!! !!! !!! + Θрēŋ д ŋėẁ ţǻв íπ ģίνзл ѕтάřтіηğ δϊřėĉţοŗŷ !!! !!! !!! !!! - Õφęπ а ńèώ ŵīņðόẁ ŵìτĥ ğїνêⁿ šťªřŧιлğ ðìřéċťθřў !!! !!! !!! !!! !! + Õρεņ ª ňēŵ ωĩńđôщ ẁΐŧђ ĝíνзή ŝŧáґτϊⁿĝ ďîѓėςťőґý !!! !!! !!! !!! !! - Šрłίŧ ŧђė ẁíňđοώ ăйδ şţαřŧ ιŋ ĝīνėη ďιгёстōяў !!! !!! !!! !!! ! + Şφłĭт тнë ώīñðőŵ ªпδ ŝţаŕŧ ĩñ ĝíνел δίŕê¢ŧбŗý !!! !!! !!! !!! ! - Ęжφθґŧ Ŧεхτ !!! + Ěхρŏяť Ťэжţ !!! - ₣ªіłєđ ťø èжρóřŧ тĕямΐʼnãļ čóлťεπт !!! !!! !!! + ₣àΐĺėδ тб эжφǿѓт ţěгмìήāĺ ¢θňŧēņţ !!! !!! !!! - Śůĉčěşşƒцℓĺγ ехρõřŧёð ŧéѓміπăļ сσήтзηт !!! !!! !!! !! + Šΰç¢ēśśƒűŀļý ε×ρоѓтеď тεямĭηåℓ ¢øʼnŧēŋţ !!! !!! !!! !! - ₣ìπδ ! + ₣ìňď ! - Рļάįñ Τĕхт !!! + Рℓǻïⁿ Τęжţ !!! - Ţзřмїпäţΐоŋ вэħανĭõѓ çāⁿ вз соňƒįġμѓёδ ïŋ ǻđνąйсėð ρґθƒїļě şёŧťіņĝš. !!! !!! !!! !!! !!! !!! !! - - - Ŵįņďŏẃŝ Ťëřмįňàℓ ¢ąʼn ъė ś℮τ άŝ тħє ďęƒáυłţ ţėямīйäł àррłĭсåτΐоń їл уθüя şέţтίʼnģš. !!! !!! !!! !!! !!! !!! !!! !!! + Τêŗмίⁿàťïöń ъёĥǻνіόг сдπ ъ℮ čθπƒĩĝüŕеď ĩñ âðνªňč℮đ φѓòƒìĺę šεţţïπğš. !!! !!! !!! !!! !!! !!! !! - Ðθń'ť šнöẁ áġαĭл !!! ! + Đǿʼn'ţ śĥőŵ ãģάΐń !!! ! - Тĥіѕ Ťėŕмілāĺ шіηďθщ íš гūŋʼnįйĝ äś Àďmіⁿ !!! !!! !!! !!! - - - Ορēй Ŝęтţĩňĝś !!! - This is a call-to-action hyperlink; it will open the settings. + Τћìŝ Ŧэґmїńâļ ẁïπđōŵ įš řüлñιņġ ăş ∆ðmîň !!! !!! !!! !!! - Şυġğēśτįōηś ƒôüлđ: {0} !!! !!! + Ŝцĝġеşŧіǿⁿѕ ƒōύйđ: {0} !!! !!! {0} will be replaced with a number. - Čћєćĸîлģ ƒоŗ υφđàţеş... !!! !!! + €ћëςĸįńĝ ƒǿř ûρðăтéš... !!! !!! - Αή ΰрδäŧē їś åνдΐļáьľэ. !!! !!! + Àń ŭрďáŧέ īš ãνãїľдъļé. !!! !!! - Ϊņŝŧάľľ ňòш !!! + Îήѕťªĺℓ йøω !!! - Τнз "newTabMenu" ƒιεłð ςòπтàĩйş моřę тĥăⁿ ǿňě эŋťřў ōƒ ţўρз "remainingProfiles". Øπŀý ŧнέ ƒίřşť οņě щįŀℓ ъě ςóņśίđєѓĕð. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Τће "newTabMenu" ƒįєŀð çōиŧάíňѕ мοяё ŧħãʼn θπĕ ĕπτѓý òƒ τÿρē "remainingProfiles". Ωйℓу ŧђè ƒϊѓşť øⁿе ẁιľľ ъё ¢ŏлѕįδèѓęď. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="newTabMenu"} {Locked="remainingProfiles"} - Ťĥз "__content" ρřǿреŕτý îş ѓеѕεŕνëđ ƒǿя īⁿтзřňάļ üѕè !!! !!! !!! !!! !!! + Ŧĥę "__content" рřǿрёřтŷ ιѕ гéŝēяνеď ƒоѓ ιńτëŕидĺ ũśэ !!! !!! !!! !!! !!! {Locked="__content"} - Õρêń ά đїάĺŏġ ċóηтàιņíηġ φѓôđμςτ ĩŋƒбгмåţįŏй !!! !!! !!! !!! ! + Õрęп α δίªĺōğ čøńťąιйіиġ ρгôδúĉτ ĩʼnƒōґмаŧіóń !!! !!! !!! !!! ! - Ǿрèň тћё сōℓσŕ ρîçκèŗ ţò сђôōśє τћέ ¢ǿŀõѓ οƒ ŧнίş тáь !!! !!! !!! !!! !!! + Οрёň ťħэ ćοłōř рĭ¢ĸєŕ ťő čнθόŝé тђě čоłοѓ ôƒ тћίš ταъ !!! !!! !!! !!! !!! - Ωρєй тћé ĉθмmãņđ ρąĺэţťĕ !!! !!! ! + Ωрěп тћέ çōммалδ φāĺĕттз !!! !!! ! - Ôφзи ă ήзщ ŧăв ΰŝīňğ τђè āċтìνĕ рŗбƒĭľ℮ ΐл τн℮ ¢üŗŗєπт ďίřëсťŏŕý !!! !!! !!! !!! !!! !!! ! + Ώρєπ ä ʼnĕω ťåъ цѕΐʼnġ τĥė аċťĩνε рřθƒįŀ℮ ìŋ тħё ςűгřэиţ δíязçтøŗў !!! !!! !!! !!! !!! !!! ! - ∑жφòŗτ τħз сóлťейτŝ őƒ τђē тěם ъųƒƒέř ĩʼnťŏ ä ŧехτ ƒïℓē !!! !!! !!! !!! !!! ! + Зхρøгτ ťнę ¢ǿŋт℮ňţş бƒ ŧне ŧė×ţ ьůƒƒĕŗ ĩлţő ä тэ×ţ ƒіℓê !!! !!! !!! !!! !!! ! - Ωφэл ŧће šęáяςћ δϊдĺöģ !!! !!! + Ôрēň тћє şеªŗсħ ðįãℓòġ !!! !!! - Řêʼnåmе ŧћіŝ тαв !!! ! + Ѓεńǻмë τнìѕ ŧâъ !!! ! - Оφėп τħέ ş℮ţтίňġѕ ρаğε !!! !!! + Όφéп ťћέ śěττîŋġś рåģē !!! !!! - Φρел д ńěщ φаŋε űŝĭйğ ŧнë ąčťīνз рґôƒîℓё ĩл ŧĥé ĉϋŗгěńţ đīřĕĉţòяÿ !!! !!! !!! !!! !!! !!! ! + Ōφĕη ă лěщ φàʼnё üšīпģ тħэ àĉτîνз ρгοƒιŀ℮ îŋ τħё ċùгřĕñτ ðīřěćţбŗу !!! !!! !!! !!! !!! !!! ! - €ℓôŝê ªłℓ ťâъš тô ţђэ яîġђт õƒ ťнįş ťǻъ !!! !!! !!! !!! + Çłōśе ąłŀ тąьŝ тó тћé ŗīĝĥт ôƒ ŧђįś ťâь !!! !!! !!! !!! - Çľőŝë åłℓ ťдьş ĕж¢еφţ ŧнϊš τâв !!! !!! !!! + Сľбśé ãĺĺ тåвŝ ёхĉëφŧ тħΐş тǻв !!! !!! !!! - Сľθѕě ťнιş τāв !!! ! + Čłόšé ŧħϊŝ τάъ !!! ! - Ємρţγ... !! + Éмρтÿ... !! - Сłοŝ℮ Рãʼnė !!! + Ċłóşę Ρдņë !!! - Ĉℓõšë τħë åςтîνє рαʼnē įƒ múĺťîφĺе раņέš àгε ρѓęšèńŧ !!! !!! !!! !!! !!! + Сŀθşë ŧħє äċťïνз рąήз ιƒ mΰľťϊφļε рãήёś αгє ргęŝέпŧ !!! !!! !!! !!! !!! - Яëŝзт τāв ĉоľбř !!! ! + Ґεšεт ťаъ ćöľòŕ !!! ! Text used to identify the reset button - Мθνé Τąь ŧö Ňĕẃ Ẅïπðǿẃ !!! !!! + Μονê Ťǻв ţô Иéẅ Ŵìʼnđŏώ !!! !!! - Μǿνέś тáв ţø ά лєш ωįňđǿш !!! !!! ! + Мбνеѕ тåь ťо ä лěẃ ẃιņðóώ !!! !!! ! - Ŗŭл дś Аδmΐπíšτŕáţσř !!! !!! + Ŕцⁿ ãѕ Àδмιⁿíŝтřăţθя !!! !!! This text is displayed on context menu for profile entries in add new tab button. - Δстĭνé рàηз мōν℮ď ŧő "{0}" тąь !!! !!! !!! + Дсτϊνē рдйë mŏνεđ ţö "{0}" тǻъ !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the tab the pane was moved to. - "{0}" ŧáъ môνëδ ŧǿ "{1}" ωìñďόŵ !!! !!! !!! + "{0}" ţąъ моνеð ťο "{1}" ώіňďõω !!! !!! !!! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. {1} is the name of the window the tab was moved to. - "{0}" ŧάъ môνėð ŧο ŋēш ωĭⁿđбẅ !!! !!! !!! + "{0}" ŧäь мőνзđ ŧõ ñěщ ẁιňďòш !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. - "{0}" τаъ mòν℮đ τό ρŏśîťїой "{1}" !!! !!! !!! + "{0}" ťаъ mõνеđ ŧб φόśĩťίθп "{1}" !!! !!! !!! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. {1} is the new tab index in the tab row. - Ąĉťіνę ράñę møνěδ ŧó "{0}" ţǻь ϊⁿ "{1}" ώĭņďòω !!! !!! !!! !!! ! + ∆ćŧινë ρáлě мбνęđ тθ "{0}" ťăв ĩπ "{1}" ẃΐπđõщ !!! !!! !!! !!! ! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the tab the pane was moved to. {1} is the name of the window the pane was moved to. Replaced in 1.19 by TerminalPage_PaneMovedAnnouncement_ExistingWindow2 - Δ¢ţĩνê φāηє mōνēδ ŧø "{0}" ώϊиďőŵ !!! !!! !!! + Λçťìνę ρǻñе моνéď ţò "{0}" щĭŋδõш !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the window the pane was moved to. - Äçťĩνê рàηę mбνėδ τо ήęẅ ώíⁿđőώ !!! !!! !!! + Á¢ŧìνě ρãńè möνēđ ťó ʼnèẅ ώιňδõẅ !!! !!! !!! This text is read out by screen readers upon a successful pane movement to a new window. - А¢ťίνе φªʼné mǿνĕđ τŏ ñęώ ţªь !!! !!! !! + Αςтïνέ рάйз mōνëď ťб ňėẃ ŧаь !!! !!! !! This text is read out by screen readers upon a successful pane movement to a new tab within the existing window. - ݃ şèŧ, τĥэ čǿмmαňδ шιłł ь℮ åрρêпđεď ťö ťђе рґōƒίļε'ś đ胪ύℓŧ ĉόmmāńð ìŋšťëăđ őƒ ѓęφĺã¢ìлġ їτ. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Īƒ śэť, ţħĕ čоmмăήď ẁįŀļ ве ªрρєπδёð ŧō ŧћę ρřõƒīŀє'ѕ ďεƒåμℓτ ¢ǿmmάňď ιηśтēąď õƒ řéφĺāĉΐⁿġ īţ. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Ґэѕţăґţ €ŏňйĕ¢ŧίŏň !!! !! + Γèѕťāřţ €οллзčţïσπ !!! !! - Яèśŧªяŧ τћє âćτĩνε рäиē сόηήё¢τĭóи !!! !!! !!! ! + Яēśťâŗт ťћз áċтΐνę рǻń℮ сøⁿηėčťϊôή !!! !!! !!! ! \ No newline at end of file diff --git a/src/cascadia/TerminalApp/Resources/qps-plocm/Resources.resw b/src/cascadia/TerminalApp/Resources/qps-plocm/Resources.resw index 4a269ba1f5f..13302a27a5c 100644 --- a/src/cascadia/TerminalApp/Resources/qps-plocm/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/qps-plocm/Resources.resw @@ -118,148 +118,148 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Ѕеτťϊńģś сőúľδ ʼnǿŧ ъę ľоâðέð ƒґŏм ƒìŀè. Ċћêċк ƒőŕ ѕỳńŧà× ℮ґґôŗŝ, ΐпсŀúďīйĝ ţřάіĺΐлġ ćоmмåš. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Śěţťĩπĝš čǿùĺδ пθť ьє ℓбãđėð ƒŕθм ƒίłє. Ĉнέ¢ķ ƒòŕ šÿńťá× ℮ŕřõřŝ, їηćľúδїⁿğ ťřªíļϊпġ ςømмаś. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ċŏµĺđ ŋǿţ ƒϊпð ÿθųя ďэƒдΰľτ рřøƒìľė іπ γøũŗ ĺïšť öƒ рŕőƒіļéš - ŭşĭπğ ţћĕ ƒïŗšτ φřбƒіŀę. Ĉĥêçк ŧό мáќέ ŝμѓэ ťђê "defaultProfile" mãŧсĥέš ŧнę ĜŬĮÐ оƒ ŏпē õƒ ỳøцŗ φґθƒìļεś. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ćòџℓð лθт ƒĩήδ ỳôùř ðеƒăųłŧ φřőƒĩℓ℮ ïή ýŏúя ĺìѕţ οƒ рґοƒΐĺεś - ũŝΐпġ ťнё ƒίґşт ρŕбƒĩℓε. Сђэčќ ţθ мąκε şυřě тнё "defaultProfile" мαţĉĥéŝ ţнĕ ĠŮİĎ ôƒ öпė öƒ ŷŏΰŕ ρŕõƒΐĺêş. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"defaultProfile\""} - ₣оüñđ мΰļťìφłε ρѓőƒíŀéѕ шîтн τĥє śămë ĞŬÍÐ įņ уōΰř ş℮ţţįņĝŝ ƒΐŀέ - ĩģηöяіŋģ ðυρĺĩ¢ãťèѕ. Μáĸе šūřę êãċћ ряőƒïļе'ŝ ĞÛĮĐ іѕ üñіqűė. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + ₣ōûńď мцľтϊρļè рřõƒιļέŝ шίťħ ťнé śámē ĞÚĮÐ ΐπ уōůř ŝέтŧìňĝš ƒïℓε - ïġʼnǿŗìήģ ðϋφľϊςãτēŝ. Мαķĕ śùѓэ ēǻ¢ĥ φŗōƒїℓę'ś ĜЏЇĐ ιş üηϊqúě. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - ₣öµŋď á ρřõƒΐŀε ωīτĥ āή ϊйνάľΐđ "colorScheme". Ď℮ƒàμŀτΐņğ тћªτ ρŗŏƒĩŀз τŏ тĥę ďёƒãűłт сσłǿŕş. Μдкě šμѓě тĥдţ ẅĥęň šėťтĭπģ ǻ "colorScheme", ťђê νâĺцė māţċħêş ţћэ "name" ŏƒ ã çοŀŏŕ ѕĉћëмз ìñ ţĥё "schemes" łïѕť. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + ₣όϋήð ă рѓόƒïłё ẃìτĥ дŋ ìпνáļїδ "colorScheme". Ďεƒαµļţïʼnğ ťћäť ряόƒіĺë тσ тĥέ δêƒαųŀŧ ¢ôļòřŝ. Μǻκэ ѕůяέ τĥдτ ώн℮ň şэττĭπģ à "colorScheme", тђё νãĺυĕ мāтćћэś ŧћэ "name" õƒ á çöĺόя ѕćнêмε ιπ тћё "schemes" ľĩşť. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"colorScheme\"","\"name\"","\"schemes\""} - Ио ρŕθƒϊℓêŝ шзяę ƒøűлð ĩπ ỳôűŕ şēţŧĩʼnġѕ. !!! !!! !!! !!! + Йθ рѓŏƒįℓëś шëřэ ƒοųπδ īπ уσυŗ ѕēтťιⁿġѕ. !!! !!! !!! !!! - Äłľ φґοƒìŀęš шèґέ ђιðđéή їʼn ўθμя ŝеťтĭňĝś. Ϋǿú мųşť ђãνé àт łêαśť σлĕ ŋόп-ћïďďēń ρґоƒіĺέ. !!! !!! !!! !!! !!! !!! !!! !!! !!! + ∆ŀļ ρѓõƒîľëś шėгę ĥíðδėл ΐň ÿóŭг ѕέŧŧіňġś. Ύőú múşť ђǻνē άт łєáşť öήє ňòπ-ĥĭđđ℮ņ φґǿƒìłè. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Ŝèŧťìήğѕ сőůŀď ʼnõţ вє гêłóäðзđ ƒгøm ƒїĺē. Čĥêςĸ ƒöѓ šўʼnτάж ēґґόŕš, ϊⁿčļüďϊńğ ŧŗăįļíиģ ¢őmмãś. !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ś℮ттΐиġš čбμłď ñοŧ вė ґęłθǻδεð ƒяσм ƒіĺë. Ċнęĉќ ƒōѓ şγņтåж εŗґõřŝ, ïйçℓūδìⁿĝ τґàιļĭйĝ čοмmáş. !!! !!! !!! !!! !!! !!! !!! !!! !!! - Τėmрθѓάѓίℓÿ űşįŋġ τће Ŵįήďöщѕ Ťеґmϊйåĺ δзƒąύĺτ šετťιńğś. !!! !!! !!! !!! !!! ! + Ťĕмрöґāŗìŀỳ μŝïηĝ тћê Щϊʼnđôωŝ Ŧêŕмīлªł δέƒáυŀτ şεŧтĩйģş. !!! !!! !!! !!! !!! ! - ₣άίĺëđ ťó ℓöâď śзŧţíйğѕ !!! !!! + ₣ąîℓ℮đ ŧо ŀŏªð ŝêŧţιŋġŝ !!! !!! - Эńçθųπτ℮ѓзδ éґѓøřś ẅħĭłє ļōăδίñĝ ΰŝεŗ šéττιńģš !!! !!! !!! !!! ! + Èηсòųņťêřĕδ êґґοřś ώħΐŀё ℓόǻďīπĝ ůśęя şęтτîпĝş !!! !!! !!! !!! ! - ŐЌ + ÖК - Ŵåŕńĭηĝ: !! + Шāгńιηğ: !! - Тĥ℮ "{0}" ΐšл'ŧ ґũňňιňģ οⁿ уǿűѓ мåćħĭⁿë. Ţђįś çåи рŗєνэŋť тħє Ţĕґмīлáł ƒřøм гęċеìνϊʼnġ кēўвŏāґδ ίⁿрùŧ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Тħε "{0}" ιšⁿ'τ ŕūппїñğ ôη ỳóüѓ mªςĥįⁿз. Ŧħіѕ čαň ρгєνёлť τђè Тέřmîñàľ ƒřöм яέçěĩνїηġ кèÿъøǻŕď ìⁿρûт. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {0} will be replaced with the OS-localized name of the TabletInputService - ŌĶ + ÕК - ₣āϊłĕď ťŏ ґêļöǻď šèţŧïήĝś !!! !!! ! + ₣ăīļёð ťθ яеľõăð šĕτťīⁿġś !!! !!! ! https://go.microsoft.com/fwlink/?linkid=2125419 {Locked}This is a FWLink, so it will be localized with the fwlink tool - Ąъόűт ! + Ąъõµţ ! - ₣еέďвàĉķ !! + ₣еёđьäçκ !! - Şέтŧîπģś !! + Ѕεττīπĝѕ !! - Çáлςεł ! + Ćªήċëļ ! - Ćłŏŝз àŀĺ !!! + €łθşз åℓĺ !!! - Qύíт ! + Qųìτ ! - Ďб ỳóυ ẅáпţ ťŏ çĺóśē дľł ŧăвş? !!! !!! !!! + Ðǿ ÿоџ ẃαπτ ţό çŀòšė äļł τăъś? !!! !!! !!! - Μύℓţïφŀě раņεş !!! ! + Мџłтĭрŀё φăйĕş !!! ! - Çℓöśэ... !! + €ℓöśε... !! - Čŀōšέ Ťâъš ŧő ţнē Ŗīğħτ !!! !!! + Çŀõśέ Ťāвś ŧǿ τħê Ŗϊğћţ !!! !!! - €ℓбş℮ Οťнęґ Ťªвş !!! ! + €ľσśĕ Φτнеř Ŧåъѕ !!! ! - Ċℓоśε Ťăъ !!! + Çľōšέ Ŧåь !!! - Ĉŀóšё Ρåήэ !!! + Ĉłôšē Ρдйє !!! - Ѕрŀîţ Τªь !!! + Ŝφĺïť Ŧāъ !!! - Śρℓіţ Рăпě !!! + Şрℓіτ Ρàŋé !!! - Ẅėь Ŝєªŗçн !!! + Шёъ Šзäґĉĥ !!! - Ċøℓθг... !! + €θľŏř... !! - Çџѕτøм... !!! + Ċűşţöм... !!! - Řέŝёτ ! + Я℮š℮т ! - Язńдmэ Ŧąв !!! + Ŗěήąмë Ţдв !!! - ϵφłїčåţę Ţǻь !!! + Ðûρℓĭсåτë Ŧąь !!! - ₣ŏџʼnď д φґôƒíŀе ώíŧĥ âη ϊⁿνåℓΐδ "backgroundImage". Đеƒãùĺţΐⁿğ τĥαт φřôƒїľэ ŧő ђανе ñø ьª¢ќğŗőųʼnď ìмǻĝе. Мªκέ şŭѓę ţнªţ ωħěŋ ŝéττīńğ ä "backgroundImage", тћĕ νǻℓϋĕ įš д νάĺĭδ ƒίℓĕ ρªťħ ťō ǻń ìmãğє. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + ₣őůⁿð ã рŗοƒіℓє ẃіťђ ãň іήνäļîđ "backgroundImage". Đęƒąΰľťįлģ тħăт φгοƒĩľê τò ħдνє ʼnò ъâçķġѓøύñđ įмãġ℮. Μåкз şųґе тћåţ шĥеņ şęŧŧϊňğ ª "backgroundImage", ťђè νдℓϋ℮ ìś д νáℓïď ƒįļĕ φăтћ ťò аⁿ іmáġë. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"backgroundImage\""} - ₣όυйð ά φгόƒĩľё ŵïŧћ άʼn ιŋναľíð "icon". Ðëƒâûŀτìňğ тђάт рѓόƒìℓέ ťō ĥãνę ńǿ ìςöи. Μåќε şůгε τħаτ ẅђèŋ ŝëŧťîήģ άл "icon", тћè νáłůě іş ä νаļїð ƒїℓě φäŧн τŏ αή їмǻğë. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣σΰńð ǻ φřοƒĩĺê щϊťĥ åл ĭñνąĺïď "icon". Đзƒªцℓťĩήĝ ŧђат φřőƒįŀê ŧõ ђανэ йõ і¢σп. Мαķę şùřё тĥăτ ωнĕⁿ ѕėţŧιлğ ǻη "icon", ťĥè νáłúз įś ª νаĺįð ƒĩľе ρąţћ тő åи îмąğě. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"icon\""} The word "icon" in quotes is locked, the word icon OUTSIDE of quotes should be localized. - Щāгňĭηġş ωéяε ƒŏμńð ẃћΐļз ρàѓşϊʼnĝ ўбμř κęỳвĭʼnďīйģŝ: !!! !!! !!! !!! !!! + Ẅäřпĭņğş ẁеѓĕ ƒоūηð ẃђΐĺë ρªяŝίⁿĝ ỳθůѓ κèўьΐπđìⁿġš: !!! !!! !!! !!! !!! - • ₣ǿųñδ α кэýьїńδιлĝ ẃϊťћ ţŏό мàйγ ѕţřίлģŝ ƒоř τђê "keys" αřгåў. Тђėřє şћόūļđ óиℓỳ вé бňз ѕτґϊπĝ ναļцê ιп тħë "keys" áяŗάу. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + • ₣øυňð ā ќєỳьīńđΐñĝ ŵîťĥ тòό мάņу ŝŧřΐʼnġѕ ƒòґ тĥε "keys" άŕґáý. Ťђεřē şђθųĺđ οиĺŷ ье øήę ѕţŕįŋğ νªłüё ĩη ŧħё "keys" äřŗάý. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"keys\"","•"} This glyph is a bullet, used in a bulleted list. - • ₣ăíļеδ тó рǻŕśě аĺļ şцъĉоmmªиδś σƒ лёѕţэď ¢őммãⁿδ. !!! !!! !!! !!! !!! + • ₣ªίłęđ τо φªґŝё āľℓ śúъçǿmmäⁿðş σƒ лęśτĕđ ςŏмmάηð. !!! !!! !!! !!! !!! - • ₣ôúńδ д ķэўьįⁿðìйĝ ťђǻţ шąś mìşѕìņĝ á řēqµìř℮ď рáѓǻмëţёг νªľü℮. Τĥĩѕ ķзγвĩиďįпĝ ŵíℓł в℮ ìğńόŕєð. !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + • ₣õџиδ д ќ℮ŷвïηďϊňĝ ŧħàţ ωаѕ мίşšīήğ ǻ ŗеqΰįŕėð φăґάмēтêŕ νâļûé. Τнìѕ κėŷьîηďìήĝ ẃίļŀ ъĕ ìġπōŕėđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="•"} This glyph is a bullet, used in a bulleted list. - • Ťћė śφ℮ćϊƒϊēð "тђέмέ" шàš ñότ ƒöûπδ îή ŧћĕ łĩѕт бƒ τĥęмĕѕ. Ŧĕмρσŕãŕΐĺγ ƒáłĺīηġ ъáċќ ţο тђε ďėƒāμľŧ νаľŭě. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + • Ŧħ℮ ŝφéċĭƒίёđ "тђэmê" ώάѕ ňöŧ ƒőůŋð íи τћë łїšť øƒ тђемèş. Ţєmφôŗàřιℓÿ ƒàłłïńğ вд¢ĸ ťθ тĥє ð℮ƒªυľť νąľμэ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="•"} This glyph is a bullet, used in a bulleted list. - Ŧħе "globals" ρґόрєŗţÿ įš ðëφѓêĉåτėδ - ўóųґ şεтţΐйĝŝ мΐġнт ⁿêėď úφđαťĭⁿģ. !!! !!! !!! !!! !!! !!! !!! ! + Тнė "globals" ρґόφëґŧў ĩŝ ďéρгέċàţęð - γоμѓ şёťţїńğş mιģнť ŋ℮êđ úρđãťΐņĝ. !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"globals\""} @@ -267,642 +267,635 @@ {Locked}This is a FWLink, so it will be localized with the fwlink tool - ₣бг møŕē ìиƒô, ŝзĕ ŧћϊŝ ŵèь ρâġè. !!! !!! !!! + ₣ǿř mőřё ілƒŏ, şęє τђΐѕ ẁэъ ρâĝē. !!! !!! !!! - ₣āіℓ℮ď ţσ ĕжφãⁿđ а çŏмmдиđ ẃїтĥ "iterateOn" šĕť. Ţнιŝ ¢ǿмmàлδ ẅιŀľ вě įġлоŗєð. !!! !!! !!! !!! !!! !!! !!! !! + ₣äïļēð το э×рåиδ ά ¢όmmäňð ώїτħ "iterateOn" ѕēτ. Ţħίѕ ¢óммăŋď ẁіľł ъě їġŋθřĕδ. !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"iterateOn\""} - ₣бџņδ à сöмmáήď ŵïτħ άп ίйνäℓīđ "colorScheme". Ťнïś ĉбмmąйδ ẅįĺľ ьê ïğñǿяēð. Мªќë śųѓé ťħάť ŵћèй ѕэŧţіήĝ ã "colorScheme", ţнз νåľύэ máťĉĥέŝ ţнє "name" οƒ ã çőľõř ŝсђêmĕ іń ţће "schemes" ľίšŧ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣őüиď å ςőммαňð ẃΐтħ āй îйνаłίð "colorScheme". Ťнΐŝ сǿmмαηδ щïĺℓ ъë їġñσґзδ. Мäķë ѕûґε ŧħâŧ щĥéñ ѕęтŧΐņğ ª "colorScheme", ţħě νªŀŭě мàτĉћ℮ś τђē "name" óƒ а ĉôĺоґ ŝçћěмэ ìй тħе "schemes" ŀįѕт. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"colorScheme\"","\"name\"","\"schemes\""} - ₣бцπđ ª "splitPane" çοmмªŋδ ẅΐтн ай îñνáℓΐđ "size". Ŧнιş ¢ôммāⁿđ ŵίļĺ вέ įĝήθѓéδ. Μāκе şύгз ŧĥę ѕΐžέ їś вěτωěėʼn 0 àņď 1, εжċłџşіνε. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣бůήđ á "splitPane" ςōmмǻńď ŵιťн áп īⁿνªļιď "size". Τђιš çόmmâηđ щíľľ ъę їĝπσŕĕð. Μāĸĕ ѕџřē τħě śϊżė ìŝ в℮ţщ℮éʼn 0 àήď 1, ê×ćłΰşįνё. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"splitPane\"","\"size\""} - ₣ªïłęδ ŧő рåřşэ "startupActions". !!! !!! !!! + ₣дĭļέď то рãřśě "startupActions". !!! !!! !!! {Locked="\"startupActions\""} - ₣øϋйď мυĺτίрļê éŋνĭŗóňмëит νâяїαъŀĕš ẁįţђ тĥē şåмę πämё ιл ďэŕēŋť çášĕѕ (ℓőшěѓ/ϋρρêг) - õηļў ŏπз νâłűę ŵíłľ ъé ųšéđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + ₣óŭлð мŭľťïφŀє ēπνїяöņмέпт νăŕΐâъłěŝ ẁїťħ ŧнз ŝãmе пąмë ĭл ðіƒƒ℮ѓёηŧ ċāşêş (ŀοшêř/úρρéř) - ŏπŀў őñє νăĺϋз ẃіłļ ьё џšėδ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! - Âⁿ ŏртіõŋάℓ ¢ōмmаņď, ẅïŧн ąŗġůmёйтŝ, тõ ъě ŝрáщήéď īñ τħε ήëщ ţǻъ σѓ φāиэ !!! !!! !!! !!! !!! !!! !!! + Âη ôрţίǿпαł сøмmªйð, щϊτђ ªгġύмėиτş, ŧõ ъε ŝрåẃʼnëð ïⁿ ţĥę ŋĕω ťάь óг рàňέ !!! !!! !!! !!! !!! !!! !!! - Μονé ƒōсμѕ ţô аηоŧĥэŗ τāв !!! !!! ! + Мőνё ƒõćųŝ ťö àņôτнěґ τάь !!! !!! ! - Мǿνě ƒσćűś ťǿ тĥē ʼnèхť ŧαь !!! !!! ! + Μоν℮ ƒǿ¢úś τó ťђэ пэ×ŧ ţǻь !!! !!! ! - Дπ àłιаś ƒοř тнє "focus-tab" şϋьċöммäηδ. !!! !!! !!! !!! + Áη àļιăş ƒöř ťĥè "focus-tab" şϋвςømmåлđ. !!! !!! !!! !!! {Locked="\"focus-tab\""} - Μбνě ƒôċύś τό тнę рŕёνìőūš ťåъ !!! !!! !!! + Μǿνë ƒőçùѕ ţб ťĥэ ρґēνįθūѕ ťаь !!! !!! !!! - Μŏνê ƒø¢ŭѕ τћĕ ťăь дţ τђè ġĩνєⁿ íπďэх !!! !!! !!! !! + Моνë ƒŏ¢μš тħз ťàв àť ŧĥè ĝįνēň íʼnδë× !!! !!! !!! !! - Μον℮ ƒσсΰşĕđ ράņê τö ŧћέ ţãь åţ τħэ ģινёπ ïήðęх !!! !!! !!! !!! !! + Μσνё ƒосцśέδ ρãиĕ τθ ťн℮ ţáв аť тнê ġίνëņ ιηđèж !!! !!! !!! !!! !! - Мσνέ ƒőćûşęđ ράʼnе ŧõ ªйőτћēг τάь !!! !!! !!! + Μõνė ƒōçμŝëδ рáήĕ ťó âπбŧђēґ ťåъ !!! !!! !!! - Ди āļìãѕ ƒòя τĥэ "move-pane" śцвςømмàиδ. !!! !!! !!! !!! + Αņ ąŀίǻŝ ƒöѓ τћє "move-pane" ѕũъćôмmâʼnď. !!! !!! !!! !!! {Locked="\"move-pane\""} - Śρэςϊƒŷ ťђę śīźэ áş â φēґ¢έñţåģě øƒ ťђĕ рªя℮йť рäńé. Vαŀϊđ νãłύëš αяэ ьęтш℮еи (0,1), єхċℓűśįνě. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Şφē¢îƒу τĥé şĭźε ǻŝ ã рēŕсĕητâĝē θƒ τĥё рãŕëпŧ φªпз. Vάŀĩď νªŀύëş дгě вёτẅэзй (0,1), ê×¢łΰšįνэ. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Сŕзªтё ã π℮ω ťāъ !!! ! + Сřēάтέ д πзω ťâь !!! ! - Âи åŀíªş ƒθŗ τнē "new-tab" ŝúъ¢όмmãπδ. !!! !!! !!! !! + Ǻń άĺіαş ƒόŕ ţħє "new-tab" şűьčóмmαήđ. !!! !!! !!! !! {Locked="\"new-tab\""} - Мøνё ƒŏċυş ŧó ãήōţђěř φаŋē !!! !!! ! + Мóνе ƒöςύѕ тŏ ǻήòτĥёř φªʼnê !!! !!! ! - Ăņ äļĭάş ƒòя τħέ "focus-pane" śúвćоmmâиð. !!! !!! !!! !!! + Ąи àľіâś ƒòг ţĥè "focus-pane" šûвčōмmäπď. !!! !!! !!! !!! {Locked="\"focus-pane\""} - ₣σċùѕ ťнè ρаņз ãť тђ℮ ĝΐνеη îŋδє× !!! !!! !!! + ₣òĉµś τħέ ρǻńέ ăŧ ťнё ģΐνеń īñđзх !!! !!! !!! - Όρέή ŵīŧħ ŧђе ġîνęп ρгöƒΐľє. Ąçćέρŧş εïтĥèѓ тнε ηαмĕ òŗ ĠŲÌÐ õƒ ª ρřõƒιĺë !!! !!! !!! !!! !!! !!! !!! + Øрēń ẃíτħ ŧħë ĝїνēń ρяōƒįľè. Àĉĉεрţѕ ěīţĥэґ ţĥє παm℮ óѓ ĢÙЇĎ òƒ ă φřòƒїļê !!! !!! !!! !!! !!! !!! !!! - Сгэαţĕ ä ņéш šρℓïτ φªйє !!! !!! + Ĉяéâт℮ α ñёẃ ѕρļίт рãηз !!! !!! - Äņ āŀĩãş ƒσŕ тђз "split-pane" ѕûъčǿmmǻʼnδ. !!! !!! !!! !!! + Ǻņ ãŀĩàş ƒôґ ţĥ℮ "split-pane" šџьςоmmâņδ. !!! !!! !!! !!! {Locked="\"split-pane\""} - Čґėάтє тђë ñ℮ẃ ρãпе ăş ǻ ћσŗīžσňťªĺ šрĺĭτ (тђїηк [-]) !!! !!! !!! !!! !!! + Ĉŕєăтз ťнё ⁿзẁ ρàʼnё àŝ а ћõѓϊžőⁿţªℓ ŝρłіт (тнįηк [-]) !!! !!! !!! !!! !!! - Сгéǻţè тћέ πëщ ρªйē åŝ ā νéятіćдℓ ŝрľĭτ (ţђїŋκ [|]) !!! !!! !!! !!! !!! + Çгêåтз ťнė йèẃ рãиέ άŝ д νέґťίĉάļ šρĺĩť (τћїʼnķ [|]) !!! !!! !!! !!! !!! - Ċя℮ǻţє τђĕ пèώ ρåńę ьў ďџφľìçăтîñğ ŧђê φґǿƒίľз σƒ тĥе ƒòçџšĕđ φāñĕ !!! !!! !!! !!! !!! !!! ! + Ćřзãτ℮ тђę ʼnėẃ φâйέ ьý ďΰρℓíčäтïňģ ťĥė φяοƒíłє θƒ τђэ ƒòćцśеð ρąлέ !!! !!! !!! !!! !!! !!! ! - Öρей ĩń τнє ğїν℮ń δіřёčτøřŷ īηѕţêàδ σƒ ťħε ρřøƒìŀę'ŝ ŝэт "startingDirectory" !!! !!! !!! !!! !!! !!! !!! ! + Õрëñ їń ţĥë ġìνєń đĭґĕĉťθŕý іⁿѕťεàð οƒ ţђę ρřǿƒĩĺę'š ŝєŧ "startingDirectory" !!! !!! !!! !!! !!! !!! !!! ! {Locked="\"startingDirectory\""} - Ōρэη τнє ţэřmïηąľ щĩţћ ťђě φяǿνìđēδ ţíŧłĕ ійѕţëάð øƒ ťћє φѓбƒîľе'š šėτ "title" !!! !!! !!! !!! !!! !!! !!! !! + Ǿφěⁿ ŧĥē τεŗмīņâļ щíţĥ ťн℮ φřőνīðĕď ţїţłê íйšŧęāď øƒ тнë ρŕőƒιļέ'š ѕéŧ "title" !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"title\""} - Οφėл тĥє тαъ ώίŧћ тнě šφĕςîƒìéď čθŀог, įή #ѓřģģьв ƒθямдτ !!! !!! !!! !!! !!! ! + Φрєл ŧĥэ тãъ ŵíŧħ ŧћё ŝρэ¢ìƒϊэδ ¢őłŏř, įи #ѓŗģġьъ ƒöŗmäŧ !!! !!! !!! !!! !!! ! - Ώρęⁿ тĥэ τªь щĭťĥ τåъŤíţłê θνêггіδĭηğ đėƒάũłτ ŧітľз åпď şŭррŗёššіņġ ţíťĺе ċĥáňģè мéŝşāĝэѕ ƒяоm ťнê åρρłįćàτίσⁿ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Òφéл ŧђέ ţàь ẁíţħ τªьŢітŀè ǿνёŕřĭďιŋģ ďēƒάџľţ τīťℓé åňđ śûφрŕėşšΐⁿĝ ŧįŧĺє ĉћαʼnģĕ мéśšáġēś ƒґбm ťħë арρℓĩςāтїσⁿ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"tabTitle\""} - Ίлћ℮řίŧ ŧне τεřмїиǻļ'ŝ ǿŵņ ěлνįřōňмęńт νāгΐáвļёѕ ẅнеň ćřεáŧīпģ ťђе ńêẁ τáъ οř φάñĕ, ŗàŧĥêŕ ťћàη ςŗèάŧĭиğ à ƒяéŝĥ ęηνìřõήmĕńŧ вℓöçк. Тħίś ðěƒäûļťš τθ šéτ щћεη â "command" īš φаšşēď. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ĩηнěѓїт тħè τèŗмιŋāļ'ş óωʼn εήνīřōπméлť νâґįâвĺέş ẅĥēʼn ćřеàţιήġ ţнэ йеω тåь òř ρǻⁿе, řãťħĕѓ τђåл ¢ŕéάťĩήġ α ƒгёşн злνΐřõʼnmèⁿτ ъłōçќ. Ťћĭš đéƒąúłŧѕ тö šēт ẁħéή α "command" ΐŝ ρаśšéđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="\"command\""} - Όрèπ ţħę ťαъ ẅîтĥ тнĕ şрęćīƒίêδ сόĺöѓ ś¢ћеm℮, ïʼnѕŧέǻδ σƒ ťħз ρѓŏƒіļê'ŝ şēť "colorScheme" !!! !!! !!! !!! !!! !!! !!! !!! !! + Όφέŋ τĥē ŧаъ шĭтĥ τĥë ѕφęсìƒìέď čõŀόŕ śċћêmë, ìńѕţĕαđ όƒ ţћε φґöƒιłě'š şĕť "colorScheme" !!! !!! !!! !!! !!! !!! !!! !!! !! {Locked="\"colorScheme\""} - Ďϊśρľάý ţнě ąφρĺіčǻτΐǿπ νєѓѕíōп !!! !!! !!! + Ďìśφłäу ţђê аφφŀīċâŧĩοπ νεŗśіőŋ !!! !!! !!! - Ľāüή¢н ťђę ωĭŋðöẁ mαхїмΐżěď !!! !!! !! + ₤ąűņčħ ťĥĕ ẁіπðǿẃ måхíмïźĕď !!! !!! !! - Ľäџňςн тħė ẃίиďõŵ ìʼn ƒüľļśċŕзęň mõđĕ !!! !!! !!! ! + Ĺάцńĉђ ţђє ŵïпđôщ іⁿ ƒüŀłšċѓéëň мσđе !!! !!! !!! ! - Μòνэ ƒőĉμš ťõ ŧне ǻðјāс℮иť рàπє іŋ ŧћё šρěċΐƒïėđ ďìřê¢ŧîŏл !!! !!! !!! !!! !!! !! + Мøνέ ƒŏčΰş ŧθ ŧђέ åδĵаćёʼnт рάлë ïη ţĥě ŝφėċΐƒίεď đіґэсŧįóń !!! !!! !!! !!! !!! !! - Åл ąľїãѕ ƒόѓ тћε "move-focus" şûьćǿмmǻņď. !!! !!! !!! !!! + Āη ǻľїαš ƒöř τħê "move-focus" şůвčøмmåⁿđ. !!! !!! !!! !!! {Locked="\"move-focus\""} - Ţħě δїгèсŧīσл ŧó моν℮ ƒоčűѕ ϊņ !!! !!! !!! + Ťђê ðîгèсτîбň ŧǿ мøνё ƒöćμś īπ !!! !!! !!! - Śщαр ťħę ƒǿĉùşĕδ φǻņĕ ώΐťн ŧћè ǻďјаċεητ φάпë íп ţħέ ѕρęćїƒϊéð ðīгęċтíόη !!! !!! !!! !!! !!! !!! !!! + Ŝẅáφ тĥê ƒθĉŭѕєđ рâńé ŵîτђ ťћэ ªďĵдćėʼnτ ρдŋз ιņ ţђε ѕρęċϊƒίèđ δíŗеćτīóŋ !!! !!! !!! !!! !!! !!! !!! - Ţћє ðіѓε¢ţїőń ţø мσνз ťћ℮ ƒбсųşéð рâпè īň !!! !!! !!! !!! + Τĥë đΐґэçτїøŋ ŧθ mòνє ťħĕ ƒŏςΰşеđ рąⁿě ίň !!! !!! !!! !!! - ₤ăϋηсђ τђз ẅįπðóŵ ϊň ƒθςυš мбđė !!! !!! !!! + Ļǻŭйĉђ τнę ẁιʼnďõẃ ιи ƒôčųş мøδė !!! !!! !!! - Ŧћîš ρåŗãmëтēŕ ĩš ªп ìⁿţēŕñàľ ïmρĺèм℮ŋŧåţιòπ ðëтąіℓ åñđ śћőΰłď лōτ вė ũŝ℮ð. !!! !!! !!! !!! !!! !!! !!! ! + Тнîś раřǻмеτêř ĭѕ άň ϊлтëяņãŀ ĩmрļєméⁿţаţīøи δěτąîĺ аηđ šђоцĺð лŏτ ъě ūşęď. !!! !!! !!! !!! !!! !!! !!! ! - Şφéĉϊƒу ä ťеŕмĩήàļ ŵïńďōщ ťô яüи ťне ĝіνел ċоmmǻйďļΐńę іñ. "0" ăłшªўş гзƒзřş тő тћε ćΰѓŗέήт ŵїⁿðøώ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Ѕρέςïƒγ ä ŧёяmįʼnāļ ẁϊņδōẅ ţб řцή ŧн℮ ġïνëŋ ċŏмmàπďľíňε ίń. "0" ãŀẃăуş ŕєƒεґş ţô тнé ¢ūřřзňτ щįήδοŵ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! - Şφę¢іƒÿ ţĥ℮ рöşїţϊθń ƒοř ťћë τèяmΐňâł, įň "х,у" ƒόґmäŧ. !!! !!! !!! !!! !!! ! + Śρēсíƒý ţнę φóśїťіòⁿ ƒоŕ τħē τėřmìпàĺ, îπ "х,ý" ƒøŕmăţ. !!! !!! !!! !!! !!! ! - Śрёςíƒỳ ťђе ņυмвëŗ øƒ ĉǿĺūмйѕ ǻήð гõẅş ƒǿŗ ţнє тєґмϊηàℓ, ϊй "č,г" ƒǿґmäτ. !!! !!! !!! !!! !!! !!! !!! + Ѕрëсιƒŷ τнë ήύmьėř óƒ ςθĺùmиš αήď ґσωş ƒòř ťĥз τèґmіŋąľ, ĩŋ "č,ŗ" ƒöŗмªτ. !!! !!! !!! !!! !!! !!! !!! - Ρґëŝś ŧнє ъüŧţóл το θρëπ ą йèẅ тĕѓмійάł ŧåъ ẃίŧћ ýõџг δėƒàűĺτ рŕöƒíĺε. Ōρєи ŧђе ƒłўοũт тŏ šêļεćť шħï¢ђ φŗσƒĭļз ÿöµ ẅªńţ ţö όрęл. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + Рŗзšş ţђ℮ ъџŧţοи тô òрēń ã ήėщ ŧεґmīñãŀ ţãъ ẅΐтн γōμř đ℮ƒâųļţ φŗōƒĩĺє. Ŏρ℮ή ŧнè ƒĺýöũţ ţô ŝёļĕċτ ẁĥī¢ħ ρґóƒίℓε ýοŭ ẁªñŧ тó ǿφзп. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - Ńєш Ţàъ !! + Ņ℮ω Тǻв !! - Ǿрėʼn á ηэẁ тāъ !!! ! + Òρêň â ήęώ ţäь !!! ! - Ãļť+Ĉłϊĉќ ţο ѕφℓϊť тђё ćυяřеʼnť ẃĭʼnďòẅ !!! !!! !!! !! + Λľť+Čℓίčк τö šρŀіт ŧћз ĉűŗяęñт ẅілðοẁ !!! !!! !!! !! - Śћĭƒτ+Ćłī¢ķ ťò õрěή ª ʼnеω ẅίʼnďǿщ !!! !!! !!! + Şнįƒт+Čŀĩćκ ťò θφэη а πèẁ ώίŋďōẅ !!! !!! !!! - Ċťřļ+Ċŀìčκ ŧő õреи ãŝ ąďmĭñϊŝťŕǻтθѓ !!! !!! !!! ! + Ĉτřł+Ċľìċκ ţò θр℮й ăś àδmίʼnìşтгáтöг !!! !!! !!! ! - Сĺσśе ! + Čļőšë ! - Ċľоşε ! + €ľőš℮ ! - €ŀōšз ! + Çļоšě ! - Мà×íмīźè !! + Μå×ίмīžĕ !! - Мíηĭмїż℮ !! + Μĩńιміžë !! - Μιñіmįżэ !! + Μĩηĭмĩžе !! - Мїήîмīžě !! + Μîņïmīźè !! - Λьőџτ ! + Âъθŭт ! - Ѕēлđ ₣ëèðвасќ !!! + Ŝέήδ ₣ěеđвαсķ !!! - ΩК + ΘК - Vзяśĭöή: !! + Vэŗşισή: !! This is the heading for a version number label - Ĝέτтìπĝ Śţąŕťěð !!! ! + Ġėŧτįлġ Śŧăѓтĕð !!! ! A hyperlink name for a guide on how to get started using Terminal - Ŝōϋŗĉė Čоďè !!! + Šоúѓс℮ Ĉóðĕ !!! A hyperlink name for the Terminal's documentation - Ďôςųmèňтãŧįõή !!! + Đóċűm℮ņťâтĭθñ !!! A hyperlink name for user documentation - Řεŀèαśė Лőŧěş !!! + Ѓęłєąśε Ņθтėš !!! A hyperlink name for the Terminal's release notes - Ρґїνасŷ Ρоļіĉў !!! ! + Ρŕΐναçγ Ρõℓĭčý !!! ! A hyperlink name for the Terminal's privacy policy - Ţђїŗð-Рǻŗтγ Иоťϊċéŝ !!! !!! + Τћїřđ-Ράŕтŷ Ńôţι¢ęś !!! !!! A hyperlink name for the Terminal's third-party notices - Çǻπçέļ ! + €áйċêł ! - Сℓōѕë àłℓ !!! + Сľŏѕè āłℓ !!! - Đô γσû шąήŧ тõ ĉļöŝě àłĺ щïйðōщѕ? !!! !!! !!! + Đò ўθü ẁаⁿŧ ŧб ćŀǿѕё āľℓ ωіⁿđőщš? !!! !!! !!! - Çâńćěĺ ! + Ćдлčєľ ! - Ĉŀǿşз àľŀ !!! + Çŀóśė άłł !!! - Ďο ÿοџ ŵàηŧ тο ĉĺôѕε àĺĺ ŧåьš? !!! !!! !!! + Ðό ỳőΰ ẃàŋτ τõ čŀőśё åĺļ ťāъś? !!! !!! !!! - Ćãйçеľ ! + Сάήćêł ! - Сŀбŝę аńушåγ !!! + Čľόşë дйγŵаỳ !!! - Ẁāґņϊйĝ !! + Ẅãŗήĭйģ !! - Ýǿû åгè авõϋţ ťǿ ςľóѕē ă ŕεâð-оņŀγ тзґmīⁿªĺ. Đö ŷоμ шïѕђ тõ ċσйŧїπûэ? !!! !!! !!! !!! !!! !!! !!! + Υőū ąŗę āвõųт τô ĉℓôśĕ ā ŕęăδ-õήļγ ŧēгмĩņął. Ďø уôü ŵΐѕн ŧö čöʼnţìйџè? !!! !!! !!! !!! !!! !!! !!! - Ċаňĉєļ ! + Ċдņçëℓ ! - Υбũ āѓе ªъǿΰт ŧŏ ρąŝŧë тęжт τнατ ïŝ ŀôиģέѓ ŧндй 5 Κîß. Đǿ γοŭ ẅįŝĥ ťο ĉøⁿτïňυє? !!! !!! !!! !!! !!! !!! !!! !!! + Ўòџ āřε àьоŭт ťô φªşтĕ τêхť τĥǻŧ ĩѕ ļоñĝёŗ ťĥдⁿ 5 Ќΐß. Ðő γöύ ẅιšђ ţø ċòπτīŋϋė? !!! !!! !!! !!! !!! !!! !!! !!! - Ραŝτε ªŋуωáŷ !!! + Ρåŝтę ąηýẅªγ !!! - Щагⁿîиğ !! + Ẁǻґñīņĝ !! - €åʼnč℮ľ ! + Саńčеļ ! - Ỳŏũ âřё âвŏůτ ťο φαşŧэ ťêжт τћªţ ċθʼnťдϊñѕ мûłτίρℓë ℓīйзş. Іƒ ŷбц φǻѕţё τĥîś ťė×ŧ ΐήтō ўǿύř šħέℓļ, ίţ мάγ яēśŭļţ ϊή ţнę ūņєжрêĉτěđ έ×ěĉůţíŏи òƒ ćоммäήðѕ. Ďõ ỳõμ шįѕĥ ŧŏ čθⁿτїйυэ? !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! + Ϋσų ąгε ąвőûτ τо ρдѕťз τзхŧ ŧђàţ ¢õитαίņŝ mύĺтïρľė ĺĭñêѕ. ̓ ÿσΰ рάѕţè τнϊş ŧèжŧ ìйŧõ ÿοŭґ şнéľĺ, ΐт mаý řëśϋℓŧ îň ŧħě ϋñĕхφ℮¢ţзð ε×эĉûτιбņ οƒ čømмãпðś. Ðō ÿôû ẁίѕĥ ţó сöñţïñûĕ? !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !! - Рдѕţè āŋуẃаỳ !!! + Раşтё ǻлýщáỳ !!! - Ẁąřŋїηġ !! + Ẃăřиїńğ !! - Тўрз ä ςòмmǻйð иαмέ... !!! !!! + Ţỳрε а ċθммªňď ŋămэ... !!! !!! - Νǿ мâτčĥĭņģ ćǿмmªπďś !!! !!! + Ŋô măŧĉђįñġ ćõммâиďš !!! !!! - âтϊοņ šěáŗςђ мбδê !!! !! + Аĉŧíòи šêдŗćħ möđε !!! !! This text will be read aloud using assistive technologies when the command palette switches into action (command search) mode. - Τàъ ťΐťŀě mőđê !!! ! + Ŧаь ţìτłē мöďё !!! ! This text will be read aloud using assistive technologies when the command palette switches into a mode that filters tab names. - Сòммǻŋđ-ŀįņë möďέ !!! !! + Çоммаиđ-łĭпê mσďę !!! !! This text will be read aloud using assistive technologies when the command palette switches into the raw commandline parsing mode. - Мοгэ ōφτίθήš ƒбѓ "{}" !!! !!! + Мõґē бρтīøńŝ ƒõѓ "{}" !!! !!! This text will be read aloud using assistive technologies when the user selects a command that has additional options. The {} will be expanded to the name of the command containing more options. - Έхé¢ύτíήğ çбmmăйδ łìņе ẁїľŀ îйνŏкê τћε ƒóļĺôшįπğ ćσmmάйďś: !!! !!! !!! !!! !!! !! + Ĕхёсûţîπġ ćõмmáⁿδ ℓīňë ŵìℓĺ ĩⁿνōκè ŧħę ƒôłľόшîпğ ċømmåņðş: !!! !!! !!! !!! !!! !! Will be followed by a list of strings describing parsed commands - ₣дįļ℮đ φăřѕιņġ ¢ōmмâηδ łįńê: !!! !!! !! + ₣дìĺέď ρǻяšΐňģ čǿмmдиď ľïñέ: !!! !!! !! - Ćøммāлď Рдłĕτţĕ !!! ! + €οmмдиδ Ρãℓėŧţė !!! ! - Ţāв Şωϊтčћëř !!! + Ŧав Ѕώįťċнзя !!! - Τŷρε ă ťãь пªмэ... !!! !! + Ţýρе ǻ ťåв ήáмє... !!! !! - Ňó мãτčĥϊńĝ ťàъ ňám℮ !!! !!! + Ñό màŧĉĥĩпģ тåв лąмę !!! !!! - Ėητėѓ α wt сθmmãиďℓïńέ тŏ яůи !!! !!! !!! + Ęⁿţέŕ а wt ςōммǻŋđłïηé ťò гůņ !!! !!! !!! {Locked="wt"} - Мοяε őрťίоⁿš ƒбѓ "{}" !!! !!! + Μŏѓê øφţįőńş ƒóř "{}" !!! !!! This text will be read aloud using assistive technologies when the user selects a command that has additional options. The {} will be expanded to the name of the command containing more options. - Тўрē д ćŏmмǻⁿď йāmэ... !!! !!! + Тÿрє ā čомmäʼnð ńаmэ... !!! !!! - Йǿ mäŧ¢ђїⁿģ ċσмmàŋδѕ !!! !!! + Иô мǻţčђїńġ ćõmmåŋđŝ !!! !!! - Ѕџĝĝěśŧίǿňş m℮ŋú !!! ! + Ѕцğĝēѕтĩóⁿŝ mεйű !!! ! - Мοŗë σрτιθñś !!! + Мòřε ōрťïóⁿš !!! - Šύģġεŝŧīоήš ƒöüʼnδ: {0} !!! !!! + Ŝűģĝзšŧïõлѕ ƒǿûňδ: {0} !!! !!! {0} will be replaced with a number. - Ćŗĭmśση !! + Ċґįmśõņ !! - Ѕŧзеļ Ьℓũê !!! + Şţêēļ Вľΰë !!! - Μęďϊϋm Śéά Ğŕезл !!! ! + Мěďīųм Ŝęά Ğřĕ℮ņ !!! ! - Đдгķ Ǿѓåñĝë !!! + Ďåґķ Φѓăŋġé !!! - Μêðιυm Vίоļєť Ґэð !!! !! + Мēðіΰm Vϊόŀěť Яєď !!! !! - Ðòδğēѓ Вℓϋė !!! + Ðοďĝέґ βľυę !!! - £ιmё Ġгеēπ !!! + Ŀімě Ġŕеéň !!! - ¥ęŀĺőώ ! + Ŷέļłőẃ ! - Вłũě Vîбĺэτ !!! + Вŀûє Vĩöĺеť !!! - Šľăţе Вŀŭė !!! + Šĺàŧĕ Бłůέ !!! - Łίm℮ ! + Ŀíмё ! - Тãπ + Ťдπ - Μаġэńŧд !! + Мâġėňтα !! - Ċýǻň ! + €ÿàй ! - Ŝĸў βĺϋε !! + Śκŷ ßłúë !! - Đàřк Ġřäý !!! + Đąřķ Ģґăý !!! - Ťħΐŝ łΐиķ íś ĭиνãľíð: !!! !!! + Τĥīś łīлĸ ĭś īⁿνдļîď: !!! !!! - Тћĭś łĩηĸ ťуφê ĭŝ čųґřεήτĺỳ лöŧ ŝųрρσѓţέđ: !!! !!! !!! !!! + Ťђιš ļĭπк ŧγρę ιş ςύґŗёηťľỳ ŋôт śũрρόятзđ: !!! !!! !!! !!! - Ćдñĉèľ ! + €дⁿĉεℓ ! - Śęттΐńġš !! + Ŝêттΐʼnġş !! - Щě ςθΰľδ ŋöτ ώřΐŧє ťο уθϋя ѕетŧíηġš ƒĩℓе. Čħзčк ŧĥе φеŗmìşşίσⁿś όñ ŧђαţ ƒįℓĕ ţθ ęπŝüř℮ τђåт ţĥэ ѓεăđ-óиļý ƒļάğ īś ηøţ ŝėť άňδ τĥáτ ẅřίтз âςćέѕš іŝ ģгàлŧэδ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Щз сőυĺδ йότ шříтз тθ ўоџŕ šėτţįŋĝš ƒïĺε. €ħесќ ţђε рëѓmĩšşîбñŝ òη ťћăţ ƒíļе ţό ěήѕüяē тĥāт ťħе гεάđ-øñℓý ƒℓªğ ϊś ņōт ѕзτ āиđ ŧнàт ẅřіţê áςčεѕş їѕ ĝѓăήτєđ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Ьáċκ ! + Βãčκ ! - Вąςķ ! + βāċķ ! - ΩЌ + ФК - Đęъũĝ ! + Ðéвµģ ! - Єґřǿŕ ! + Ēŕřθř ! - Įňƒοŕmàťїσņ !!! + Ϊήƒόѓмâŧїōл !!! - Шâŗñіňĝ !! + Ẅάѓʼnιⁿğ !! - Ĉļïрьǿдяδ ςσиťзņтŝ (рŗэνíέщ): !!! !!! !!! + Сłįръοåřđ čôπŧέʼnŧš (ρŗзνįēŵ): !!! !!! !!! - Μôŕě õрťīóńš !!! + Μōгę øрţïбʼnś !!! - Ẁϊʼnðóщ ! + Шϊиđŏώ ! This is displayed as a label for a number, like "Window: 10" - ΰηлάмēδ щïʼnδοẁ !!! ! + ûйηãмзđ ŵĩņðőώ !!! ! text used to identify when a window hasn't been assigned a name by the user - Злτея å ňěω лąmэ: !!! !! + Ėⁿŧęѓ ä ňèŵ ñāмė: !!! !! - ΩК + ΦΚ - Ćáηсéľ ! + Čǻʼnςёŀ ! - ₣ăīℓėδ ťθ řєπαmё ẃійďоώ !!! !!! + ₣åϊłеď ťō ŕэñάмę ẅϊпďöẁ !!! !!! - Áπøŧнзя ẃĭйďôш ώîτħ тĥăŧ ńãmë äŀŕêäðý эжïŝťš !!! !!! !!! !!! ! + Äлôţħêř ωīńδõẃ ẁίтћ τђаŧ ńªмě áłŗěаďŷ ё×ĩşťѕ !!! !!! !!! !!! ! - Μāхĭmіżë !! + Μā×ΐmĭźё !! - Řэşţōŗĕ Ðθщй !!! + Г℮šţòґě Ďôẁл !!! - €ømmåņð Ρáļёţтė !!! ! + Ćőmmªňď Ρăľёŧţε !!! ! - ₣őċúš Ţęřмìņāĺ !!! ! + ₣õĉΰѕ Ŧέгмîŋäľ !!! ! This is displayed as a label for the context menu item that focuses the terminal. - Ẅіʼnđǿẃŝ !! + Ẅϊʼnďθẁş !! This is displayed as a label for the context menu item that holds the submenu of available windows. - Øρëл д ʼnėẁ ťдь їň ģΐνёй šťąŕťíńģ đîŗėċтøґý !!! !!! !!! !!! + Óφêй â лέώ ŧâв ĭʼn ğΐνéņ şţăřτíήġ ďįяе¢тоѓγ !!! !!! !!! !!! - Ώφėл á ňёщ ŵīʼnδöẅ ŵìŧђ ğίνëй şţáŗŧΐήģ đíґэĉťθґў !!! !!! !!! !!! !! + Фφēή ä ñēώ щїήďθẅ ώϊτħ ġіνėй ѕŧαŕтїйğ đïřéĉтõŗý !!! !!! !!! !!! !! - Šρļϊт ţħë ωĩñδбŵ аňð šţдѓť ίń ġïνεи đιґēсτσřŷ !!! !!! !!! !!! ! + Ŝрļîţ ťнε ωΐήđõẃ άήδ ѕтăřŧ ĭπ ġіνэŋ δΐяëĉŧоŗу !!! !!! !!! !!! ! - Ёжрбřŧ Ŧ℮хţ !!! + Е×ρōґт Τ℮хŧ !!! - ₣âîŀєđ тσ зжφőяτ ţėґmιйäļ сǿйťêńт !!! !!! !!! + ₣ăīļēđ ţǿ έжρõřŧ τëřмïňãĺ ćóñτëητ !!! !!! !!! - Śùсčеšѕƒúℓŀỳ èжφöŗŧéδ тзŗmĭņāľ ćōńŧėňт !!! !!! !!! !! + Şυčć℮ѕŝƒϋĺŀŷ ε×ρøяťзđ ŧэґмϊйáļ ćõņťεлţ !!! !!! !!! !! - ₣ĩŋδ ! + ₣їŋð ! - Рľαįπ Ţĕ×ŧ !!! + Рľάïʼn Τėхт !!! - Τεřмíʼnаţїőⁿ ъėħâνĩθя ćαη ъĕ čõπƒīģùŗėδ ϊņ āδνăŋсєδ ρгŏƒίłé ŝ℮ţτîņġś. !!! !!! !!! !!! !!! !!! !! - - - Ẅīʼnđóшś Ŧėґмîήåℓ ĉªň ве šеť åş τђē ďĕƒªμℓτ ţèŗмĩńâĺ äφρŀϊ¢ǻτīοñ îл ýøùř ѕєťţíηğş. !!! !!! !!! !!! !!! !!! !!! !!! + Тёѓmĩŋáŧΐôń ъεђàνĭöґ ĉáл ьέ ćôлƒιģџřěď ĩń ąďνάиĉëđ φяóƒίłĕ ŝеţτϊпĝś. !!! !!! !!! !!! !!! !!! !! - Đόπ'т śђóщ ăĝäΐи !!! ! + Ðόπ'т śħöω ãġāїй !!! ! - Ţħίѕ Ţėřмīйąĺ ώιňδòώ ίŝ ŕџⁿпϊπģ αş Άδmíⁿ !!! !!! !!! !!! - - - Όρеπ Šéťтīńġš !!! - This is a call-to-action hyperlink; it will open the settings. + Ţђīѕ Тёřмíņàĺ щίńďόщ ĩѕ яџиńίйğ дś Δδmϊⁿ !!! !!! !!! !!! - Ѕúğġέšτιбйš ƒθύńð: {0} !!! !!! + Śυģģєşτîòиŝ ƒοųņδ: {0} !!! !!! {0} will be replaced with a number. - Çћêčќíйĝ ƒσř ůφðăτεš... !!! !!! + Ċĥēćкîñģ ƒθř ūρďάţēŝ... !!! !!! - Αń ųрðáťě ïş ăνāíľáъŀę. !!! !!! + Ăŋ űрδάтē ΐś ãνāїļâвł℮. !!! !!! - Ìñşţªľℓ ήöщ !!! + Ĭńšτдℓℓ пøш !!! - Тнĕ "newTabMenu" ƒΐéℓđ ćόиŧåіńѕ мôřэ тнаⁿ őñê έηŧŗў бƒ ŧуφе "remainingProfiles". Όñŀў ŧђė ƒįґşť őňê ώιľŀ вë ςбήśіđĕяέď. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! + Τħē "newTabMenu" ƒĩêłď сöήťåïŋş mōřé ŧĥдл оņě êηтřγ őƒ ţỳφë "remainingProfiles". Õňľỳ ŧнė ƒîґšŧ οήз ώìłļ в℮ čσņšїďèгеð. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! {Locked="newTabMenu"} {Locked="remainingProfiles"} - Τнë "__content" ρřŏφзřтỳ ĭş ŕêšęѓνëð ƒõя įñţěґπàļ џŝё !!! !!! !!! !!! !!! + Ţнé "__content" φѓορεяτў ĭѕ řêŝęѓνеď ƒǿř įйтзѓйäļ űşе !!! !!! !!! !!! !!! {Locked="__content"} - Ωφêŋ α ďįǻĺøġ ċøŋтªϊʼnĩπġ φгòďŭсť ίňƒŏŕmâŧĩσʼn !!! !!! !!! !!! ! + Ωρēп ǻ ďîаľôĝ сōňŧдįńΐņģ ρгόďϋčţ ĩήƒбŗмâтîõń !!! !!! !!! !!! ! - Фρέй ţђę čοŀøř ριςķеѓ ţő ĉнõóŝё ţнэ čōłóŕ ŏƒ тĥιś тąв !!! !!! !!! !!! !!! + Öφέη ťħē ĉôℓôг ρįςќēґ ŧǿ ςћóőšе ţћє ċόłöŕ όƒ ţĥįŝ ťãь !!! !!! !!! !!! !!! - Θφęⁿ тĥë ċòmmäпď ρǻľзтτз !!! !!! ! + Óφεʼn ŧħе ςóмmǻηð φąŀëŧτε !!! !!! ! - Øρēп â иêш тªь ϋŝίŋģ ŧħĕ ά¢ťĭνе φґőƒĩĺз їп ťнë ςųŗŕéйť ďίŕеċтθґў !!! !!! !!! !!! !!! !!! ! + Öρěń α ηёω ţâь ųśìπğ тћė áċτíνĕ φŗôƒìĺе ιŋ тћé çΰгřєŋŧ đířéċťσѓÿ !!! !!! !!! !!! !!! !!! ! - Èжрôřτ ţħε ¢οŋτзиťŝ όƒ τĥё тē×ŧ вµƒƒεя ĭптō ā ŧ℮×ŧ ƒīĺέ !!! !!! !!! !!! !!! ! + Έ×ρøѓť τħέ čôлтзⁿťѕ õƒ ţћë τехť вцƒƒêя įήţǿ â ťέжţ ƒīĺє !!! !!! !!! !!! !!! ! - Ōреи ŧħé ŝèāřςћ δіăĺŏġ !!! !!! + Øрëй тђê šěāřćђ đïªłôģ !!! !!! - Яêπåmε τђіŝ ţäв !!! ! + Γёńāмę ţħιѕ тáъ !!! ! - Ωрзņ ťĥę ѕέţŧϊήġš ρªġė !!! !!! + Θрėń ţћē ѕèŧţΐŋğŝ рãģĕ !!! !!! - Ōрεπ д пεш рãⁿè цśìñģ тĥê ª¢тіνз ρѓòƒīłέ ϊи ŧħĕ ςūгѓёπť ðίѓęċтοřγ !!! !!! !!! !!! !!! !!! ! + Ŏρеи ǻ лěẁ рăηë űŝĭňģ ťћэ ªсťįνέ ρгбƒίļ℮ ιň ťђ℮ čŭѓŕėйŧ ďįѓęčťōґу !!! !!! !!! !!! !!! !!! ! - Ĉļǿѕē ªłĺ ťαъş ŧó ţне ѓΐģнŧ öƒ ŧĥĩś ţåъ !!! !!! !!! !!! + Ĉŀôśё àłł τáъś ťǿ ŧĥє ŕįĝнт ŏƒ ţĥìš ťâь !!! !!! !!! !!! - Сℓòŝе ąŀĺ тǻъŝ зхςέρŧ тђĩѕ ţáъ !!! !!! !!! + Ćŀǿŝē âłĺ ŧǻъş ë×ćзρţ ťђïš ŧăь !!! !!! !!! - Çľõŝе τђΐš ţāь !!! ! + Çℓôѕé τнĭš τăь !!! ! - ∑mрţγ... !! + Έmрту... !! - €ĺσŝė Рąή℮ !!! + €ŀοşē Ρǻйė !!! - Čļőѕê тђě ąćťїνé рãиĕ ĭƒ мµĺτіρĺę ρąπεѕ αŕё ρŗèѕέⁿτ !!! !!! !!! !!! !!! + €ℓöśė ţħэ âćτīνз ρªπę ϊƒ mυŀтïрℓэ рάñęş ǻřě φґĕŝëηţ !!! !!! !!! !!! !!! - Γзѕеţ тдь čôľóѓ !!! ! + Γĕşęŧ ţåъ ċθłõŗ !!! ! Text used to identify the reset button - Μоνě Тåъ ţǿ Иêш Ŵíŋδöẃ !!! !!! + Μøνέ Ťãъ ŧø Ņ℮ẃ Ŵїŋđóш !!! !!! - Мőνěš ťдв ŧό ã ňěώ ẃįņđōщ !!! !!! ! + Μονèѕ τäь το д пěẃ шϊлδǿẃ !!! !!! ! - Ґúπ άѕ Äďmΐʼníşťřαŧöѓ !!! !!! + Ŗμń ąś Áđмįпįśŧѓăτőř !!! !!! This text is displayed on context menu for profile entries in add new tab button. - Λċŧϊνê рàлє мőνëď τб "{0}" ŧàь !!! !!! !!! + ∆çţіνė ρªňè möνéδ ťõ "{0}" ťªъ !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the tab the pane was moved to. - "{0}" τąъ мòνεδ ťó "{1}" щîⁿðоẃ !!! !!! !!! + "{0}" тăъ мǿνèδ тб "{1}" ώілδòẁ !!! !!! !!! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. {1} is the name of the window the tab was moved to. - "{0}" тªв mòνéđ ŧŏ п℮ẅ щīπďоẃ !!! !!! !!! + "{0}" τäь môνėđ ťö ηęω ωĩⁿđοш !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. - "{0}" ťάъ мòνзđ ţö ρöŝĭτіθй "{1}" !!! !!! !!! + "{0}" ťáь мòνέð τό ρôšìťϊǿñ "{1}" !!! !!! !!! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful tab movement. {0} is the name of the tab. {1} is the new tab index in the tab row. - Δĉţįνê ρåň℮ моνєď ťŏ "{0}" ţàв ïʼn "{1}" ωìйďòω !!! !!! !!! !!! ! + Δсτîνę ρдηё мσνëđ ŧǿ "{0}" ŧâь ĩʼn "{1}" щΐńδоω !!! !!! !!! !!! ! {Locked="{0}"}{Locked="{1}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the tab the pane was moved to. {1} is the name of the window the pane was moved to. Replaced in 1.19 by TerminalPage_PaneMovedAnnouncement_ExistingWindow2 - Àĉťϊνē ρäņё мσνέδ ţǿ "{0}" ώîňδòẅ !!! !!! !!! + Αĉтīνĕ рάňè мбνéδ тŏ "{0}" ŵιⁿđŏω !!! !!! !!! {Locked="{0}"}This text is read out by screen readers upon a successful pane movement. {0} is the name of the window the pane was moved to. - Ǻčτїνĕ φåňê mŏνěð ťθ лéщ ẁīήðσŵ !!! !!! !!! + Δċŧίνë рăпε möν℮ď ţό ή℮ẁ ẃίⁿδõŵ !!! !!! !!! This text is read out by screen readers upon a successful pane movement to a new window. - Áçτîνĕ рåʼné мøνèđ ťǿ η℮ω ťăъ !!! !!! !! + ∆ĉŧïνε φâй℮ мσνěð ŧő пèẃ τдв !!! !!! !! This text is read out by screen readers upon a successful pane movement to a new tab within the existing window. - Їƒ şєŧ, ťĥē ĉõмmдńđ ẃΐľℓ ъэ āρρéиďέδ ťő τнĕ рřоƒįĺε'š ďêƒάΰłť čǿмmаʼnď ιиѕŧ℮ăď õƒ řєρłą¢īñģ ìţ. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! + Іƒ šεт, ťĥē ċōмmáиð ŵіĺℓ ъė áφρėηďéδ тō ťћĕ ρřσƒĩℓз'ş ďēƒªцľŧ çõммâʼnđ їⁿŝťèàď σƒ яёрľάĉіʼnĝ іт. !!! !!! !!! !!! !!! !!! !!! !!! !!! ! - Ŗėšťäґť Ćōŋⁿεĉťïоŋ !!! !! + Ѓёѕťąřτ Čόņńěċтīōņ !!! !! - Ŕĕśŧàѓť тĥз ąčŧιν℮ рãпé ĉóлпêсτíõл !!! !!! !!! ! + Гєšťάřŧ ťђé ǻсťїνę рдйε ςσлήеςťїõπ !!! !!! !!! ! \ No newline at end of file diff --git a/src/cascadia/TerminalApp/Resources/ru-RU/Resources.resw b/src/cascadia/TerminalApp/Resources/ru-RU/Resources.resw index 3fd4f2230d9..a66c47aabd6 100644 --- a/src/cascadia/TerminalApp/Resources/ru-RU/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/ru-RU/Resources.resw @@ -763,19 +763,12 @@ Поведение завершения можно настроить в дополнительных параметрах профиля. - - Терминал Windows можно настроить в параметрах как приложение терминала по умолчанию. - Больше не показывать Это окно терминала запущено от имени администратора - - Открыть параметры - This is a call-to-action hyperlink; it will open the settings. - Найдено рекомендаций: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/zh-CN/Resources.resw b/src/cascadia/TerminalApp/Resources/zh-CN/Resources.resw index 45fc2c0a53f..7cee543bce9 100644 --- a/src/cascadia/TerminalApp/Resources/zh-CN/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/zh-CN/Resources.resw @@ -763,19 +763,12 @@ 可以在高级配置文件设置中配置终止行为。 - - Windows 终端可在设置中设置为默认终端应用程序。 - 不再显示 此终端窗口正在以管理员身份运行 - - 打开设置 - This is a call-to-action hyperlink; it will open the settings. - 找到的建议: {0} {0} will be replaced with a number. diff --git a/src/cascadia/TerminalApp/Resources/zh-TW/Resources.resw b/src/cascadia/TerminalApp/Resources/zh-TW/Resources.resw index 6ddf9dbdae1..33e548f77ad 100644 --- a/src/cascadia/TerminalApp/Resources/zh-TW/Resources.resw +++ b/src/cascadia/TerminalApp/Resources/zh-TW/Resources.resw @@ -763,19 +763,12 @@ 您可以在進階設定檔設定中設定終止行為。 - - Windows 終端機可在您的設定中設定為預設終端機應用程式。 - 不要再顯示 此終端機視窗目前以系統管理員身分執行 - - 開啟設定 - This is a call-to-action hyperlink; it will open the settings. - 找到的建議: {0} {0} will be replaced with a number. From 0a83946214277ef8c773ef094f19cc7ba6357f10 Mon Sep 17 00:00:00 2001 From: Craig Loewen Date: Thu, 21 Mar 2024 12:07:32 -0400 Subject: [PATCH 6/8] Update similarIssues.yml to include issue bodies (#16915) Improved the GitGudSimilarIssues bot to include issue body info now. --- .github/workflows/similarIssues.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/similarIssues.yml b/.github/workflows/similarIssues.yml index fa93ad8597d..3e377e2ff9d 100644 --- a/.github/workflows/similarIssues.yml +++ b/.github/workflows/similarIssues.yml @@ -13,7 +13,8 @@ jobs: - id: getBody uses: craigloewen-msft/GitGudSimilarIssues@main with: - issuetitle: ${{ github.event.issue.title }} + issueTitle: ${{ github.event.issue.title }} + issueBody: ${{ github.event.issue.body }} repo: ${{ github.repository }} similaritytolerance: "0.75" add-comment: From b9a0cae01076d50a066ab26d65f5439f0d0a246e Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Thu, 21 Mar 2024 10:07:57 -0700 Subject: [PATCH 7/8] Add a pile of 'experimental' settings to the profile SUI (#16809) As noted in #3337, we never actually added this menu to the settings. Since we're planning on taking this out of "experimental" in 1.21, we should have a visible setting for it too. --- src/cascadia/TerminalControl/TermControl.cpp | 1 - .../ProfileViewModel.cpp | 12 ++++++ .../TerminalSettingsEditor/ProfileViewModel.h | 8 ++++ .../ProfileViewModel.idl | 8 ++++ .../Profiles_Advanced.xaml | 40 +++++++++++++++++++ .../Resources/en-US/Resources.resw | 32 +++++++++++++++ 6 files changed, 100 insertions(+), 1 deletion(-) diff --git a/src/cascadia/TerminalControl/TermControl.cpp b/src/cascadia/TerminalControl/TermControl.cpp index fe26a23e967..de8ec920d3e 100644 --- a/src/cascadia/TerminalControl/TermControl.cpp +++ b/src/cascadia/TerminalControl/TermControl.cpp @@ -333,7 +333,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation // (The window has a min. size that ensures that there's always a scrollbar thumb.) if (drawableRange < 0) { - assert(false); return; } diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp index ae91f9ee978..75c201f76fd 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp @@ -302,6 +302,18 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { return Feature_VtPassthroughMode::IsEnabled() && Feature_VtPassthroughModeSettingInUI::IsEnabled(); } + bool ProfileViewModel::ShowMarksAvailable() const noexcept + { + return Feature_ScrollbarMarks::IsEnabled(); + } + bool ProfileViewModel::AutoMarkPromptsAvailable() const noexcept + { + return Feature_ScrollbarMarks::IsEnabled(); + } + bool ProfileViewModel::RepositionCursorWithMouseAvailable() const noexcept + { + return Feature_ScrollbarMarks::IsEnabled(); + } bool ProfileViewModel::UseParentProcessDirectory() { diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h index 2c2762d26e1..d3edd16dc48 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h @@ -81,7 +81,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation bool ShowUnfocusedAppearance(); void CreateUnfocusedAppearance(); void DeleteUnfocusedAppearance(); + bool VtPassthroughAvailable() const noexcept; + bool ShowMarksAvailable() const noexcept; + bool AutoMarkPromptsAvailable() const noexcept; + bool RepositionCursorWithMouseAvailable() const noexcept; til::typed_event DeleteProfileRequested; @@ -115,6 +119,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation OBSERVABLE_PROJECTED_SETTING(_profile, Elevate); OBSERVABLE_PROJECTED_SETTING(_profile, VtPassthrough); OBSERVABLE_PROJECTED_SETTING(_profile, ReloadEnvironmentVariables); + OBSERVABLE_PROJECTED_SETTING(_profile, RightClickContextMenu); + OBSERVABLE_PROJECTED_SETTING(_profile, ShowMarks); + OBSERVABLE_PROJECTED_SETTING(_profile, AutoMarkPrompts); + OBSERVABLE_PROJECTED_SETTING(_profile, RepositionCursorWithMouse); WINRT_PROPERTY(bool, IsBaseLayer, false); WINRT_PROPERTY(bool, FocusDeleteButton, false); diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl index d9c7a95a816..8dcd35f4bd9 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl @@ -74,7 +74,11 @@ namespace Microsoft.Terminal.Settings.Editor Boolean EditableUnfocusedAppearance { get; }; Boolean ShowUnfocusedAppearance { get; }; AppearanceViewModel UnfocusedAppearance { get; }; + Boolean VtPassthroughAvailable { get; }; + Boolean ShowMarksAvailable { get; }; + Boolean AutoMarkPromptsAvailable { get; }; + Boolean RepositionCursorWithMouseAvailable { get; }; String EvaluatedIcon { get; }; @@ -109,5 +113,9 @@ namespace Microsoft.Terminal.Settings.Editor OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, Elevate); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, VtPassthrough); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ReloadEnvironmentVariables); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RightClickContextMenu); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ShowMarks); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AutoMarkPrompts); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RepositionCursorWithMouse); } } diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml index c9403bac0af..f1e3832f85c 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml @@ -127,6 +127,35 @@ Style="{StaticResource ToggleSwitchInExpanderStyle}" /> + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index ac4e14d1170..5bb762f6b22 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -1218,6 +1218,38 @@ Enable experimental virtual terminal passthrough An option to enable experimental virtual terminal passthrough connectivity option with the underlying ConPTY + + Display a menu on right-click + This controls how a right-click behaves in the terminal + + + When enabled, the Terminal will display a menu on right-click. When disabled, right-clicking will copy the selected text (or paste if there's no selection). + A description for what the "Display a menu on right-click" setting does. Presented near "Profile_RightClickContextMenu". + + + Display marks on the scrollbar + "Marks" are small visual indicators that can help the user identify the position of useful info in the scrollbar + + + When enabled, the Terminal will display marks in the scrollbar when searching for text, or when shell integration is enabled. + A description for what the "Display marks on the scrollbar" setting does. Presented near "Profile_ShowMarks". + + + Automatically mark prompts on pressing Enter + "Enter" is the enter/return key on the keyboard. This will add a mark indicating the position of a shell prompt when the user presses enter. + + + When enabled, the Terminal automatically add a mark indicating the position of the end of the command when you press enter. + A description for what the "Automatically mark prompts on pressing Enter" setting does. Presented near "Profile_AutoMarkPrompts". + + + Experimental: Reposition the cursor with mouse clicks + This allows the user to move the text cursor just by clicking with the mouse. + + + When enabled, clicking inside the prompt will move the cursor to that position. This requires shell integration to be enabled in your shell to work as expected. + A description for what the "Reload environment variables" setting does. Presented near "Profile_RepositionCursorWithMouse". + Audible An option to choose from for the "bell style" setting. When selected, an audible cue is used to notify the user. From 5b8e731e5d64eafc1df5bd0467d4df82028fd13a Mon Sep 17 00:00:00 2001 From: Leonard Hecker Date: Thu, 21 Mar 2024 21:38:53 +0100 Subject: [PATCH 8/8] AtlasEngine: Fix a OOB read when rendering PUA chars (#16894) When no soft fonts are set up but we're asked to draw a U+EF20, etc., character we'll currently read out-of-bounds, because we don't check whether the soft fonts array is non-empty. This PR fixes the issue by first getting a slice of the data and then checking if it's ok to use. This changeset additionally fixes a couple constinit vs. constexpr cases. I changed them to constinit at some point because I thought that it's more constexpr than constexpr by guaranteeing initialization at compile time. But nope, constinit is actually weaker in a way, because while it does guarantee that, it doesn't actually make the data constant. In other words, constinit is not `.rdata`. --- .../TerminalSettingsModel/Command.cpp | 7 +-- .../KeyChordSerialization.cpp | 4 +- src/inc/til.h | 20 ++++++- src/inc/til/bytes.h | 2 - src/inc/til/replace.h | 29 ++-------- src/inc/til/type_traits.h | 21 +++++++ src/renderer/atlas/BackendD3D.cpp | 56 ++++++++++--------- src/renderer/atlas/BackendD3D.h | 2 +- src/til/ut_til/ReplaceTests.cpp | 2 + src/types/colorTable.cpp | 4 +- 10 files changed, 83 insertions(+), 64 deletions(-) diff --git a/src/cascadia/TerminalSettingsModel/Command.cpp b/src/cascadia/TerminalSettingsModel/Command.cpp index 516d767481b..91082a4f6d7 100644 --- a/src/cascadia/TerminalSettingsModel/Command.cpp +++ b/src/cascadia/TerminalSettingsModel/Command.cpp @@ -5,10 +5,10 @@ #include "Command.h" #include "Command.g.cpp" -#include "ActionAndArgs.h" -#include "KeyChordSerialization.h" #include -#include "TerminalSettingsSerializationHelpers.h" +#include + +#include "KeyChordSerialization.h" using namespace winrt::Microsoft::Terminal::Settings::Model; using namespace winrt::Windows::Foundation::Collections; @@ -23,7 +23,6 @@ namespace winrt static constexpr std::string_view NameKey{ "name" }; static constexpr std::string_view IconKey{ "icon" }; static constexpr std::string_view ActionKey{ "command" }; -static constexpr std::string_view ArgsKey{ "args" }; static constexpr std::string_view IterateOnKey{ "iterateOn" }; static constexpr std::string_view CommandsKey{ "commands" }; static constexpr std::string_view KeysKey{ "keys" }; diff --git a/src/cascadia/TerminalSettingsModel/KeyChordSerialization.cpp b/src/cascadia/TerminalSettingsModel/KeyChordSerialization.cpp index b54aa289afc..7be5aed057c 100644 --- a/src/cascadia/TerminalSettingsModel/KeyChordSerialization.cpp +++ b/src/cascadia/TerminalSettingsModel/KeyChordSerialization.cpp @@ -129,7 +129,7 @@ static KeyChord _fromString(std::wstring_view wstr) } using nameToVkeyPair = std::pair; - static constinit til::static_map nameToVkey{ + static constexpr til::static_map nameToVkey{ // The above VKEY_NAME_PAIRS macro contains a list of key-binding names for each virtual key. // This god-awful macro inverts VKEY_NAME_PAIRS and creates a static map of key-binding names to virtual keys. // clang-format off @@ -245,7 +245,7 @@ static KeyChord _fromString(std::wstring_view wstr) static std::wstring _toString(const KeyChord& chord) { using vkeyToNamePair = std::pair; - static constinit til::static_map vkeyToName{ + static constexpr til::static_map vkeyToName{ // The above VKEY_NAME_PAIRS macro contains a list of key-binding strings for each virtual key. // This macro picks the first (most preferred) name and creates a static map of virtual keys to key-binding names. #define GENERATOR(vkey, name1, ...) vkeyToNamePair{ vkey, name1 }, diff --git a/src/inc/til.h b/src/inc/til.h index ee4f29df34c..c1d799fe076 100644 --- a/src/inc/til.h +++ b/src/inc/til.h @@ -20,8 +20,8 @@ #include "til/color.h" #include "til/enumset.h" #include "til/pmr.h" -#include "til/replace.h" #include "til/string.h" +#include "til/type_traits.h" #include "til/u8u16convert.h" // Use keywords on TraceLogging providers to specify the category @@ -54,6 +54,24 @@ namespace til // Terminal Implementation Library. Also: "Today I Learned" { + template + as_view_t clamp_slice_abs(const T& view, size_t beg, size_t end) + { + const auto len = view.size(); + end = std::min(end, len); + beg = std::min(beg, end); + return { view.data() + beg, end - beg }; + } + + template + as_view_t clamp_slice_len(const T& view, size_t start, size_t count) + { + const auto len = view.size(); + start = std::min(start, len); + count = std::min(count, len - start); + return { view.data() + start, count }; + } + template void manage_vector(std::vector& vector, typename std::vector::size_type requestedSize, float shrinkThreshold) { diff --git a/src/inc/til/bytes.h b/src/inc/til/bytes.h index f2ab2c6e22d..ab14bdaf3a3 100644 --- a/src/inc/til/bytes.h +++ b/src/inc/til/bytes.h @@ -3,8 +3,6 @@ #pragma once -#include "type_traits.h" - namespace til { template diff --git a/src/inc/til/replace.h b/src/inc/til/replace.h index 1dc9ffafce3..a9ab6e0bd35 100644 --- a/src/inc/til/replace.h +++ b/src/inc/til/replace.h @@ -5,27 +5,6 @@ namespace til { - namespace details - { - template - struct view_type_oracle - { - }; - - template<> - struct view_type_oracle - { - using type = std::string_view; - }; - - template<> - struct view_type_oracle - { - using type = std::wstring_view; - }; - - } - // Method Description: // - This is a function for finding all occurrences of a given string // `needle` in a larger string `haystack`, and replacing them with the @@ -39,8 +18,8 @@ namespace til // - template void replace_needle_in_haystack_inplace(T& haystack, - const typename details::view_type_oracle::type& needle, - const typename details::view_type_oracle::type& replacement) + const as_view_t& needle, + const as_view_t& replacement) { auto pos{ T::npos }; while ((pos = haystack.rfind(needle, pos)) != T::npos) @@ -63,8 +42,8 @@ namespace til // - a copy of `haystack` with all instances of `needle` replaced with `replacement`.` template T replace_needle_in_haystack(const T& haystack, - const typename details::view_type_oracle::type& needle, - const typename details::view_type_oracle::type& replacement) + const as_view_t& needle, + const as_view_t& replacement) { std::basic_string result{ haystack }; replace_needle_in_haystack_inplace(result, needle, replacement); diff --git a/src/inc/til/type_traits.h b/src/inc/til/type_traits.h index a4a10173199..1f426155ebf 100644 --- a/src/inc/til/type_traits.h +++ b/src/inc/til/type_traits.h @@ -32,6 +32,24 @@ namespace til struct is_byte : std::true_type { }; + + template + struct as_view + { + using type = T; + }; + + template + struct as_view> + { + using type = std::span; + }; + + template + struct as_view> + { + using type = std::basic_string_view; + }; } template @@ -45,4 +63,7 @@ namespace til template concept TriviallyCopyable = std::is_trivially_copyable_v; + + template + using as_view_t = typename details::as_view::type; } diff --git a/src/renderer/atlas/BackendD3D.cpp b/src/renderer/atlas/BackendD3D.cpp index 6a3b7e4ea41..19e98c6557e 100644 --- a/src/renderer/atlas/BackendD3D.cpp +++ b/src/renderer/atlas/BackendD3D.cpp @@ -1430,19 +1430,19 @@ BackendD3D::AtlasGlyphEntry* BackendD3D::_drawBuiltinGlyph(const RenderingPayloa _d2dBeginDrawing(); auto shadingType = ShadingType::TextGrayscale; + const D2D1_RECT_F r{ + static_cast(rect.x), + static_cast(rect.y), + static_cast(rect.x + rect.w), + static_cast(rect.y + rect.h), + }; if (BuiltinGlyphs::IsSoftFontChar(glyphIndex)) { - _drawSoftFontGlyph(p, rect, glyphIndex); + _drawSoftFontGlyph(p, r, glyphIndex); } else { - const D2D1_RECT_F r{ - static_cast(rect.x), - static_cast(rect.y), - static_cast(rect.x + rect.w), - static_cast(rect.y + rect.h), - }; BuiltinGlyphs::DrawBuiltinGlyph(p.d2dFactory.get(), _d2dRenderTarget.get(), _brush.get(), r, glyphIndex); shadingType = ShadingType::TextBuiltinGlyph; } @@ -1465,15 +1465,31 @@ BackendD3D::AtlasGlyphEntry* BackendD3D::_drawBuiltinGlyph(const RenderingPayloa return glyphEntry; } -void BackendD3D::_drawSoftFontGlyph(const RenderingPayload& p, const stbrp_rect& rect, u32 glyphIndex) +void BackendD3D::_drawSoftFontGlyph(const RenderingPayload& p, const D2D1_RECT_F& rect, u32 glyphIndex) { + _d2dRenderTarget->PushAxisAlignedClip(&rect, D2D1_ANTIALIAS_MODE_ALIASED); + const auto restoreD2D = wil::scope_exit([&]() { + _d2dRenderTarget->PopAxisAlignedClip(); + }); + + const auto width = static_cast(p.s->font->softFontCellSize.width); + const auto height = static_cast(p.s->font->softFontCellSize.height); + const auto softFontIndex = glyphIndex - 0xEF20u; + const auto data = til::clamp_slice_len(p.s->font->softFontPattern, height * softFontIndex, height); + + if (data.empty() || data.size() != height) + { + _d2dRenderTarget->Clear(); + return; + } + if (!_softFontBitmap) { // Allocating such a tiny texture is very wasteful (min. texture size on GPUs - // right now is 64kB), but this is a seldomly used feature so it's fine... + // right now is 64kB), but this is a seldom used feature, so it's fine... const D2D1_SIZE_U size{ - static_cast(p.s->font->softFontCellSize.width), - static_cast(p.s->font->softFontCellSize.height), + static_cast(width), + static_cast(height), }; const D2D1_BITMAP_PROPERTIES1 bitmapProperties{ .pixelFormat = { DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED }, @@ -1484,17 +1500,11 @@ void BackendD3D::_drawSoftFontGlyph(const RenderingPayload& p, const stbrp_rect& } { - const auto width = static_cast(p.s->font->softFontCellSize.width); - const auto height = static_cast(p.s->font->softFontCellSize.height); - auto bitmapData = Buffer{ width * height }; - const auto softFontIndex = glyphIndex - 0xEF20u; - auto src = p.s->font->softFontPattern.begin() + height * softFontIndex; auto dst = bitmapData.begin(); - for (size_t y = 0; y < height; y++) + for (auto srcBits : data) { - auto srcBits = *src++; for (size_t x = 0; x < width; x++) { const auto srcBitIsSet = (srcBits & 0x8000) != 0; @@ -1508,15 +1518,7 @@ void BackendD3D::_drawSoftFontGlyph(const RenderingPayload& p, const stbrp_rect& } const auto interpolation = p.s->font->antialiasingMode == AntialiasingMode::Aliased ? D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR : D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC; - const D2D1_RECT_F dest{ - static_cast(rect.x), - static_cast(rect.y), - static_cast(rect.x + rect.w), - static_cast(rect.y + rect.h), - }; - - _d2dBeginDrawing(); - _d2dRenderTarget->DrawBitmap(_softFontBitmap.get(), &dest, 1, interpolation, nullptr, nullptr); + _d2dRenderTarget->DrawBitmap(_softFontBitmap.get(), &rect, 1, interpolation, nullptr, nullptr); } void BackendD3D::_drawGlyphAtlasAllocate(const RenderingPayload& p, stbrp_rect& rect) diff --git a/src/renderer/atlas/BackendD3D.h b/src/renderer/atlas/BackendD3D.h index 784c854c152..5e8055aecd0 100644 --- a/src/renderer/atlas/BackendD3D.h +++ b/src/renderer/atlas/BackendD3D.h @@ -215,7 +215,7 @@ namespace Microsoft::Console::Render::Atlas ATLAS_ATTR_COLD void _drawTextOverlapSplit(const RenderingPayload& p, u16 y); [[nodiscard]] ATLAS_ATTR_COLD AtlasGlyphEntry* _drawGlyph(const RenderingPayload& p, const ShapedRow& row, AtlasFontFaceEntry& fontFaceEntry, u32 glyphIndex); AtlasGlyphEntry* _drawBuiltinGlyph(const RenderingPayload& p, const ShapedRow& row, AtlasFontFaceEntry& fontFaceEntry, u32 glyphIndex); - void _drawSoftFontGlyph(const RenderingPayload& p, const stbrp_rect& rect, u32 glyphIndex); + void _drawSoftFontGlyph(const RenderingPayload& p, const D2D1_RECT_F& rect, u32 glyphIndex); void _drawGlyphAtlasAllocate(const RenderingPayload& p, stbrp_rect& rect); static AtlasGlyphEntry* _drawGlyphAllocateEntry(const ShapedRow& row, AtlasFontFaceEntry& fontFaceEntry, u32 glyphIndex); static void _splitDoubleHeightGlyph(const RenderingPayload& p, const ShapedRow& row, AtlasFontFaceEntry& fontFaceEntry, AtlasGlyphEntry* glyphEntry); diff --git a/src/til/ut_til/ReplaceTests.cpp b/src/til/ut_til/ReplaceTests.cpp index 827c6872cdd..349251510f6 100644 --- a/src/til/ut_til/ReplaceTests.cpp +++ b/src/til/ut_til/ReplaceTests.cpp @@ -4,6 +4,8 @@ #include "precomp.h" #include "WexTestClass.h" +#include + using namespace WEX::Common; using namespace WEX::Logging; using namespace WEX::TestExecution; diff --git a/src/types/colorTable.cpp b/src/types/colorTable.cpp index 52f043e34e0..e6498a6b0c8 100644 --- a/src/types/colorTable.cpp +++ b/src/types/colorTable.cpp @@ -267,7 +267,7 @@ static constexpr std::array standard256ColorTable{ til::color{ 0xEE, 0xEE, 0xEE }, }; -static constinit til::presorted_static_map xorgAppVariantColorTable{ +static constexpr til::presorted_static_map xorgAppVariantColorTable{ std::pair{ "antiquewhite"sv, std::array{ til::color{ 250, 235, 215 }, til::color{ 255, 239, 219 }, til::color{ 238, 223, 204 }, til::color{ 205, 192, 176 }, til::color{ 139, 131, 120 } } }, std::pair{ "aquamarine"sv, std::array{ til::color{ 127, 255, 212 }, til::color{ 127, 255, 212 }, til::color{ 118, 238, 198 }, til::color{ 102, 205, 170 }, til::color{ 69, 139, 116 } } }, std::pair{ "azure"sv, std::array{ til::color{ 240, 255, 255 }, til::color{ 240, 255, 255 }, til::color{ 224, 238, 238 }, til::color{ 193, 205, 205 }, til::color{ 131, 139, 139 } } }, @@ -348,7 +348,7 @@ static constinit til::presorted_static_map xorgAppVariantColorTable{ std::pair{ "yellow"sv, std::array{ til::color{ 255, 255, 0 }, til::color{ 255, 255, 0 }, til::color{ 238, 238, 0 }, til::color{ 205, 205, 0 }, til::color{ 139, 139, 0 } } }, }; -static constinit til::presorted_static_map xorgAppColorTable{ +static constexpr til::presorted_static_map xorgAppColorTable{ std::pair{ "aliceblue"sv, til::color{ 240, 248, 255 } }, std::pair{ "aqua"sv, til::color{ 0, 255, 255 } }, std::pair{ "beige"sv, til::color{ 245, 245, 220 } },