Skip to content

Commit 88a236c

Browse files
authored
Revert "Implement OSC 7 for setting the CWD (#20019)" (#20116)
This reverts commit 7f5185e. I have some new concerns about the fix in #20094, so I'm considering reverting OSC 7 from 1.25. Refs #20108
1 parent 0252c78 commit 88a236c

16 files changed

Lines changed: 28 additions & 46 deletions

src/cascadia/TerminalApp/AppActionHandlers.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1475,7 +1475,7 @@ namespace winrt::TerminalApp::implementation
14751475
WI_IsAnyFlagSet(source, SuggestionsSource::CommandHistory | SuggestionsSource::QuickFixes);
14761476
if (const auto& control{ _GetActiveControl() })
14771477
{
1478-
currentWorkingDirectory = control.WorkingDirectory();
1478+
currentWorkingDirectory = control.CurrentWorkingDirectory();
14791479

14801480
if (shouldGetContext)
14811481
{

src/cascadia/TerminalApp/TerminalPage.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1600,7 +1600,8 @@ namespace winrt::TerminalApp::implementation
16001600

16011601
// Replace the Starting directory with the CWD, if given
16021602
const auto workingDirectory = control.WorkingDirectory();
1603-
if (Utils::IsValidDirectory(workingDirectory.c_str()))
1603+
const auto validWorkingDirectory = !workingDirectory.empty();
1604+
if (validWorkingDirectory)
16041605
{
16051606
controlSettings.DefaultSettings()->StartingDirectory(workingDirectory);
16061607
}
@@ -3558,7 +3559,8 @@ namespace winrt::TerminalApp::implementation
35583559
profile = GetClosestProfileForDuplicationOfProfile(profile);
35593560
controlSettings = Settings::TerminalSettings::CreateWithProfile(_settings, profile);
35603561
const auto workingDirectory = tabImpl->GetActiveTerminalControl().WorkingDirectory();
3561-
if (Utils::IsValidDirectory(workingDirectory.c_str()))
3562+
const auto validWorkingDirectory = !workingDirectory.empty();
3563+
if (validWorkingDirectory)
35623564
{
35633565
controlSettings.DefaultSettings()->StartingDirectory(workingDirectory);
35643566
}

src/cascadia/TerminalApp/TerminalPaneContent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ namespace winrt::TerminalApp::implementation
102102

103103
args.Profile(::Microsoft::Console::Utils::GuidToString(_profile.Guid()));
104104
// If we know the user's working directory use it instead of the profile.
105-
if (const auto dir = _control.WorkingDirectory(); ::Microsoft::Console::Utils::IsValidDirectory(dir.c_str()))
105+
if (const auto dir = _control.WorkingDirectory(); !dir.empty())
106106
{
107107
args.StartingDirectory(dir);
108108
}

src/cascadia/TerminalControl/ControlCore.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2426,6 +2426,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation
24262426
return *context;
24272427
}
24282428

2429+
winrt::hstring ControlCore::CurrentWorkingDirectory() const
2430+
{
2431+
return winrt::hstring{ _terminal->GetWorkingDirectory() };
2432+
}
2433+
24292434
bool ControlCore::QuickFixesAvailable() const noexcept
24302435
{
24312436
return _cachedQuickFixes && _cachedQuickFixes.Size() > 0;

src/cascadia/TerminalControl/ControlCore.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
191191

192192
void ContextMenuSelectCommand();
193193
void ContextMenuSelectOutput();
194+
195+
winrt::hstring CurrentWorkingDirectory() const;
194196
#pragma endregion
195197

196198
#pragma region ITerminalInput

src/cascadia/TerminalControl/ICoreState.idl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,7 @@ namespace Microsoft.Terminal.Control
6060
void SelectOutput(Boolean goUp);
6161
IVector<ScrollMark> ScrollMarks { get; };
6262

63+
String CurrentWorkingDirectory { get; };
64+
6365
};
6466
}

src/cascadia/TerminalControl/TermControl.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3733,6 +3733,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
37333733
{
37343734
return _core.CommandHistory();
37353735
}
3736+
winrt::hstring TermControl::CurrentWorkingDirectory() const
3737+
{
3738+
return _core.CurrentWorkingDirectory();
3739+
}
37363740

37373741
void TermControl::UpdateWinGetSuggestions(Windows::Foundation::Collections::IVector<hstring> suggestions)
37383742
{

src/cascadia/TerminalControl/TermControl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
117117
void ScrollToMark(const Control::ScrollToMarkDirection& direction);
118118
void SelectCommand(const bool goUp);
119119
void SelectOutput(const bool goUp);
120+
121+
winrt::hstring CurrentWorkingDirectory() const;
120122
#pragma endregion
121123

122124
void ScrollViewport(int viewTop);

src/terminal/adapter/ITermDispatch.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ class Microsoft::Console::VirtualTerminal::ITermDispatch
8282
virtual void BackIndex() = 0; // DECBI
8383
virtual void ForwardIndex() = 0; // DECFI
8484
virtual void SetWindowTitle(std::wstring_view title) = 0; // DECSWT, OscWindowTitle
85-
virtual void SetCurrentWorkingDirectory(const std::wstring_view uri) = 0; // OSC 7
8685
virtual void HorizontalTabSet() = 0; // HTS
8786
virtual void ForwardTab(const VTInt numTabs) = 0; // CHT, HT
8887
virtual void BackwardsTab(const VTInt numTabs) = 0; // CBT
@@ -157,9 +156,13 @@ class Microsoft::Console::VirtualTerminal::ITermDispatch
157156
virtual void EndHyperlink() = 0;
158157

159158
virtual void DoConEmuAction(const std::wstring_view string) = 0;
159+
160160
virtual void DoITerm2Action(const std::wstring_view string) = 0;
161+
161162
virtual void DoFinalTermAction(const std::wstring_view string) = 0;
163+
162164
virtual void DoVsCodeAction(const std::wstring_view string) = 0;
165+
163166
virtual void DoWTAction(const std::wstring_view string) = 0;
164167

165168
virtual StringHandler DefineSixelImage(const VTInt macroParameter,

src/terminal/adapter/adaptDispatch.cpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,27 +2615,6 @@ void AdaptDispatch::SetWindowTitle(std::wstring_view title)
26152615
_api.SetWindowTitle(title);
26162616
}
26172617

2618-
// OSC 7 - Set Current Working Directory
2619-
// While ConEmu's OSC 9;9 works well for native Windows paths,
2620-
// OSC 7 uses file URIs, which may not always work.
2621-
void AdaptDispatch::SetCurrentWorkingDirectory(std::wstring_view uri)
2622-
{
2623-
// Ensure that the URI has a null terminator.
2624-
std::wstring path{ uri };
2625-
2626-
// PathCreateFromUrlW supports writing to the input pointer,
2627-
// and the resulting path can never be longer than the URI.
2628-
const auto ptr = path.data();
2629-
auto len = gsl::narrow<DWORD>(path.size());
2630-
THROW_IF_FAILED(PathCreateFromUrlW(ptr, ptr, &len, 0));
2631-
path.resize(len);
2632-
2633-
if (til::is_legal_path(path))
2634-
{
2635-
_api.SetWorkingDirectory(path);
2636-
}
2637-
}
2638-
26392618
//Routine Description:
26402619
// HTS - sets a VT tab stop in the cursor's current column.
26412620
//Arguments:

0 commit comments

Comments
 (0)