Console Library 8.0.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
console::Keyboard Class Reference

用于监视键盘键击情况的类。 More...

#include <kb.h>

Public Member Functions

 Keyboard ()
 构造函数,开始监视键盘键击。
 ~Keyboard ()
 析构函数,结束对键盘键击的监视。
 Keyboard (const Keyboard &)=delete
 被删除的拷贝构造函数
 Keyboard (Keyboard &&)=delete
 被删除的移动构造函数
Keyboard & operator= (const Keyboard &)=delete
 被删除的拷贝赋值
Keyboard & operator= (Keyboard &&)=delete
 被删除的移动赋值
Key get ()
 试图取得当前键击的按键。
Key wait ()
 等待直到键击并取得当前按键。
void ignore (int n=-1)
 消耗留在缓冲区内的按键。

Private Member Functions

int readRaw ()
 读取一个原始按键值(非阻塞)。
int readRawBlock ()
 读取一个原始按键值(阻塞)。
Key parse (int raw)
 将原始扫描码解析为 Key 枚举值。
Key handleEscape ()
 处理以 ESC (27) 开头的转义序列(主要针对 Linux 终端)。

Private Attributes

struct termios oldTio
 原始终端I/O属性(用于析构时恢复规范模式与回显)

Detailed Description

用于监视键盘键击情况的类。

Constructor & Destructor Documentation

◆ Keyboard() [1/3]

console::Keyboard::Keyboard ( )
inline

构造函数,开始监视键盘键击。

Warning
在 Keyboard 的生命周期内,stdin 将处于不可用状态。

◆ ~Keyboard()

console::Keyboard::~Keyboard ( )
inline

析构函数,结束对键盘键击的监视。

Note
stdin 将恢复可用状态。

◆ Keyboard() [2/3]

console::Keyboard::Keyboard ( const Keyboard & )
delete

被删除的拷贝构造函数

◆ Keyboard() [3/3]

console::Keyboard::Keyboard ( Keyboard && )
delete

被删除的移动构造函数

Member Function Documentation

◆ get()

Key console::Keyboard::get ( )
inline

试图取得当前键击的按键。

Returns
Key 如果没有键击,返回 Key::None,否则返回对应按键。

◆ handleEscape()

Key console::Keyboard::handleEscape ( )
inlineprivate

处理以 ESC (27) 开头的转义序列(主要针对 Linux 终端)。

Returns
如果识别为方向键则返回对应 Key;否则返回 Key::Esc。

在 Linux 终端下,方向键会发送 "\033[A"、"\033[B" 等三字节序列。 本函数通过非阻塞 poll 检查后续输入,若在 5ms 内读到 "[A"-"[D]" 则转为方向键,否则视为普通 Esc 键。

◆ ignore()

void console::Keyboard::ignore ( int n = -1)
inline

消耗留在缓冲区内的按键。

Parameters
n消耗的数量,负数为所有,默认为 -1。

◆ operator=() [1/2]

Keyboard & console::Keyboard::operator= ( const Keyboard & )
delete

被删除的拷贝赋值

◆ operator=() [2/2]

Keyboard & console::Keyboard::operator= ( Keyboard && )
delete

被删除的移动赋值

◆ parse()

Key console::Keyboard::parse ( int raw)
inlineprivate

将原始扫描码解析为 Key 枚举值。

Parameters
raw原始按键整数值(来自 readRaw 或 readRawBlock)。
Returns
对应的 Key 枚举值;若无法识别则返回 Key::Unknown。

处理以下情况:

  • 字母字符(自动将小写转为大写)
  • 数字字符
  • 空格、回车、Esc、退格、Tab
  • Windows 平台扩展键(方向键、F1-F12,其扫描码为 0xE0 或 0x00)
  • 其他平台无法识别的键返回 Unknown

◆ readRaw()

int console::Keyboard::readRaw ( )
inlineprivate

读取一个原始按键值(非阻塞)。

Returns
如果按键存在,返回按键的整数扫描码;否则返回 -1。

Windows 平台使用 _kbhit() 和 _getch(); Linux 平台使用 poll() 和 read()。

◆ readRawBlock()

int console::Keyboard::readRawBlock ( )
inlineprivate

读取一个原始按键值(阻塞)。

Returns
按键的整数扫描码。

Windows 平台直接调用 _getch(); Linux 平台循环调用 read() 直到成功读取一个字节。

◆ wait()

Key console::Keyboard::wait ( )
inline

等待直到键击并取得当前按键。

Returns
Key 返回对应按键。

Member Data Documentation

◆ oldTio

struct termios console::Keyboard::oldTio
private

原始终端I/O属性(用于析构时恢复规范模式与回显)

Linux/Unix:


The documentation for this class was generated from the following file: