상자에서 쉘을 사용할 때 echo foo | less
ajax 응답에서 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[?1h
xterm에서 파생되지 않고 (예를 들어 \u001B=
) 스위칭 터미널 사용을 위해 DEC VT100s에서 파생됩니다.신청방법커서 키(DECKKM) 및 숫자 키패드(DECKPAM)에 사용됩니다. 예를 들어 터미널을 초기화할 때 프로그램에서 사용됩니다 less
. 터미널 설명에서는 응용 프로그램(또는 일반) 모드 이스케이프 시퀀스를 특수 키로 사용하기 때문입니다.성냥이러한 터미널 설명에 제공된 초기화 문자열입니다.
추가 자료:
- vi를 실행할 때 화면이 지워지지 않는 이유는 무엇입니까?(xterm FAQ)
- (모든) 쉘에서 커서 키를 사용할 수 없는 이유는 무엇입니까?(xterm FAQ)
- 커서 키가 작동하지 않습니다(ncurses FAQ)
- XTerm 제어 순서
답변2
ESC[?1049h
에서 온 것 같다DEC 비공개 모드 설정:
커서를 DECSC로 저장하고 대체 화면 버퍼를 사용하여 먼저 지웁니다. (titeInhibit 리소스에 의해 비활성화될 수 있습니다). 이는 1047 및 1048 모드의 효과를 결합합니다. 4-7 모드가 아닌 terminfo 기반 애플리케이션에 사용하십시오.
CSI
번역이 되니 참고하세요 ESC[
.