![我的终端仿真器应该如何处理 DC1 控制代码?](https://linux22.com/image/82420/%E6%88%91%E7%9A%84%E7%BB%88%E7%AB%AF%E4%BB%BF%E7%9C%9F%E5%99%A8%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%20DC1%20%E6%8E%A7%E5%88%B6%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
答案1
如果您看到controlQ(0x11) 和 controlS(0x13),则这些是 XON/XOFF:流量控制的伪影。仅当您的连接表明它依赖于软件流控制时,您才应该看到这些内容;终端驱动程序可以将它们发送到设备(就像用户可以按这些键来控制另一个方向一样)。
进一步阅读:
关于“布局”的评论山猫是模糊的:
- 0x11 不是任何能想到的字符集中的空白字符。
- 看着字符集Lynx 知道,没有人将 0x11 显示为非打印字符。
- 显示字符集可在选项菜单。
- 由于区域设置和显示字符集的一些奇怪组合,Lynx 只会将其用作可打印字符。
由于缺乏有关 Lynx 为何可能使用 0x11 作为非打印字符的一些详细信息,听起来好像终端驱动程序正在使用相当小的缓冲区发送 XON/XOFF。
跟进评论(哪个终端正在使用TERM=ansi
?屏幕截图显示xterm),lynx
可以写(使用诅咒)左箭头,例如字符ACS_LARROW
。在里面源代码,看起来像这样:
/* * 现在绘制左侧滚动指示器,以避免复杂化 * 覆盖可能位于第一列的多列字符的一部分 * 位置。 */ 如果(IsPanned && lft_cells){ CTRACE_EDIT((tfp, "绘制左滚动指示器\n")); TmpStyleOn(提示? s_prompt_edit_arr : s_aedit_arr); LYmove(StartY, StartX); LYaddch(ACS_LARROW); TmpStyleOff(提示? s_prompt_edit_arr : s_aedit_arr); lft_shift = 1; }
现在...lynx
它自己只知道以下定义<curses.h>
:
#define ACS_LARROW NCURSES_ACS(',') /* arrow pointing left */
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
幸运的是(为了可读性),您感兴趣的映射是将逗号(转义)映射到八进制 021 的第二个条目:
\,\021
这就是你的 DC1(八进制 021 是十六进制 0x11)。但该映射并未用于xterm。的画线字符xterm
(除非使用 UTF-8,其中 ncurses 会忽略终端描述)不包括左箭头。该映射定义在xterm-basic
,你可以看到它没有逗号(末尾的逗号是分隔符):
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
这xterm 手册建议 的有用值TERM
,并且“ansi”(尽管在列表中)并不是第一个。它已经存在了一段时间(早于 ncurses):
Terminal database (terminfo (5) or termcap (5)) entries that work with
xterm include
an optional platform-specific entry ("xterm-new"),
"xterm",
"vt102",
"vt100",
"ansi" and
"dumb"
例如,我在 X11R5 (1993) 中看到了它。但是却被介绍了早些时候,出现在 X10R4 (1986) 中。我怀疑终端模拟器中“ansi”的含义在 30 年来发生了轻微的变化(它对应于ANSI.SYS
,这与 xterm 等不同)。使用"xterm"
(或者"xterm-new"
),你会得到更好的结果。
答案2
我找到了一个网页,其中控制字符给出了与您的发现相匹配的可打印表示形式:
http://xhelmboyx.tripod.com/formats/latin-mac-charset.txt
1 0x01 SOH start head white smiley
2 0x02 STX start text ->| or black smiley
3 0x03 ETX end text |<- or heart
_
4 0x04 EOT end transmit ^ or diamond
5 0x05 ENQ enquiry up arrow or club
6 0x06 ACK acknowledge ^ or spade
7 0x07 BEL bell/beep centre dot
8 0x08 BS backspace inverted text cursor
9 0x09 HT horizontal tab vert. oval
10 0x0A LF line feed |X> or inverted oval
11 0x0B VT vertical tab arrow or male symbol
12 0x0C FF form feed arrow or female symbol
13 0x0D CR carriage return single note symbol
14 0x0E SO shift out dual note symbol
15 0x0F SI shift in sun symbol
16 0x10 DLE device link esc down or right arrow
17 0x11 DC1 device control 1 left arrow
18 0x12 DC2 device control 2 tick or dual vert arrow
19 0x13 DC2 device control 3 diamond or dual exclamation
20 0x14 DC4 device control 4 pilcrow sign
21 0x15 NAK negative acknowl. section symbol
22 0x16 SYN sync. idle horizontal bar
23 0x17 ETB end trans. block <X| or dual vert arrow underscored
24 0x18 CAN cancel left or up arrow
25 0x19 EM end medium up or down arrow
26 0x1A SUB substitute right arrow
27 0x1B ESC escape left arrow
28 0x1C FS file separator |____
29 0x1D GS group separator dual horizontal arrow
30 0x1E RS record separator up arrow
31 0x1F US unit separator down arrow