From 637d57a904f8b41b65b840f4de50a623d58d620a Mon Sep 17 00:00:00 2001 From: nicolasalarconrapela Date: Wed, 13 May 2026 15:27:03 +0200 Subject: [PATCH] fix(export): Enter key leakage to the terminal when exporting text via the command palette --- src/cascadia/TerminalApp/AppActionHandlers.cpp | 18 +++++++++--------- src/cascadia/TerminalApp/CommandPalette.cpp | 16 ++++++++++++++-- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp index 7e0edef7bd5..714ea9aaea2 100644 --- a/src/cascadia/TerminalApp/AppActionHandlers.cpp +++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp @@ -1200,24 +1200,24 @@ namespace winrt::TerminalApp::implementation void TerminalPage::_HandleExportBuffer(const IInspectable& sender, const ActionEventArgs& args) { + if (args) + { + args.Handled(true); + } + if (const auto activeTab{ _senderOrFocusedTab(sender) }) { + winrt::hstring path; + if (args) { if (const auto& realArgs = args.ActionArgs().try_as()) { - _ExportTab(*activeTab, realArgs.Path()); - args.Handled(true); - return; + path = realArgs.Path(); } } - // If we didn't have args, or the args weren't ExportBufferArgs (somehow) - _ExportTab(*activeTab, L""); - if (args) - { - args.Handled(true); - } + _ExportTab(*activeTab, path); } } diff --git a/src/cascadia/TerminalApp/CommandPalette.cpp b/src/cascadia/TerminalApp/CommandPalette.cpp index 61607319f16..93edf521e23 100644 --- a/src/cascadia/TerminalApp/CommandPalette.cpp +++ b/src/cascadia/TerminalApp/CommandPalette.cpp @@ -332,8 +332,8 @@ namespace winrt::TerminalApp::implementation const auto selectedCommand = _filteredActionsView().SelectedItem(); const auto filteredCommand = selectedCommand.try_as(); - _dispatchCommand(filteredCommand); e.Handled(true); + _dispatchCommand(filteredCommand); } else if (key == VirtualKey::Escape) { @@ -795,7 +795,19 @@ namespace winrt::TerminalApp::implementation // All other actions can just be dispatched. if (command.ActionAndArgs().Action() != ShortcutAction::ToggleCommandPalette) { - DispatchCommandRequested.raise(*this, command); + if (command.ActionAndArgs().Action() == ShortcutAction::ExportBuffer) + { + Dispatcher().RunAsync(CoreDispatcherPriority::Low, [weak = get_weak(), command]() { + if (auto self{ weak.get() }) + { + self->DispatchCommandRequested.raise(*self, command); + } + }); + } + else + { + DispatchCommandRequested.raise(*this, command); + } } TraceLoggingWrite(