跳到主要内容

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 终端模式标志. 已定义的操作码如下. 为便于阅读以下值为十进制, 实际为字节值.

opcodemnemonicdescription (说明)
0TTY_OP_END表示选项结束.
1VINTR中断字符; 若无则为 255. 其他字符同理. 并非所有系统都支持所有这些字符.
2VQUIT退出字符 (在 POSIX 系统上发送 SIGQUIT).
3VERASE擦除光标左侧字符.
4VKILL清除当前输入行.
5VEOF文件结束字符 (从终端发送 EOF).
6VEOL除回车与/或换行外的行结束字符.
7VEOL2附加行结束字符.
8VSTART继续被暂停的输出 (通常为 control-Q).
9VSTOP暂停输出 (通常为 control-S).
10VSUSP挂起当前程序.
11VDSUSP另一挂起字符.
12VREPRINT重印当前输入行.
13VWERASE擦除光标左侧一词.
14VLNEXT将下一键入字符按字面接收, 即使为特殊字符
15VFLUSH刷新输出的字符.
16VSWTCH切换到另一 shell 层.
17VSTATUS打印系统状态行 (负载, 命令, pid 等).
18VDISCARD切换终端输出刷新.
30IGNPAR忽略奇偶校验标志. 若该标志为 FALSE 则参数应为 0, 为 TRUE 则应为 1.
31PARMRK标记奇偶与帧错误.
32INPCK启用奇偶错误检查.
33ISTRIP剥除字符第 8 位.
34INLCR输入时将 NL 映射为 CR.
35IGNCR输入时忽略 CR.
36ICRNL输入时将 CR 映射为 NL.
37IUCLC将大写字符转为小写.
38IXON启用输出流控.
39IXANY任意字符可在 stop 后重启.
40IXOFF启用输入流控.
41IMAXBEL输入队列满时响铃.
50ISIG启用信号 INTR, QUIT, [D]SUSP.
51ICANON规范输入行.
52XCASE通过在小写前加 "\" 启用大写字符的输入与输出.
53ECHO启用回显.
54ECHOE可视擦除字符.
55ECHOKkill 字符丢弃当前行.
56ECHONL即使 ECHO 关闭也回显 NL.
57NOFLSH中断后不刷新.
58TOSTOP阻止后台作业输出.
59IEXTEN启用扩展.
60ECHOCTL将控制字符回显为 ^(Char).
61ECHOKE行 kill 的可视擦除.
62PENDIN重新键入挂起输入.
70OPOST启用输出处理.
71OLCUC小写转大写.
72ONLCR将 NL 映射为 CR-NL.
73OCRNL(输出) 将回车转换为换行.
74ONOCR(输出) 将换行转换为回车-换行.
75ONLRET(输出) 换行执行回车.
90CS77 位模式.
91CS88 位模式.
92PARENB启用奇偶.
93PARODD奇校验, 否则为偶校验.
128TTY_OP_ISPEED以比特每秒指定输入波特率.
129TTY_OP_OSPEED以比特每秒指定输出波特率.