Class KeyboardHandlerUnixImpl
Defined in File keyboard_handler_unix_impl.hpp
Nested Relationships
Nested Types
Inheritance Relationships
Base Type
public KeyboardHandlerBase
(Class KeyboardHandlerBase)
Class Documentation
-
class KeyboardHandlerUnixImpl : public KeyboardHandlerBase
Unix (Posix) specific implementation of keyboard handler class.
Note
Design and implementation limitations: Can’t correctly detect CTRL + 0..9 number keys. Can’t correctly detect CTRL, ALT, SHIFT modifiers with F1..F12 and other control keys. Instead of CTRL + SHIFT + key will be detected only CTRL + key. Some keys might be incorrectly detected with multiple key modifiers pressed at the same time.
Public Types
-
using isattyFunction = std::function<int(int)>
-
using tcgetattrFunction = std::function<int(int, struct termios*)>
-
using tcsetattrFunction = std::function<int(int, int, const struct termios*)>
-
using readFunction = std::function<ssize_t(int, void*, size_t)>
-
using signal_handler_type = void (*)(int)
Public Functions
-
KEYBOARD_HANDLER_PUBLIC KeyboardHandlerUnixImpl()
Default constructor.
-
explicit KEYBOARD_HANDLER_PUBLIC KeyboardHandlerUnixImpl(bool install_signal_handler)
Constructor with option to not install signal handler for SIGINT.
Note
In case if install_signal_handler is false caller code should call static KeyboardHandlerUnixImpl::restore_buffer_mode_for_stdin() in case of process termination caused by signal arrival.
- Parameters
install_signal_handler – if true signal handler for SIGINT will be installed, otherwise not.
-
virtual KEYBOARD_HANDLER_PUBLIC ~KeyboardHandlerUnixImpl()
destructor
- KEYBOARD_HANDLER_PUBLIC std::string get_terminal_sequence (KeyboardHandlerUnixImpl::KeyCode key_code)
Translates specified key press combination to the corresponding registered sequence of characters returning by terminal in response to the pressing keyboard keys.
- Parameters
key_code – Value from enum which corresponds to some predefined key press combination.
- Returns
Returns string with sequence of characters expecting to be returned by terminal.
Public Static Functions
- static KEYBOARD_HANDLER_PUBLIC bool restore_buffer_mode_for_stdin ()
Restore buffer mode for stdin.
- static KEYBOARD_HANDLER_PUBLIC signal_handler_type get_old_sigint_handler ()
Protected Functions
-
KEYBOARD_HANDLER_PUBLIC KeyboardHandlerUnixImpl(const readFunction &read_fn, const isattyFunction &isatty_fn, const tcgetattrFunction &tcgetattr_fn, const tcsetattrFunction &tcsetattr_fn, bool install_signal_handler = true)
Constructor with references to the system functions. Required for unit tests.
- Parameters
read_fn – Reference to the system read(int, void *, size_t) function
isatty_fn – Reference to the system isatty(int) function
tcgetattr_fn – Reference to the system tcgetattr(int, struct termios *) function
tcsetattr_fn – Reference to the system tcsetattr(int, int, const struct termios *) function
-
std::tuple<KeyCode, KeyModifiers> parse_input(const char *buff, ssize_t read_bytes)
Input parser.
- Parameters
buff – null terminated buffer read out from std::in after key press
read_bytes – length of the buffer in bytes without null terminator
- Returns
tuple key code and code modifiers mask
Protected Static Attributes
-
static const KeyMap DEFAULT_STATIC_KEY_MAP[]
Default statically defined lookup table for corresponding KeyCode enum values and expecting sequence of characters returning by terminal.
-
static const size_t STATIC_KEY_MAP_LENGTH
Length of DEFAULT_STATIC_KEY_MAP measured in number of elements.
-
struct KeyMap
Data type for mapping KeyCode enum value to the expecting sequence of characters returning by terminal.
-
using isattyFunction = std::function<int(int)>