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