8. Encoding of Terminal Modes (终端模式编码)
8. Encoding of Terminal Modes (终端模式编码)
所有 encoded terminal modes (如在 pty 请求中传递) 被编码为字节流. 目的是使编码在不同环境间可移植. 流由操作码 (opcode) 与参数对组成, 操作码为单字节. 操作码 1 至 159 各带一个 uint32 参数. 操作码 160 至 255 尚未定义, 会导致解析停止 (应仅在其他数据之后使用). 流以操作码 TTY_OP_END (0x00) 终止.
客户端应将其所知的模式放入流中, 服务器可以忽略不认识的模式. 这至少在采用类 POSIX tty 接口的系统之间提供一定程度的机器无关性. 协议也可支持其他系统, 但客户端可能需要为若干参数填入合理值, 以使服务器 pty 处于合理模式 (服务器将未指明的模式位保留为默认值, 且只有部分组合有意义).
操作码命名大多遵循 POSIX 终端模式标志. 已定义的操作码如下. 为便于阅读以下值为十进制, 实际为字节值.
| opcode | mnemonic | description (说明) |
|---|---|---|
| 0 | TTY_OP_END | 表示选项结束. |
| 1 | VINTR | 中断字符; 若无则为 255. 其他字符同理. 并非所有系统都支持所有这些字符. |
| 2 | VQUIT | 退出字符 (在 POSIX 系统上发送 SIGQUIT). |
| 3 | VERASE | 擦除光标左侧字符. |
| 4 | VKILL | 清除当前输入行. |
| 5 | VEOF | 文件结束字符 (从终端发送 EOF). |
| 6 | VEOL | 除回车与/或换行外的行结束字符. |
| 7 | VEOL2 | 附加行结束字符. |
| 8 | VSTART | 继续被暂停的输出 (通常为 control-Q). |
| 9 | VSTOP | 暂停输出 (通常为 control-S). |
| 10 | VSUSP | 挂起当前程序. |
| 11 | VDSUSP | 另一挂起字符. |
| 12 | VREPRINT | 重印当前输入行. |
| 13 | VWERASE | 擦除光标左侧一词. |
| 14 | VLNEXT | 将下一键入字符按字面接收, 即使为特殊字符 |
| 15 | VFLUSH | 刷新输出的字符. |
| 16 | VSWTCH | 切换到另一 shell 层. |
| 17 | VSTATUS | 打印系统状态行 (负载, 命令, pid 等). |
| 18 | VDISCARD | 切换终端输出刷新. |
| 30 | IGNPAR | 忽略奇偶校验标志. 若该标志为 FALSE 则参数应为 0, 为 TRUE 则应为 1. |
| 31 | PARMRK | 标记奇偶与帧错误. |
| 32 | INPCK | 启用奇偶错误检查. |
| 33 | ISTRIP | 剥除字符第 8 位. |
| 34 | INLCR | 输入时将 NL 映射为 CR. |
| 35 | IGNCR | 输入时忽略 CR. |
| 36 | ICRNL | 输入时将 CR 映射为 NL. |
| 37 | IUCLC | 将大写字符转为小写. |
| 38 | IXON | 启用输出流控. |
| 39 | IXANY | 任意字符可在 stop 后重启. |
| 40 | IXOFF | 启用输入流控. |
| 41 | IMAXBEL | 输入队列满时响铃. |
| 50 | ISIG | 启用信号 INTR, QUIT, [D]SUSP. |
| 51 | ICANON | 规范输入行. |
| 52 | XCASE | 通过在小写前加 "\" 启用大写字符的输入与输出. |
| 53 | ECHO | 启用回显. |
| 54 | ECHOE | 可视擦除字符. |
| 55 | ECHOK | kill 字符丢弃当前行. |
| 56 | ECHONL | 即使 ECHO 关闭也回显 NL. |
| 57 | NOFLSH | 中断后不刷新. |
| 58 | TOSTOP | 阻止后台作业输出. |
| 59 | IEXTEN | 启用扩展. |
| 60 | ECHOCTL | 将控制字符回显为 ^(Char). |
| 61 | ECHOKE | 行 kill 的可视擦除. |
| 62 | PENDIN | 重新键入挂起输入. |
| 70 | OPOST | 启用输出处理. |
| 71 | OLCUC | 小写转大写. |
| 72 | ONLCR | 将 NL 映射为 CR-NL. |
| 73 | OCRNL | (输出) 将回车转换为换行. |
| 74 | ONOCR | (输出) 将换行转换为回车-换行. |
| 75 | ONLRET | (输出) 换行执行回车. |
| 90 | CS7 | 7 位模式. |
| 91 | CS8 | 8 位模式. |
| 92 | PARENB | 启用奇偶. |
| 93 | PARODD | 奇校验, 否则为偶校验. |
| 128 | TTY_OP_ISPEED | 以比特每秒指定输入波特率. |
| 129 | TTY_OP_OSPEED | 以比特每秒指定输出波特率. |