7b7dea009c
Instead of having a separate method for setting each mouse and keyboard mode, this PR consolidates them all into a single method which takes a mode parameter, and stores the modes in a `til::enumset` rather than having a separate `bool` for each mode. This enables us to get rid of a lot of boilerplate code, and makes the code easier to extend when we want to introduce additional modes in the future. It'll also makes it easier to read back the state of the various modes when implementing the `DECRQM` query. Most of the complication is in the `TerminalInput` class, which had to be adjusted to work with an `enumset` in place of all the `bool` fields. For the rest, it was largely a matter of replacing calls to all the old mode setting methods with the new `SetInputMode` method, and deleting a bunch of unused code. One thing worth mentioning is that the `AdaptDispatch` implementation used to have a `_ShouldPassThroughInputModeChange` method that was called after every mode change. This code has now been moved up into the `SetInputMode` implementation in `ConhostInternalGetSet` so it's just handled in one place. Keeping this out of the dispatch class will also be beneficial for sharing the implementation with `TerminalDispatch`. ## Validation The updated interface necessitated some adjustments to the tests in `AdapterTest` and `MouseInputTest`, but the essential structure of the tests remains unchanged, and everything still passes. I've also tested the keyboard and mouse modes in Vttest and confirmed they still work at least as well as they did before (both conhost and Windows Terminal), and I tested the alternate scroll mode manually (conhost only). Simplifying the `ConGetSet` and `ITerminalApi` is also part of the plan to de-duplicate the `AdaptDispatch` and `TerminalDispatch` implementation (#3849).
76 lines
3.6 KiB
C++
76 lines
3.6 KiB
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
#pragma once
|
|
|
|
#include "../../terminal/adapter/DispatchTypes.hpp"
|
|
#include "../../terminal/input/terminalInput.hpp"
|
|
#include "../../buffer/out/TextAttribute.hpp"
|
|
#include "../../types/inc/Viewport.hpp"
|
|
|
|
namespace Microsoft::Terminal::Core
|
|
{
|
|
class ITerminalApi
|
|
{
|
|
public:
|
|
virtual ~ITerminalApi() {}
|
|
ITerminalApi(const ITerminalApi&) = default;
|
|
ITerminalApi(ITerminalApi&&) = default;
|
|
ITerminalApi& operator=(const ITerminalApi&) = default;
|
|
ITerminalApi& operator=(ITerminalApi&&) = default;
|
|
|
|
virtual bool PrintString(std::wstring_view string) noexcept = 0;
|
|
virtual bool ExecuteChar(wchar_t wch) noexcept = 0;
|
|
|
|
virtual TextAttribute GetTextAttributes() const noexcept = 0;
|
|
virtual void SetTextAttributes(const TextAttribute& attrs) noexcept = 0;
|
|
|
|
virtual Microsoft::Console::Types::Viewport GetBufferSize() noexcept = 0;
|
|
virtual bool SetCursorPosition(short x, short y) noexcept = 0;
|
|
virtual COORD GetCursorPosition() noexcept = 0;
|
|
virtual bool SetCursorVisibility(const bool visible) noexcept = 0;
|
|
virtual bool CursorLineFeed(const bool withReturn) noexcept = 0;
|
|
virtual bool EnableCursorBlinking(const bool enable) noexcept = 0;
|
|
|
|
virtual bool DeleteCharacter(const size_t count) noexcept = 0;
|
|
virtual bool InsertCharacter(const size_t count) noexcept = 0;
|
|
virtual bool EraseCharacters(const size_t numChars) noexcept = 0;
|
|
virtual bool EraseInLine(const ::Microsoft::Console::VirtualTerminal::DispatchTypes::EraseType eraseType) noexcept = 0;
|
|
virtual bool EraseInDisplay(const ::Microsoft::Console::VirtualTerminal::DispatchTypes::EraseType eraseType) noexcept = 0;
|
|
|
|
virtual bool WarningBell() noexcept = 0;
|
|
virtual bool SetWindowTitle(std::wstring_view title) noexcept = 0;
|
|
|
|
virtual bool SetColorTableEntry(const size_t tableIndex, const DWORD color) noexcept = 0;
|
|
|
|
virtual bool SetCursorStyle(const ::Microsoft::Console::VirtualTerminal::DispatchTypes::CursorStyle cursorStyle) noexcept = 0;
|
|
virtual bool SetCursorColor(const DWORD color) noexcept = 0;
|
|
|
|
virtual bool SetDefaultForeground(const DWORD color) noexcept = 0;
|
|
virtual bool SetDefaultBackground(const DWORD color) noexcept = 0;
|
|
|
|
virtual bool SetInputMode(const ::Microsoft::Console::VirtualTerminal::TerminalInput::Mode mode, const bool enabled) noexcept = 0;
|
|
|
|
virtual bool SetScreenMode(const bool reverseMode) noexcept = 0;
|
|
virtual bool EnableXtermBracketedPasteMode(const bool enabled) noexcept = 0;
|
|
virtual bool IsXtermBracketedPasteModeEnabled() const = 0;
|
|
|
|
virtual bool IsVtInputEnabled() const = 0;
|
|
|
|
virtual bool CopyToClipboard(std::wstring_view content) noexcept = 0;
|
|
|
|
virtual bool AddHyperlink(std::wstring_view uri, std::wstring_view params) noexcept = 0;
|
|
virtual bool EndHyperlink() noexcept = 0;
|
|
|
|
virtual bool SetTaskbarProgress(const ::Microsoft::Console::VirtualTerminal::DispatchTypes::TaskbarState state, const size_t progress) noexcept = 0;
|
|
|
|
virtual bool SetWorkingDirectory(std::wstring_view uri) noexcept = 0;
|
|
virtual std::wstring_view GetWorkingDirectory() noexcept = 0;
|
|
|
|
virtual bool PushGraphicsRendition(const ::Microsoft::Console::VirtualTerminal::VTParameters options) noexcept = 0;
|
|
virtual bool PopGraphicsRendition() noexcept = 0;
|
|
|
|
protected:
|
|
ITerminalApi() = default;
|
|
};
|
|
}
|