[?1049h 및 [?1h ANSI 이스케이프 시퀀스]는 무엇을 합니까?

[?1049h 및 [?1h ANSI 이스케이프 시퀀스]는 무엇을 합니까?

상자에서 쉘을 사용할 때 echo foo | lessajax 응답에서 less command()를 호출하면 다음 코드가 표시됩니다.

\u001B[?1049h\u001B[?1h\u001B=\rfoo\r\n\u001B[7m(END)\u001B[27m\u001B[K

\u001B[?1049h그리고 \u001B[?1h이스케이프 시퀀스는 무엇을 하며, 또 무엇입니까 \u001B=? 어딘가에 문서화되어 있나요?

답변1

\u001B불필요하게 긴 ASCII 이스케이프 문자입니다.ECMA스크립트6. POSIX에서는 8진수를 사용 \033하고 다른 일부에서는 16진수를 허용합니다 \01b. 숫자의 대소문자는 중요하지 않습니다.

\u001B[?1049h(및 ) \u001B[?1049l은 다음을 나타내는 이스케이프 시퀀스입니다.xterm도착하다선택적으로대체 화면으로 전환하거나 대체 화면에서 전환합니다.

  • 물음표는 "개인 사용"(구현별 기능을 위해 예약된 표준의 범주)임을 나타냅니다. 나열된 개인 사용 패턴의 약 1/3XTerm 제어 순서DEC 중 하나에 해당합니다( DECCKM설명에 표시된 대로 니모닉이 있음). 언급한 대로 다른 것들은 xterm의 원본이거나 다른 터미널에서 개조된 것입니다.

  • 이 이스케이프 시퀀스를 사용하는 이유는 프로그램이 대체 화면을 사용할 수 있는지 여부를 사용자가 결정할 수 있는 terminfo 기반 방법을 제공하기 위한 것입니다. ~에 따르면xterm 매뉴얼:

titeInhibit(수업TiteInhibit)는
xterm을 삭제해야 하는지 여부를 지정합니다.ti그리고te TERMCAP 문자열의 termcap 항목(많은 화면 지향 프로그램을 시작할 때 대체 화면 간 전환에 사용됨) 설정된 경우 xterm은 대체 화면으로 전환하기 위해 이스케이프 시퀀스도 무시합니다. Xterm은 복합 제어 시퀀스(개인 모드라고도 함)를 지원하여 다양한 방식으로 terminfo를 지원합니다.1047,1048그리고1049원본과 동일한 효과47제어 순서. 이 리소스의 기본값은 "false"입니다.

1049 코드(도입됨1998년) 예널리 받아들여짐xterm과 호환된다고 주장하는 대부분의 터미널 에뮬레이터는 대부분 해당 기능을 제공하지 않습니다.임의로 선택할 수 있는. 그래서 그들은 실제로 이 기능을 구현하지 않았습니다.

반면에 \u001B[?1hxterm에서 파생되지 않고 (예를 들어 \u001B=) 스위칭 터미널 사용을 위해 DEC VT100s에서 파생됩니다.신청방법커서 키(DECKKM) 및 숫자 키패드(DECKPAM)에 사용됩니다. 예를 들어 터미널을 초기화할 때 프로그램에서 사용됩니다 less. 터미널 설명에서는 응용 프로그램(또는 일반) 모드 이스케이프 시퀀스를 특수 키로 사용하기 때문입니다.성냥이러한 터미널 설명에 제공된 초기화 문자열입니다.

추가 자료:

답변2

ESC[?1049h에서 온 것 같다DEC 비공개 모드 설정:

커서를 DECSC로 저장하고 대체 화면 버퍼를 사용하여 먼저 지웁니다. (titeInhibit 리소스에 의해 비활성화될 수 있습니다). 이는 1047 및 1048 모드의 효과를 결합합니다. 4-7 모드가 아닌 terminfo 기반 애플리케이션에 사용하십시오.

http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Functions-using-CSI-_-ordered-by-the-final-character_s_

CSI번역이 되니 참고하세요 ESC[.

관련 정보