From 49c5c6157018d1ea52e2efe48231f00384ec8768 Mon Sep 17 00:00:00 2001 From: James Pack Date: Thu, 5 Jun 2025 20:08:55 -0400 Subject: [PATCH 1/9] Enable terminal chat message copy --- .../QueryExtension/ExtensionPalette.cpp | 40 ++++++++++++++++++- .../QueryExtension/ExtensionPalette.h | 4 +- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index ee693299d00..c1d6c2279b4 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -16,6 +16,7 @@ using namespace winrt::Windows::Foundation::Collections; using namespace winrt::Windows::UI::Core; using namespace winrt::Windows::UI::Xaml; using namespace winrt::Windows::UI::Xaml::Controls; +using namespace winrt::Windows::UI::Xaml::Controls::Primitives; using namespace winrt::Windows::System; namespace WWH = ::winrt::Windows::Web::Http; namespace WSS = ::winrt::Windows::Storage::Streams; @@ -34,7 +35,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation ExtensionPalette::ExtensionPalette() { InitializeComponent(); - + _clearAndInitializeMessages(nullptr, nullptr); ControlName(RS_(L"ControlName")); QueryBoxPlaceholderText(RS_(L"CurrentShell")); @@ -300,6 +301,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } } + // Method Description: // - This event is triggered when someone clicks anywhere in the bounds of // the window that's _not_ the query palette UI. When that happens, @@ -311,6 +313,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void ExtensionPalette::_rootPointerPressed(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& /*e*/) { + if (Visibility() != Visibility::Collapsed) { _close(); @@ -340,6 +343,15 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void ExtensionPalette::_lostFocusHandler(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& /*args*/) { + + const auto focusedElement = Input::FocusManager::GetFocusedElement(this->XamlRoot()); + if(focusedElement && (focusedElement.try_as() || focusedElement.try_as() || focusedElement.try_as())) + { + // The context menu for the message don't seem to be found when the the VisualTreeHelper walks the visual tree. So we check here + // if one of the focused elements is a message or a context menu of one of those messages and return early to support + // copy/select all using a mouse + return; + } const auto flyout = _queryBox().ContextFlyout(); if (flyout && flyout.IsOpen()) { @@ -404,6 +416,13 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } else if (key == VirtualKey::C && ctrlDown) { + // Get the focused element. If it is a chat message copy its selection (if any) to the clipboard. + const auto focusedElement = Input::FocusManager::GetFocusedElement(this->XamlRoot()); + if (focusedElement && focusedElement.try_as()) + { + const auto textBlock = focusedElement.as(); + textBlock.CopySelectionToClipboard(); + } _queryBox().CopySelectionToClipboard(); e.Handled(true); } @@ -440,6 +459,10 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation _richBlock{ nullptr } { _richBlock = Microsoft::Terminal::UI::Markdown::Builder::Convert(_messageContent, L""); + _richBlock.IsTextSelectionEnabled(true); + _richBlock.ContextRequested({this, &ChatMessage::_chatMessageCopyRequested}); + _richBlock.AllowFocusWhenDisabled(true); + _richBlock.AllowFocusOnInteraction(true); const auto resources = Application::Current().Resources(); const auto textBrushObj = _isQuery ? resources.Lookup(box_value(L"TextOnAccentFillColorPrimaryBrush")) : resources.Lookup(box_value(L"TextFillColorPrimaryBrush")); if (const auto textBrush = textBrushObj.try_as()) @@ -478,4 +501,19 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } } } + + + // Method Description: + // - Handle the ContextFlyoutRequested Event + // * Should be handled according to the documentation + // Arguments: + // - Standard Event Args + // Return Value: + // - + void ChatMessage::_chatMessageCopyRequested(const Windows::Foundation::IInspectable& /*sender*/, + const Windows::UI::Xaml::Input::ContextRequestedEventArgs& e) + { + e.Handled(true); + } + } diff --git a/src/cascadia/QueryExtension/ExtensionPalette.h b/src/cascadia/QueryExtension/ExtensionPalette.h index 0b4abee122f..3f7e6653876 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.h +++ b/src/cascadia/QueryExtension/ExtensionPalette.h @@ -56,7 +56,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void _previewKeyDownHandler(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::Input::KeyRoutedEventArgs& e); void _setUpAIProviderInSettings(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); - void _close(); }; @@ -67,6 +66,9 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation bool IsQuery() const { return _isQuery; }; winrt::hstring MessageContent() const { return _messageContent; }; winrt::Windows::UI::Xaml::Controls::RichTextBlock RichBlock() const { return _richBlock; }; + void _chatMessageCopyRequested(const Windows::Foundation::IInspectable& /*sender*/, + const Windows::UI::Xaml::Input::ContextRequestedEventArgs& e); + TYPED_EVENT(RunCommandClicked, winrt::Microsoft::Terminal::Query::Extension::ChatMessage, winrt::hstring); From 4eb570cdee3a6872638fb4e003e29d5efeacf8c3 Mon Sep 17 00:00:00 2001 From: James Pack Date: Thu, 5 Jun 2025 20:16:08 -0400 Subject: [PATCH 2/9] Code formatting --- src/cascadia/QueryExtension/ExtensionPalette.cpp | 12 ++++-------- src/cascadia/QueryExtension/ExtensionPalette.h | 1 - 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index c1d6c2279b4..55d2163cddf 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -35,7 +35,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation ExtensionPalette::ExtensionPalette() { InitializeComponent(); - + _clearAndInitializeMessages(nullptr, nullptr); ControlName(RS_(L"ControlName")); QueryBoxPlaceholderText(RS_(L"CurrentShell")); @@ -301,7 +301,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } } - // Method Description: // - This event is triggered when someone clicks anywhere in the bounds of // the window that's _not_ the query palette UI. When that happens, @@ -313,7 +312,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void ExtensionPalette::_rootPointerPressed(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Input::PointerRoutedEventArgs& /*e*/) { - if (Visibility() != Visibility::Collapsed) { _close(); @@ -343,9 +341,8 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void ExtensionPalette::_lostFocusHandler(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::RoutedEventArgs& /*args*/) { - const auto focusedElement = Input::FocusManager::GetFocusedElement(this->XamlRoot()); - if(focusedElement && (focusedElement.try_as() || focusedElement.try_as() || focusedElement.try_as())) + if (focusedElement && (focusedElement.try_as() || focusedElement.try_as() || focusedElement.try_as())) { // The context menu for the message don't seem to be found when the the VisualTreeHelper walks the visual tree. So we check here // if one of the focused elements is a message or a context menu of one of those messages and return early to support @@ -460,7 +457,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation { _richBlock = Microsoft::Terminal::UI::Markdown::Builder::Convert(_messageContent, L""); _richBlock.IsTextSelectionEnabled(true); - _richBlock.ContextRequested({this, &ChatMessage::_chatMessageCopyRequested}); + _richBlock.ContextRequested({ this, &ChatMessage::_chatMessageCopyRequested }); _richBlock.AllowFocusWhenDisabled(true); _richBlock.AllowFocusOnInteraction(true); const auto resources = Application::Current().Resources(); @@ -502,7 +499,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } } - // Method Description: // - Handle the ContextFlyoutRequested Event // * Should be handled according to the documentation @@ -511,7 +507,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation // Return Value: // - void ChatMessage::_chatMessageCopyRequested(const Windows::Foundation::IInspectable& /*sender*/, - const Windows::UI::Xaml::Input::ContextRequestedEventArgs& e) + const Windows::UI::Xaml::Input::ContextRequestedEventArgs& e) { e.Handled(true); } diff --git a/src/cascadia/QueryExtension/ExtensionPalette.h b/src/cascadia/QueryExtension/ExtensionPalette.h index 3f7e6653876..7c4e3287fd1 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.h +++ b/src/cascadia/QueryExtension/ExtensionPalette.h @@ -69,7 +69,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation void _chatMessageCopyRequested(const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Input::ContextRequestedEventArgs& e); - TYPED_EVENT(RunCommandClicked, winrt::Microsoft::Terminal::Query::Extension::ChatMessage, winrt::hstring); private: From d9334b1013bff82e8f7ca996e226de3f6d2656a4 Mon Sep 17 00:00:00 2001 From: James Pack Date: Sat, 7 Jun 2025 13:41:20 -0400 Subject: [PATCH 3/9] Spelling fix. --- src/cascadia/QueryExtension/ExtensionPalette.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index 55d2163cddf..75d360b1eb2 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -344,9 +344,9 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation const auto focusedElement = Input::FocusManager::GetFocusedElement(this->XamlRoot()); if (focusedElement && (focusedElement.try_as() || focusedElement.try_as() || focusedElement.try_as())) { - // The context menu for the message don't seem to be found when the the VisualTreeHelper walks the visual tree. So we check here + // The context menu for the message don't seem to be found when the VisualTreeHelper walks the visual tree. So we check here // if one of the focused elements is a message or a context menu of one of those messages and return early to support - // copy/select all using a mouse + // copy and select all using a mouse return; } const auto flyout = _queryBox().ContextFlyout(); From 3e9995772d810dc95bc6b9401bf49c402c65db2b Mon Sep 17 00:00:00 2001 From: James Pack Date: Sat, 21 Jun 2025 16:56:34 -0400 Subject: [PATCH 4/9] Customize flyout menu to ease right click copy workflow --- .../QueryExtension/ExtensionPalette.cpp | 47 +++++++++++++------ .../QueryExtension/ExtensionPalette.h | 3 -- .../Resources/en-US/Resources.resw | 6 ++- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index 75d360b1eb2..11456e4a3c5 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -7,6 +7,8 @@ #include "LibraryResources.h" #include +#include + #include "ExtensionPalette.g.cpp" #include "ChatMessage.g.cpp" #include "GroupedChatMessages.g.cpp" @@ -457,9 +459,38 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation { _richBlock = Microsoft::Terminal::UI::Markdown::Builder::Convert(_messageContent, L""); _richBlock.IsTextSelectionEnabled(true); - _richBlock.ContextRequested({ this, &ChatMessage::_chatMessageCopyRequested }); + _richBlock.ContextMenuOpening([this](const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Controls::ContextMenuEventArgs& e) { + // If the context menu is opening, we want to show the copy option + // and select all option if the message is not a query. + + MenuFlyout menuFlyout; + Windows::UI::Xaml::Controls::FontIcon copyIcon; + copyIcon.Glyph(L"\uE8C8"); // Copy icon + + auto copyItem = MenuFlyoutItem(); + copyItem.Text(RS_(L"CopyMessage")); + copyItem.Icon(copyIcon); + copyItem.Click([this](auto&, auto&) { + const auto messageContent = this->MessageContent(); + + if (!messageContent.empty()) + { + // Create a DataPackage and set the content to the message content + Windows::ApplicationModel::DataTransfer::DataPackage package{}; + package.SetText(messageContent); + Windows::ApplicationModel::DataTransfer::Clipboard::SetContent(package); + } + }); + menuFlyout.Items().Append(copyItem); + + menuFlyout.ShouldConstrainToRootBounds(true); + menuFlyout.Placement(Windows::UI::Xaml::Controls::Primitives::FlyoutPlacementMode::BottomEdgeAlignedRight); + menuFlyout.ShowAt(_richBlock); + e.Handled(true); + }); _richBlock.AllowFocusWhenDisabled(true); _richBlock.AllowFocusOnInteraction(true); + const auto resources = Application::Current().Resources(); const auto textBrushObj = _isQuery ? resources.Lookup(box_value(L"TextOnAccentFillColorPrimaryBrush")) : resources.Lookup(box_value(L"TextFillColorPrimaryBrush")); if (const auto textBrush = textBrushObj.try_as()) @@ -498,18 +529,4 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation } } } - - // Method Description: - // - Handle the ContextFlyoutRequested Event - // * Should be handled according to the documentation - // Arguments: - // - Standard Event Args - // Return Value: - // - - void ChatMessage::_chatMessageCopyRequested(const Windows::Foundation::IInspectable& /*sender*/, - const Windows::UI::Xaml::Input::ContextRequestedEventArgs& e) - { - e.Handled(true); - } - } diff --git a/src/cascadia/QueryExtension/ExtensionPalette.h b/src/cascadia/QueryExtension/ExtensionPalette.h index 7c4e3287fd1..fd423f9750b 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.h +++ b/src/cascadia/QueryExtension/ExtensionPalette.h @@ -66,9 +66,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation bool IsQuery() const { return _isQuery; }; winrt::hstring MessageContent() const { return _messageContent; }; winrt::Windows::UI::Xaml::Controls::RichTextBlock RichBlock() const { return _richBlock; }; - void _chatMessageCopyRequested(const Windows::Foundation::IInspectable& /*sender*/, - const Windows::UI::Xaml::Input::ContextRequestedEventArgs& e); - TYPED_EVENT(RunCommandClicked, winrt::Microsoft::Terminal::Query::Extension::ChatMessage, winrt::hstring); private: diff --git a/src/cascadia/QueryExtension/Resources/en-US/Resources.resw b/src/cascadia/QueryExtension/Resources/en-US/Resources.resw index e93fcbcd159..3aa6463e9f2 100644 --- a/src/cascadia/QueryExtension/Resources/en-US/Resources.resw +++ b/src/cascadia/QueryExtension/Resources/en-US/Resources.resw @@ -197,4 +197,8 @@ GitHub Copilot The metadata string to display whenever a response is received from the GitHub Copilot service provider - + + Copy Message + Copy terminal chat message + + \ No newline at end of file From 53ce794241d52c63b9ccbee1b001d7618dfe53cd Mon Sep 17 00:00:00 2001 From: James Pack Date: Sat, 21 Jun 2025 18:29:11 -0400 Subject: [PATCH 5/9] Comment cleanup --- src/cascadia/QueryExtension/ExtensionPalette.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index 11456e4a3c5..07ed2ac6a3f 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -460,9 +460,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation _richBlock = Microsoft::Terminal::UI::Markdown::Builder::Convert(_messageContent, L""); _richBlock.IsTextSelectionEnabled(true); _richBlock.ContextMenuOpening([this](const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Controls::ContextMenuEventArgs& e) { - // If the context menu is opening, we want to show the copy option - // and select all option if the message is not a query. - + // If the context menu is opening we want to show our custom copy option MenuFlyout menuFlyout; Windows::UI::Xaml::Controls::FontIcon copyIcon; copyIcon.Glyph(L"\uE8C8"); // Copy icon From f62745dc425efff449ea2ae10977987fe4745d1d Mon Sep 17 00:00:00 2001 From: James Pack Date: Sat, 21 Jun 2025 18:30:55 -0400 Subject: [PATCH 6/9] update .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9e8281ee5dc..3711d5e19da 100644 --- a/.gitignore +++ b/.gitignore @@ -285,4 +285,5 @@ profiles.json *.swp # MSBuildCache -/MSBuildCacheLogs/ \ No newline at end of file +/MSBuildCacheLogs/ +enc_temp_folder/ From e2c291b33d82bc0db337da5e574c43905e8a77bd Mon Sep 17 00:00:00 2001 From: James Pack Date: Mon, 23 Jun 2025 10:19:48 -0400 Subject: [PATCH 7/9] Revert custom context menu. Use TextFlyoutMenu instead --- .../QueryExtension/ExtensionPalette.cpp | 38 +++---------------- .../QueryExtension/ExtensionPalette.xaml | 5 +++ 2 files changed, 10 insertions(+), 33 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.cpp b/src/cascadia/QueryExtension/ExtensionPalette.cpp index 07ed2ac6a3f..2bd6bb11f1b 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.cpp +++ b/src/cascadia/QueryExtension/ExtensionPalette.cpp @@ -346,7 +346,7 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation const auto focusedElement = Input::FocusManager::GetFocusedElement(this->XamlRoot()); if (focusedElement && (focusedElement.try_as() || focusedElement.try_as() || focusedElement.try_as())) { - // The context menu for the message don't seem to be found when the VisualTreeHelper walks the visual tree. So we check here + // The context menu for the message doesn't seem to be found when the VisualTreeHelper walks the visual tree. So we check here // if one of the focused elements is a message or a context menu of one of those messages and return early to support // copy and select all using a mouse return; @@ -422,7 +422,10 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation const auto textBlock = focusedElement.as(); textBlock.CopySelectionToClipboard(); } - _queryBox().CopySelectionToClipboard(); + else + { + _queryBox().CopySelectionToClipboard(); + } e.Handled(true); } else if (key == VirtualKey::V && ctrlDown) @@ -458,37 +461,6 @@ namespace winrt::Microsoft::Terminal::Query::Extension::implementation _richBlock{ nullptr } { _richBlock = Microsoft::Terminal::UI::Markdown::Builder::Convert(_messageContent, L""); - _richBlock.IsTextSelectionEnabled(true); - _richBlock.ContextMenuOpening([this](const Windows::Foundation::IInspectable& /*sender*/, const Windows::UI::Xaml::Controls::ContextMenuEventArgs& e) { - // If the context menu is opening we want to show our custom copy option - MenuFlyout menuFlyout; - Windows::UI::Xaml::Controls::FontIcon copyIcon; - copyIcon.Glyph(L"\uE8C8"); // Copy icon - - auto copyItem = MenuFlyoutItem(); - copyItem.Text(RS_(L"CopyMessage")); - copyItem.Icon(copyIcon); - copyItem.Click([this](auto&, auto&) { - const auto messageContent = this->MessageContent(); - - if (!messageContent.empty()) - { - // Create a DataPackage and set the content to the message content - Windows::ApplicationModel::DataTransfer::DataPackage package{}; - package.SetText(messageContent); - Windows::ApplicationModel::DataTransfer::Clipboard::SetContent(package); - } - }); - menuFlyout.Items().Append(copyItem); - - menuFlyout.ShouldConstrainToRootBounds(true); - menuFlyout.Placement(Windows::UI::Xaml::Controls::Primitives::FlyoutPlacementMode::BottomEdgeAlignedRight); - menuFlyout.ShowAt(_richBlock); - e.Handled(true); - }); - _richBlock.AllowFocusWhenDisabled(true); - _richBlock.AllowFocusOnInteraction(true); - const auto resources = Application::Current().Resources(); const auto textBrushObj = _isQuery ? resources.Lookup(box_value(L"TextOnAccentFillColorPrimaryBrush")) : resources.Lookup(box_value(L"TextFillColorPrimaryBrush")); if (const auto textBrush = textBrushObj.try_as()) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.xaml b/src/cascadia/QueryExtension/ExtensionPalette.xaml index 1cf33725200..3551fd117d9 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.xaml +++ b/src/cascadia/QueryExtension/ExtensionPalette.xaml @@ -318,6 +318,11 @@ From 4c53b7215399d61c21f0f7faf1c1da568f10b41c Mon Sep 17 00:00:00 2001 From: James Pack Date: Sat, 2 Aug 2025 08:48:29 -0400 Subject: [PATCH 8/9] Remove unnecessary resource and address other pr feedback --- src/cascadia/QueryExtension/ExtensionPalette.xaml | 2 +- src/cascadia/QueryExtension/Resources/en-US/Resources.resw | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.xaml b/src/cascadia/QueryExtension/ExtensionPalette.xaml index 3551fd117d9..f7e6c9e15ba 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.xaml +++ b/src/cascadia/QueryExtension/ExtensionPalette.xaml @@ -320,7 +320,7 @@ - + diff --git a/src/cascadia/QueryExtension/Resources/en-US/Resources.resw b/src/cascadia/QueryExtension/Resources/en-US/Resources.resw index 3aa6463e9f2..53659e3b933 100644 --- a/src/cascadia/QueryExtension/Resources/en-US/Resources.resw +++ b/src/cascadia/QueryExtension/Resources/en-US/Resources.resw @@ -197,8 +197,4 @@ GitHub Copilot The metadata string to display whenever a response is received from the GitHub Copilot service provider - - Copy Message - Copy terminal chat message - \ No newline at end of file From b7a2de8b285a494edbdee1eeca77d00ab6921ca9 Mon Sep 17 00:00:00 2001 From: James Pack Date: Sat, 2 Aug 2025 09:12:13 -0400 Subject: [PATCH 9/9] Code formatting --- src/cascadia/QueryExtension/ExtensionPalette.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cascadia/QueryExtension/ExtensionPalette.xaml b/src/cascadia/QueryExtension/ExtensionPalette.xaml index f7e6c9e15ba..3764f693384 100644 --- a/src/cascadia/QueryExtension/ExtensionPalette.xaml +++ b/src/cascadia/QueryExtension/ExtensionPalette.xaml @@ -320,7 +320,7 @@ - +