# 终端交互事件捕获功能 ## 概述 现在socket通信系统已支持捕获和传输所有终端交互事件,包括: - 键盘输入 - 鼠标点击、移动、滚轮 - 终端窗口大小变化 ## 新增消息类型 ```c typedef enum { MSG_TYPE_INIT = 1, // 初始化连接 MSG_TYPE_WINDOW_SIZE_UPDATE = 2, // 窗口大小更新 MSG_TYPE_SERVER_RESPONSE = 3, // 服务器响应 MSG_TYPE_CLOSE = 4, // 关闭连接 MSG_TYPE_TERMINAL_INPUT = 5, // 终端输入(原始数据) MSG_TYPE_TERMINAL_OUTPUT = 6, // 终端输出 MSG_TYPE_MOUSE_EVENT = 7, // 鼠标事件(结构化) MSG_TYPE_KEY_EVENT = 8 // 键盘事件(结构化) } MessageType; ``` ## 鼠标事件结构 ```c typedef struct { uint32_t event_type; // 1=按下, 2=释放 uint32_t button; // 鼠标按钮(1=左键,2=中键,3=右键) uint32_t x; // X坐标(列) uint32_t y; // Y坐标(行) uint32_t modifiers; // 修饰键(Shift, Ctrl, Alt等) } MouseEvent; ``` ## 工作原理 ### 1. 鼠标跟踪启用 客户端通过ANSI转义序列启用终端的鼠标跟踪: ```c // 启用X11鼠标报告 + SGR扩展模式 const char* enable_seq = "\033[?1000h\033[?1002h\033[?1006h"; write(STDOUT_FILENO, enable_seq, strlen(enable_seq)); ``` ### 2. 事件解析 客户端监听标准输入的ANSI转义序列: ``` 鼠标事件格式:\033[