diff --git a/.github/actions/spell-check/expect/5757ec679b03a4240130c3c53766c91bbc5cd6a7.txt b/.github/actions/spell-check/expect/5757ec679b03a4240130c3c53766c91bbc5cd6a7.txt new file mode 100644 index 000000000..9f713a5ff --- /dev/null +++ b/.github/actions/spell-check/expect/5757ec679b03a4240130c3c53766c91bbc5cd6a7.txt @@ -0,0 +1 @@ +renamer \ No newline at end of file diff --git a/doc/cascadia/profiles.schema.json b/doc/cascadia/profiles.schema.json index 770f23f69..95d728673 100644 --- a/doc/cascadia/profiles.schema.json +++ b/doc/cascadia/profiles.schema.json @@ -66,6 +66,7 @@ "paste", "prevTab", "renameTab", + "openTabRenamer", "resetFontSize", "resizePane", "scrollDown", diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp index d71f00fc1..e2ca19453 100644 --- a/src/cascadia/TerminalApp/AppActionHandlers.cpp +++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp @@ -403,6 +403,17 @@ namespace winrt::TerminalApp::implementation args.Handled(true); } + void TerminalPage::_HandleOpenTabRenamer(const IInspectable& /*sender*/, + const ActionEventArgs& args) + { + auto activeTab = _GetFocusedTab(); + if (activeTab) + { + activeTab->ActivateTabRenamer(); + } + args.Handled(true); + } + void TerminalPage::_HandleExecuteCommandline(const IInspectable& /*sender*/, const ActionEventArgs& actionArgs) { diff --git a/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp b/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp index 0e1940efd..6c6d4d980 100644 --- a/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp +++ b/src/cascadia/TerminalApp/ShortcutActionDispatch.cpp @@ -212,6 +212,11 @@ namespace winrt::TerminalApp::implementation _RenameTabHandlers(*this, eventArgs); break; } + case ShortcutAction::OpenTabRenamer: + { + _OpenTabRenamerHandlers(*this, eventArgs); + break; + } case ShortcutAction::ExecuteCommandline: { _ExecuteCommandlineHandlers(*this, eventArgs); diff --git a/src/cascadia/TerminalApp/ShortcutActionDispatch.h b/src/cascadia/TerminalApp/ShortcutActionDispatch.h index a42a2191c..2a9712a94 100644 --- a/src/cascadia/TerminalApp/ShortcutActionDispatch.h +++ b/src/cascadia/TerminalApp/ShortcutActionDispatch.h @@ -56,6 +56,7 @@ namespace winrt::TerminalApp::implementation TYPED_EVENT(SetTabColor, TerminalApp::ShortcutActionDispatch, Microsoft::Terminal::Settings::Model::ActionEventArgs); TYPED_EVENT(OpenTabColorPicker, TerminalApp::ShortcutActionDispatch, Microsoft::Terminal::Settings::Model::ActionEventArgs); TYPED_EVENT(RenameTab, TerminalApp::ShortcutActionDispatch, Microsoft::Terminal::Settings::Model::ActionEventArgs); + TYPED_EVENT(OpenTabRenamer, TerminalApp::ShortcutActionDispatch, Microsoft::Terminal::Settings::Model::ActionEventArgs); TYPED_EVENT(ExecuteCommandline, TerminalApp::ShortcutActionDispatch, Microsoft::Terminal::Settings::Model::ActionEventArgs); TYPED_EVENT(CloseOtherTabs, TerminalApp::ShortcutActionDispatch, Microsoft::Terminal::Settings::Model::ActionEventArgs); TYPED_EVENT(CloseTabsAfter, TerminalApp::ShortcutActionDispatch, Microsoft::Terminal::Settings::Model::ActionEventArgs); diff --git a/src/cascadia/TerminalApp/ShortcutActionDispatch.idl b/src/cascadia/TerminalApp/ShortcutActionDispatch.idl index 91d1bea81..6c53cb32f 100644 --- a/src/cascadia/TerminalApp/ShortcutActionDispatch.idl +++ b/src/cascadia/TerminalApp/ShortcutActionDispatch.idl @@ -42,6 +42,7 @@ namespace TerminalApp event Windows.Foundation.TypedEventHandler SetTabColor; event Windows.Foundation.TypedEventHandler OpenTabColorPicker; event Windows.Foundation.TypedEventHandler RenameTab; + event Windows.Foundation.TypedEventHandler OpenTabRenamer; event Windows.Foundation.TypedEventHandler ExecuteCommandline; event Windows.Foundation.TypedEventHandler CloseOtherTabs; event Windows.Foundation.TypedEventHandler CloseTabsAfter; diff --git a/src/cascadia/TerminalApp/Tab.cpp b/src/cascadia/TerminalApp/Tab.cpp index 2f9cc7058..6ca57fa90 100644 --- a/src/cascadia/TerminalApp/Tab.cpp +++ b/src/cascadia/TerminalApp/Tab.cpp @@ -53,8 +53,7 @@ namespace winrt::TerminalApp::implementation _tabViewItem.DoubleTapped([weakThis = get_weak()](auto&& /*s*/, auto&& /*e*/) { if (auto tab{ weakThis.get() }) { - tab->_inRename = true; - tab->_UpdateTabHeader(); + tab->ActivateTabRenamer(); } }); @@ -398,6 +397,20 @@ namespace winrt::TerminalApp::implementation _UpdateTitle(); } + // Method Description: + // - Show a TextBox in the Header to allow the user to set a string + // to use as an override for the tab's text + // Arguments: + // - + // Return Value: + // - + void Tab::ActivateTabRenamer() + { + _inRename = true; + _receivedKeyDown = false; + _UpdateTabHeader(); + } + // Method Description: // - Register any event handlers that we may need with the given TermControl. // This should be called on each and every TermControl that we add to the tree @@ -577,8 +590,7 @@ namespace winrt::TerminalApp::implementation renameTabMenuItem.Click([weakThis](auto&&, auto&&) { if (auto tab{ weakThis.get() }) { - tab->_inRename = true; - tab->_UpdateTabHeader(); + tab->ActivateTabRenamer(); } }); renameTabMenuItem.Text(RS_(L"RenameTabText")); @@ -755,6 +767,14 @@ namespace winrt::TerminalApp::implementation } }); + // We'll only process the KeyUp event if we received an initial KeyDown event first. + // Avoids issue immediately closing the tab rename when we see the enter KeyUp event that was + // sent to the command palette to trigger the openTabRenamer action in the first place. + tabTextBox.KeyDown([weakThis](const IInspectable&, Input::KeyRoutedEventArgs const&) { + auto tab{ weakThis.get() }; + tab->_receivedKeyDown = true; + }); + // NOTE: (Preview)KeyDown does not work here. If you use that, we'll // remove the TextBox from the UI tree, then the following KeyUp // will bubble to the NewTabButton, which we don't want to have @@ -762,7 +782,7 @@ namespace winrt::TerminalApp::implementation tabTextBox.KeyUp([weakThis](const IInspectable& sender, Input::KeyRoutedEventArgs const& e) { auto tab{ weakThis.get() }; auto textBox{ sender.try_as() }; - if (tab && textBox) + if (tab && textBox && tab->_receivedKeyDown) { switch (e.OriginalKey()) { diff --git a/src/cascadia/TerminalApp/Tab.h b/src/cascadia/TerminalApp/Tab.h index adfa4307b..1eb4f85a9 100644 --- a/src/cascadia/TerminalApp/Tab.h +++ b/src/cascadia/TerminalApp/Tab.h @@ -53,6 +53,7 @@ namespace winrt::TerminalApp::implementation void SetTabText(winrt::hstring title); void ResetTabText(); + void ActivateTabRenamer(); std::optional GetTabColor(); @@ -101,6 +102,7 @@ namespace winrt::TerminalApp::implementation winrt::Windows::UI::Xaml::Controls::MenuFlyoutItem _closeTabsAfterMenuItem{}; bool _focused{ false }; + bool _receivedKeyDown{ false }; winrt::Microsoft::UI::Xaml::Controls::TabViewItem _tabViewItem{ nullptr }; winrt::hstring _runtimeTabText{}; diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index dc42291ca..8af85650f 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -908,6 +908,7 @@ namespace winrt::TerminalApp::implementation _actionDispatch->SetTabColor({ this, &TerminalPage::_HandleSetTabColor }); _actionDispatch->OpenTabColorPicker({ this, &TerminalPage::_HandleOpenTabColorPicker }); _actionDispatch->RenameTab({ this, &TerminalPage::_HandleRenameTab }); + _actionDispatch->OpenTabRenamer({ this, &TerminalPage::_HandleOpenTabRenamer }); _actionDispatch->ExecuteCommandline({ this, &TerminalPage::_HandleExecuteCommandline }); _actionDispatch->CloseOtherTabs({ this, &TerminalPage::_HandleCloseOtherTabs }); _actionDispatch->CloseTabsAfter({ this, &TerminalPage::_HandleCloseTabsAfter }); diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index e651fc6c5..9df26d242 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -256,6 +256,7 @@ namespace winrt::TerminalApp::implementation void _HandleSetTabColor(const IInspectable& sender, const Microsoft::Terminal::Settings::Model::ActionEventArgs& args); void _HandleOpenTabColorPicker(const IInspectable& sender, const Microsoft::Terminal::Settings::Model::ActionEventArgs& args); void _HandleRenameTab(const IInspectable& sender, const Microsoft::Terminal::Settings::Model::ActionEventArgs& args); + void _HandleOpenTabRenamer(const IInspectable& sender, const Microsoft::Terminal::Settings::Model::ActionEventArgs& args); void _HandleExecuteCommandline(const IInspectable& sender, const Microsoft::Terminal::Settings::Model::ActionEventArgs& args); void _HandleToggleCommandPalette(const IInspectable& sender, const Microsoft::Terminal::Settings::Model::ActionEventArgs& args); void _HandleCloseOtherTabs(const IInspectable& sender, const Microsoft::Terminal::Settings::Model::ActionEventArgs& args); diff --git a/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp b/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp index 66a58270c..ac5b7523b 100644 --- a/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp +++ b/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp @@ -27,6 +27,7 @@ static constexpr std::string_view OpenTabColorPickerKey{ "openTabColorPicker" }; static constexpr std::string_view PasteTextKey{ "paste" }; static constexpr std::string_view PrevTabKey{ "prevTab" }; static constexpr std::string_view RenameTabKey{ "renameTab" }; +static constexpr std::string_view OpenTabRenamerKey{ "openTabRenamer" }; static constexpr std::string_view ResetFontSizeKey{ "resetFontSize" }; static constexpr std::string_view ResizePaneKey{ "resizePane" }; static constexpr std::string_view ScrolldownKey{ "scrollDown" }; @@ -84,6 +85,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation { PasteTextKey, ShortcutAction::PasteText }, { PrevTabKey, ShortcutAction::PrevTab }, { RenameTabKey, ShortcutAction::RenameTab }, + { OpenTabRenamerKey, ShortcutAction::OpenTabRenamer }, { ResetFontSizeKey, ShortcutAction::ResetFontSize }, { ResizePaneKey, ShortcutAction::ResizePane }, { ScrolldownKey, ShortcutAction::ScrollDown }, @@ -277,6 +279,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation { ShortcutAction::PasteText, RS_(L"PasteTextCommandKey") }, { ShortcutAction::PrevTab, RS_(L"PrevTabCommandKey") }, { ShortcutAction::RenameTab, RS_(L"ResetTabNameCommandKey") }, + { ShortcutAction::OpenTabRenamer, RS_(L"OpenTabRenamerCommandKey") }, { ShortcutAction::ResetFontSize, RS_(L"ResetFontSizeCommandKey") }, { ShortcutAction::ResizePane, RS_(L"ResizePaneCommandKey") }, { ShortcutAction::ScrollDown, RS_(L"ScrollDownCommandKey") }, diff --git a/src/cascadia/TerminalSettingsModel/KeyMapping.idl b/src/cascadia/TerminalSettingsModel/KeyMapping.idl index 4901285e7..95aa16877 100644 --- a/src/cascadia/TerminalSettingsModel/KeyMapping.idl +++ b/src/cascadia/TerminalSettingsModel/KeyMapping.idl @@ -43,6 +43,7 @@ namespace Microsoft.Terminal.Settings.Model SetTabColor, OpenTabColorPicker, RenameTab, + OpenTabRenamer, ExecuteCommandline, ToggleCommandPalette, CloseOtherTabs, diff --git a/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw index 2bccbc967..ccfeadbbb 100644 --- a/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw @@ -259,6 +259,9 @@ Reset tab title + + Rename tab title... + Resize pane diff --git a/src/cascadia/TerminalSettingsModel/defaults.json b/src/cascadia/TerminalSettingsModel/defaults.json index dfa3a7775..ebd4ad256 100644 --- a/src/cascadia/TerminalSettingsModel/defaults.json +++ b/src/cascadia/TerminalSettingsModel/defaults.json @@ -287,6 +287,8 @@ { "command": "find", "keys": "ctrl+shift+f" }, { "command": "toggleRetroEffect" }, { "command": "openTabColorPicker" }, + { "command": "renameTab" }, + { "command": "openTabRenamer" }, { "command": "commandPalette", "keys":"ctrl+shift+p" }, // Tab Management