터미널 에뮬레이터는 DC1 제어 코드를 어떻게 처리해야 합니까?

터미널 에뮬레이터는 DC1 제어 코드를 어떻게 처리해야 합니까?

나는 ansi 호환 터미널 에뮬레이터를 작성하고 있으며, 나타나는 순서대로 다른 제어 코드를 구현하고 있습니다. 이를 사용할 때 한 가지 이상한 점 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에 매핑하는 두 번째 항목입니다.

    \,\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

관련 정보