diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp
index 43fa9630a6a..cda4afce5f1 100644
--- a/src/cascadia/TerminalApp/AppActionHandlers.cpp
+++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp
@@ -1021,6 +1021,13 @@ namespace winrt::TerminalApp::implementation
args.Handled(true);
}
+ void TerminalPage::_HandleDisplayWorkingDirectory(const IInspectable& /*sender*/,
+ const ActionEventArgs& args)
+ {
+ ShowTerminalWorkingDirectory();
+ args.Handled(true);
+ }
+
void TerminalPage::_HandleGlobalSummon(const IInspectable& /*sender*/,
const ActionEventArgs& args)
{
diff --git a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw
index f8f45105018..0322b1da9d8 100644
--- a/src/cascadia/TerminalApp/Resources/en-US/Resources.resw
+++ b/src/cascadia/TerminalApp/Resources/en-US/Resources.resw
@@ -700,6 +700,9 @@
Another window with that name already exists
+
+ This is the CWD of the Terminal window itself
+
Maximize
@@ -823,4 +826,4 @@
Close the active pane if multiple panes are present
-
\ No newline at end of file
+
diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp
index 3b4becfcfe7..678d70f2aed 100644
--- a/src/cascadia/TerminalApp/TerminalPage.cpp
+++ b/src/cascadia/TerminalApp/TerminalPage.cpp
@@ -4067,6 +4067,33 @@ namespace winrt::TerminalApp::implementation
}
}
+ winrt::fire_and_forget TerminalPage::ShowTerminalWorkingDirectory()
+ {
+ auto weakThis{ get_weak() };
+ co_await wil::resume_foreground(Dispatcher());
+ if (auto page{ weakThis.get() })
+ {
+ // If we haven't ever loaded the TeachingTip, then do so now and
+ // create the toast for it.
+ if (page->_windowCwdToast == nullptr)
+ {
+ if (auto tip{ page->FindName(L"WindowCwdToast").try_as() })
+ {
+ page->_windowCwdToast = std::make_shared(tip);
+ // Make sure to use the weak ref when setting up this
+ // callback.
+ tip.Closed({ page->get_weak(), &TerminalPage::_FocusActiveControl });
+ }
+ }
+ _UpdateTeachingTipTheme(WindowCwdToast().try_as());
+
+ if (page->_windowCwdToast != nullptr)
+ {
+ page->_windowCwdToast->Open();
+ }
+ }
+ }
+
// Method Description:
// - Called when the user hits the "Ok" button on the WindowRenamer TeachingTip.
// - Will raise an event that will bubble up to the monarch, asking if this
diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h
index 867e93eece3..95c291ee202 100644
--- a/src/cascadia/TerminalApp/TerminalPage.h
+++ b/src/cascadia/TerminalApp/TerminalPage.h
@@ -149,6 +149,7 @@ namespace winrt::TerminalApp::implementation
winrt::fire_and_forget IdentifyWindow();
winrt::fire_and_forget RenameFailed();
+ winrt::fire_and_forget ShowTerminalWorkingDirectory();
winrt::fire_and_forget ProcessStartupActions(Windows::Foundation::Collections::IVector actions,
const bool initial,
@@ -257,6 +258,7 @@ namespace winrt::TerminalApp::implementation
std::shared_ptr _windowIdToast{ nullptr };
std::shared_ptr _windowRenameFailedToast{ nullptr };
+ std::shared_ptr _windowCwdToast{ nullptr };
winrt::Windows::UI::Xaml::Controls::TextBox::LayoutUpdated_revoker _renamerLayoutUpdatedRevoker;
int _renamerLayoutCount{ 0 };
diff --git a/src/cascadia/TerminalApp/TerminalPage.xaml b/src/cascadia/TerminalApp/TerminalPage.xaml
index ade311fcde7..28c68df249a 100644
--- a/src/cascadia/TerminalApp/TerminalPage.xaml
+++ b/src/cascadia/TerminalApp/TerminalPage.xaml
@@ -205,5 +205,12 @@
Text="{x:Bind WindowProperties.WindowName, Mode=OneWay}" />
+
+
diff --git a/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp b/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp
index 3efeb81d5b7..9818a2e1c85 100644
--- a/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp
+++ b/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp
@@ -72,6 +72,7 @@ static constexpr std::string_view IdentifyWindowKey{ "identifyWindow" };
static constexpr std::string_view IdentifyWindowsKey{ "identifyWindows" };
static constexpr std::string_view RenameWindowKey{ "renameWindow" };
static constexpr std::string_view OpenWindowRenamerKey{ "openWindowRenamer" };
+static constexpr std::string_view DisplayWorkingDirectoryKey{ "displayTerminalCwd" };
static constexpr std::string_view GlobalSummonKey{ "globalSummon" };
static constexpr std::string_view QuakeModeKey{ "quakeMode" };
static constexpr std::string_view FocusPaneKey{ "focusPane" };
@@ -401,6 +402,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
{ ShortcutAction::IdentifyWindows, RS_(L"IdentifyWindowsCommandKey") },
{ ShortcutAction::RenameWindow, RS_(L"ResetWindowNameCommandKey") },
{ ShortcutAction::OpenWindowRenamer, RS_(L"OpenWindowRenamerCommandKey") },
+ { ShortcutAction::DisplayWorkingDirectory, L"Display Terminal's CWD TODO! localize" },
{ ShortcutAction::GlobalSummon, MustGenerate },
{ ShortcutAction::QuakeMode, RS_(L"QuakeModeCommandKey") },
{ ShortcutAction::FocusPane, MustGenerate },
diff --git a/src/cascadia/TerminalSettingsModel/AllShortcutActions.h b/src/cascadia/TerminalSettingsModel/AllShortcutActions.h
index b6a2228b88c..328fd005885 100644
--- a/src/cascadia/TerminalSettingsModel/AllShortcutActions.h
+++ b/src/cascadia/TerminalSettingsModel/AllShortcutActions.h
@@ -85,6 +85,7 @@
ON_ALL_ACTIONS(IdentifyWindows) \
ON_ALL_ACTIONS(RenameWindow) \
ON_ALL_ACTIONS(OpenWindowRenamer) \
+ ON_ALL_ACTIONS(DisplayWorkingDirectory) \
ON_ALL_ACTIONS(GlobalSummon) \
ON_ALL_ACTIONS(QuakeMode) \
ON_ALL_ACTIONS(FocusPane) \
diff --git a/src/cascadia/TerminalSettingsModel/defaults.json b/src/cascadia/TerminalSettingsModel/defaults.json
index c67187e4528..f15392a366b 100644
--- a/src/cascadia/TerminalSettingsModel/defaults.json
+++ b/src/cascadia/TerminalSettingsModel/defaults.json
@@ -374,6 +374,7 @@
{ "command": "openSystemMenu", "keys": "alt+space" },
{ "command": "quit" },
{ "command": "restoreLastClosed"},
+ { "command": "displayTerminalCwd"},
// Tab Management
// "command": "closeTab" is unbound by default.