diff options
| author | Maxime Coste <mawww@kakoune.org> | 2017-04-12 10:39:17 +0100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2017-04-12 10:39:17 +0100 |
| commit | 91bfd714e4be3484e04eaadc5bbe630861fff652 (patch) | |
| tree | d8b2eb554c7feaf44545d650351480b468f4886d /src/remote.cc | |
| parent | 80dd9ec4cb68669df4688c621486a27dd9b33548 (diff) | |
Place hardware terminal cursor at the current main cursor/prompt cursor position
Fixes #1318
Also fixes https://gitlab.com/gnachman/iterm2/issues/5408
Diffstat (limited to 'src/remote.cc')
| -rw-r--r-- | src/remote.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/remote.cc b/src/remote.cc index 721c4759..bb577aa2 100644 --- a/src/remote.cc +++ b/src/remote.cc @@ -35,6 +35,7 @@ enum class MessageType : char InfoHide, Draw, DrawStatus, + SetCursor, Refresh, SetOptions, Key @@ -335,6 +336,8 @@ public: const DisplayLine& mode_line, const Face& default_face) override; + void set_cursor(CursorMode mode, DisplayCoord coord) override; + void refresh(bool force) override; DisplayCoord dimensions() override { return m_dimensions; } @@ -483,6 +486,14 @@ void RemoteUI::draw_status(const DisplayLine& status_line, m_socket_watcher.events() |= FdEvents::Write; } +void RemoteUI::set_cursor(CursorMode mode, DisplayCoord coord) +{ + MsgWriter msg{m_send_buffer, MessageType::SetCursor}; + msg.write(mode); + msg.write(coord); + m_socket_watcher.events() |= FdEvents::Write; +} + void RemoteUI::refresh(bool force) { MsgWriter msg{m_send_buffer, MessageType::Refresh}; @@ -611,6 +622,13 @@ RemoteClient::RemoteClient(StringView session, std::unique_ptr<UserInterface>&& m_ui->draw_status(status_line, mode_line, default_face); break; } + case MessageType::SetCursor: + { + auto mode = reader.read<CursorMode>(); + auto coord = reader.read<DisplayCoord>(); + m_ui->set_cursor(mode, coord); + break; + } case MessageType::Refresh: m_ui->refresh(reader.read<bool>()); break; |
