Skip to content

Commit 5122236

Browse files
committed
Add support for tmux control mode (#3656)
Get the input from connection
1 parent eefdfd8 commit 5122236

File tree

3 files changed

+20
-42
lines changed

3 files changed

+20
-42
lines changed

src/cascadia/TerminalApp/TmuxControl.cpp

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,8 @@ namespace winrt::TerminalApp::implementation
546546
auto paneContent{ winrt::make<TerminalPaneContent> (_profile, _page._terminalSettingsCache, control) };
547547
auto pane = std::make_shared<Pane>(paneContent);
548548

549+
connection.Initialize(nullptr);
550+
549551
control.Initialized([this, paneId](auto, auto) {
550552
auto search = _attachedPanes.find(paneId);
551553
if (search == _attachedPanes.end())
@@ -555,46 +557,9 @@ namespace winrt::TerminalApp::implementation
555557
search->second.initialized = true;
556558
});
557559

558-
control.CharSent([this, paneId](auto, auto& args) {
559-
auto ch = args.Character();
560-
std::wstring keys(1, static_cast<wchar_t>(ch));
561-
_SendKey(paneId, keys);
562-
});
563-
564-
control.KeySent([this, paneId](auto, auto& args) {
565-
auto keyDown = args.KeyDown();
566-
if (!keyDown)
567-
{
568-
return;
569-
}
570-
571-
auto ch = static_cast<VirtualKey>(args.VKey());
572-
std::wstring out = L"";
573-
if (ch == VirtualKey::Up)
574-
{
575-
out = L"\033[A";
576-
}
577-
else if (ch == VirtualKey::Down)
578-
{
579-
out = L"\033[B";
580-
}
581-
else if (ch == VirtualKey::Right)
582-
{
583-
out = L"\033[C";
584-
}
585-
else if (ch == VirtualKey::Left)
586-
{
587-
out = L"\033[D";
588-
}
589-
else if (ch == VirtualKey::Tab)
590-
{
591-
out = L"\t";
592-
}
593-
594-
if (out.size() > 0)
595-
{
596-
_SendKey(paneId, out);
597-
}
560+
connection.TerminalOutput([this, paneId](auto keys) {
561+
std::wstring out{ keys };
562+
_SendKey(paneId, out);
598563
});
599564

600565
control.GotFocus([this, windowId, paneId](auto, auto) {

src/cascadia/TerminalConnection/DummyConnection.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,21 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation
1515
{
1616
}
1717

18-
void DummyConnection::WriteInput(const winrt::array_view<const char16_t> /*buffer*/)
18+
void DummyConnection::Initialize(const Windows::Foundation::Collections::ValueSet& /*settings*/)
1919
{
20+
// Remove the handlers registered by control core, as there is currently no better interface available.
21+
TerminalOutput._handlers.clear();
22+
}
23+
24+
void DummyConnection::WriteInput(const winrt::array_view<const char16_t> buffer)
25+
{
26+
const auto data = winrt_array_to_wstring_view(buffer);
27+
std::wstringstream prettyPrint;
28+
for (const auto& wch : data)
29+
{
30+
prettyPrint << wch;
31+
}
32+
TerminalOutput.raise(prettyPrint.str());
2033
}
2134

2235
void DummyConnection::Resize(uint32_t /*rows*/, uint32_t /*columns*/) noexcept

src/cascadia/TerminalConnection/DummyConnection.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation
1616
void Resize(uint32_t rows, uint32_t columns) noexcept;
1717
void Close() noexcept;
1818

19-
void Initialize(const Windows::Foundation::Collections::ValueSet& /*settings*/) const noexcept {};
19+
void Initialize(const Windows::Foundation::Collections::ValueSet& settings);
2020

2121
winrt::guid SessionId() const noexcept { return {}; }
2222
ConnectionState State() const noexcept { return ConnectionState::Connected; }

0 commit comments

Comments
 (0)