diff --git a/src/terminal/adapter/ITermDispatch.hpp b/src/terminal/adapter/ITermDispatch.hpp index e3976996433..d59d7ef3335 100644 --- a/src/terminal/adapter/ITermDispatch.hpp +++ b/src/terminal/adapter/ITermDispatch.hpp @@ -147,6 +147,8 @@ class Microsoft::Console::VirtualTerminal::ITermDispatch virtual bool DoVsCodeAction(const std::wstring_view string) = 0; + virtual bool DoWarpAction(const std::wstring_view string) = 0; + virtual StringHandler DownloadDRCS(const VTInt fontNumber, const VTParameter startChar, const DispatchTypes::DrcsEraseControl eraseControl, diff --git a/src/terminal/adapter/adaptDispatch.cpp b/src/terminal/adapter/adaptDispatch.cpp index 9205e798d04..460d9806a41 100644 --- a/src/terminal/adapter/adaptDispatch.cpp +++ b/src/terminal/adapter/adaptDispatch.cpp @@ -3756,6 +3756,20 @@ bool AdaptDispatch::DoConEmuAction(const std::wstring_view string) return false; } +// Method Description: +// - Performs a Warp Action +// - +bool AdaptDispatch::DoWarpAction(const std::wstring_view) +{ + const auto isConPty = _api.IsConsolePty(); + if (isConPty) { + // Flush the frame manually, to make sure marks end up on the right + // line, like the alt buffer sequence. + _renderer.TriggerFlush(false); + } + return false; +} + // Method Description: // - Performs a iTerm2 action // - Ascribes to the ITermDispatch interface diff --git a/src/terminal/adapter/adaptDispatch.hpp b/src/terminal/adapter/adaptDispatch.hpp index fac54bcdc23..3e033d06ad2 100644 --- a/src/terminal/adapter/adaptDispatch.hpp +++ b/src/terminal/adapter/adaptDispatch.hpp @@ -150,6 +150,8 @@ namespace Microsoft::Console::VirtualTerminal bool DoVsCodeAction(const std::wstring_view string) override; + bool DoWarpAction(const std::wstring_view string) override; + StringHandler DownloadDRCS(const VTInt fontNumber, const VTParameter startChar, const DispatchTypes::DrcsEraseControl eraseControl, diff --git a/src/terminal/adapter/termDispatch.hpp b/src/terminal/adapter/termDispatch.hpp index 3a1d19a0964..77ef073da4f 100644 --- a/src/terminal/adapter/termDispatch.hpp +++ b/src/terminal/adapter/termDispatch.hpp @@ -140,6 +140,8 @@ class Microsoft::Console::VirtualTerminal::TermDispatch : public Microsoft::Cons bool DoVsCodeAction(const std::wstring_view /*string*/) override { return false; } + bool DoWarpAction(const std::wstring_view /*string*/) override { return false; } + StringHandler DownloadDRCS(const VTInt /*fontNumber*/, const VTParameter /*startChar*/, const DispatchTypes::DrcsEraseControl /*eraseControl*/, diff --git a/src/terminal/parser/OutputStateMachineEngine.cpp b/src/terminal/parser/OutputStateMachineEngine.cpp index 7568f154677..5bdce5ad7e5 100644 --- a/src/terminal/parser/OutputStateMachineEngine.cpp +++ b/src/terminal/parser/OutputStateMachineEngine.cpp @@ -913,6 +913,11 @@ bool OutputStateMachineEngine::ActionOscDispatch(const size_t parameter, const s success = _dispatch->DoVsCodeAction(string); break; } + case OscActionCodes::WarpAction: + { + success = _dispatch->DoWarpAction(string); + break; + } default: // If no functions to call, overall dispatch was a failure. success = false; diff --git a/src/terminal/parser/OutputStateMachineEngine.hpp b/src/terminal/parser/OutputStateMachineEngine.hpp index 0970e45dee2..c2658e70938 100644 --- a/src/terminal/parser/OutputStateMachineEngine.hpp +++ b/src/terminal/parser/OutputStateMachineEngine.hpp @@ -229,6 +229,7 @@ namespace Microsoft::Console::VirtualTerminal FinalTermAction = 133, VsCodeAction = 633, ITerm2Action = 1337, + WarpAction = 9278, }; bool _GetOscSetColorTable(const std::wstring_view string,