私はansi互換の端末エミュレータを書いていますが、表示される順序で別の制御コードを実装しています。これを使用するときの1つの奇妙なことlynx
は、過度のDC1
/XON
制御コード(0x11
)です。しかし、彼らは実際にはそうは思わない。はいその制御コード。私はLXTerminal
それらが矢印の形でレンダリングされることを知り、Lynxの完全なページレイアウトを見ると矢印の形で動作するように意図されているようです。
0x11
代わりに、印刷可能文字を指定するよく知られた仕様または参照実装がありますかDC1
?
編集する:
この円矢印は、このコードに対してxtermが出力するものですが、わかりません。なぜ、私のエンコーディングがUTF-8の場合は、このようにDC1
出力する必要があります。
答え1
controlQ(0x11)と(0x13)が表示されている場合、controlSこれはXON / XOFF:フロー制御アーティファクトです。接続がソフトウェアフロー制御に依存していることを示す場合にのみ、これを確認する必要があります。端末ドライバはそれをデバイスに送信できます(ユーザーがこのキーを押して他の方向を制御できるように)。
追加資料:
- RS232ハンドシェイクまたはフロー制御をいつ使用する必要がありますか?
- フロー制御とは何ですか? RTS/CTSとは何ですか? Xon/Xoffとは何ですか?
- 11. フロー制御(ハンドシェイク)(テキスト端末HOWTO)
「レイアウト」の説明サルクあいまい:
- 0x11 は、可能な文字セット内の空白文字ではありません。
- 見ている文字セットLynxは、0x11を印刷できない文字で表示する人がいないことを知っています。
- 表示文字セットは以下で使用できます。オプションメニュー。
- ロケールと表示文字セットの奇妙な組み合わせのため、Lynxはこれを印刷可能な文字としてのみ使用します。
Lynxが0x11を印刷されない文字として使用する理由の詳細が不足しているため、ターミナルドライバはXON / XOFFを送信するためにかなり小さいバッファを使用しているように聞こえます。
後続のコメント(どの使用中の端末TERM=ansi
?スクリーンショットショーxterm)、lynx
たとえば左矢印文字を書くことができます(curseを使用)ACS_LARROW
。内部にソースコード、次のようになります。
/* *今、複雑さを避けるために、左スクロールインジケータを描画します。 *最初の列にある可能性がある複数列文字の一部を上書きします。 *場所。 */ if (IsPanned && lft_cells) { CTRACE_EDIT((tfp, "左スクロール表示を描画\n")); TmpStyleOn(prompt?s_prompt_edit_arr:s_aedit_arr); LYmove(StartY、StartX); LYaddch(ACS_LARROW); TmpStyleOff(プロンプト?s_prompt_edit_arr:s_aedit_arr); 左_シフト= 1; }
今…それ自体lynx
は、次の定義だけを知っています<curses.h>
。
#define ACS_LARROW NCURSES_ACS(',') /* arrow pointing left */
そして、端末は次のように説明されます。「アンシー」実際のマッピングを提供しますklone+acs
:
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,
幸いなことに(読みやすくするために)興味のあるマッピングは、カンマ(エスケープされた)を8進数021にマッピングする2番目のエントリです。
\,\021
これがDC1です(021 8進数は0x11 16進数です)。ただし、このマッピングは次の目的には使用されません。xterm。線描画文字xterm
(ncurses が端末記述を無視する UTF-8 を使用しない限り)には、左矢印は含まれません。このマッピングは次に定義されます。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