ターミナルエミュレータはDC1制御コードをどのように扱うべきですか?

ターミナルエミュレータはDC1制御コードをどのように扱うべきですか?

私はansi互換の端末エミュレータを書いていますが、表示される順序で別の制御コードを実装しています。これを使用するときの1つの奇妙なことlynxは、過度のDC1/XON制御コード(0x11)です。しかし、彼らは実際にはそうは思わない。はいその制御コード。私はLXTerminalそれらが矢印の形でレンダリングされることを知り、Lynxの完全なページレイアウトを見ると矢印の形で動作するように意図されているようです。

0x11代わりに、印刷可能文字を指定するよく知られた仕様または参照実装がありますかDC1

編集する:

この円矢印は、このコードに対してxtermが出力するものですが、わかりません。なぜ、私のエンコーディングがUTF-8の場合は、このようにDC1出力する必要があります。

ここに画像の説明を入力してください。

答え1

controlQ(0x11)と(0x13)が表示されている場合、controlSこれはXON / XOFF:フロー制御アーティファクトです。接続がソフトウェアフロー制御に依存していることを示す場合にのみ、これを確認する必要があります。端末ドライバはそれをデバイスに送信できます(ユーザーがこのキーを押して他の方向を制御できるように)。

追加資料:

「レイアウト」の説明サルクあいまい:

  • 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

関連情報