DEC ANSI 명령 시퀀스 커서 이동 문제;

DEC ANSI 명령 시퀀스 커서 이동 문제;

그래서 저는 터미널 에뮬레이션을 작성 중이고(알고 있습니다. 퍼티 등을 컴파일해야 합니다.) vttest를 통해 천천히 작업하여 올바른지 확인하는 단계에 있습니다. 현재는 VT102를 베이스로 사용하고 있는데 나중에 베이스 기능이 제대로 작동하게 되면 색상 등의 단말기 기능을 추가해보겠습니다.

명령 세트는 주로 ANSI입니다. DEC에는 자체 명령 세트가 있지만 약 1973년부터 ANSI 명령을 지원해 왔습니다. 이러한 ANSI 표준은 현재 사용할 수 없지만 ECMA와 동등한 표준은 있지만(ECMA-48이 가장 관련성이 있는 것 같습니다) 제가 아는 한 이 질문에 대한 답을 볼 수 없습니다. 대부분의 ANSI 명령 시퀀스는 ESC로 시작됩니다. 많은 명령은 여기에 CSI로 표시된 명령 시퀀스 식별자로 시작하며 데이터에서 0x1c 0x5b(ESC [) 또는 8비트 통신이 가능한 경우 0xdb로 표시됩니다. 그런 다음 일련의 인식 명령이 나옵니다. 일부 명령은 커서 위치에 영향을 미치고, 일부 명령은 화면에 영향을 미치고, 일부 명령은 호스트에 대한 응답을 유발하는 등의 작업을 수행합니다.

일부 터미널 명령에는 숫자 매개변수가 포함되어 있습니다. 이 예 CSI 10 ; 5 H에서는 커서를 행 10, 열 5에 놓는 것을 의미합니다. 숫자 매개변수가 누락된 경우 기본값을 사용할 수 있습니다. 이는 CSI 10 ; H매개변수가 제공되지 않을 때 기본값이 1이므로 커서를 행 10, 열 1에 놓는 것을 의미합니다.

나는 vt100.net(훌륭한 리소스)의 vt102 매뉴얼과 이러한 명령 시퀀스에 대한 부분적인 정보를 제공하는 약 12페이지를 가지고 있습니다. 분명히 완전한 복음 DEC 터미널 사양은 DEC에서 나온 적이 없습니다.

명시적으로 CSI C커서를 오른쪽으로 이동합니다. 기본값은 1입니다.

명확하지 않은 것은 '예'가 의미하는 바입니다 CSI 0 C.

거기에 0이 있는 이유는 무엇입니까? 명령이 아무 작업도 수행하지 않는 것처럼 보입니까? "기본값 사용"을 의미하는 경우 1로 전송될 수 있지만 더 짧은 문자열에는 인수가 없으며 어쨌든 1로 해석되는 기본값에 의존합니다. 이러한 실제 물리적 VT 터미널은 일반적으로 300보드 이하에서 사용되므로 문자 하나가 중요합니다!

나는 두 가지 방법을 모두 시도하고 어느 방법이 모든 것을 완벽하게 만드는지 확인할 수 있을 정도로 vttest에 능숙하지 않지만 이와 같은 작은 문제가 중요해지기 시작할 만큼 충분히 멀리 있습니다.

답변1

나는 xterm과 vttest를 관리하는 Thomas Dickey(invisible-island.net)에게 연락했습니다. 그는 이것이 CSI 0 Cxterm과 동일하거나 xterm에 있다고 설명했습니다.CSI 1 CCSI C

터미널 프로그래밍에 대한 더 많은 정보를 찾는 사람이라면 그가 호스팅하는 xterm 소스 코드, 특히 xterm 내의 ctlseqs.txt를 확인하는 것이 좋습니다. 이는 제가 찾고 있던 실제 터미널 제어 시퀀스 참조와 매우 유사합니다.

답변2

다양한 터미널의 특정 코드 시퀀스에 기능을 매핑하는 데이터베이스가 이미 있는데 특정 터미널 유형에 대한 하드코드 호환성이 필요한 이유는 무엇입니까? (terminfo 데이터베이스는 일반적으로 /usr/share에 있으며 대부분의 ncurses 배포판에 포함되어 있습니다). 저주에 관한 모든 자료는 이러한 기능이 어떻게 표시되는지 설명해야 합니다.

terminfo 파일은 일반적으로 (tic을 사용하여) 컴파일되므로 terminfo 소스 파일을 찾으려면 더 자세히 조사해야 할 수도 있습니다.

당신은 또한 볼 수 있습니다http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16(terminfo.src 파일 저장소에 대한 링크가 있습니다)

관련 정보