\[\e]0;$PWD\007\]
및 의 의미를 이해하는 데 어려움을 겪고 있습니다 \[\e(0\]b\[\e(B\]
.
저는 Windows에서 MobaXterm에 대한 프롬프트를 설정하고 있는데 이 두 시퀀스가 기본 시퀀스입니다. 그들은 각각 시작과 끝에 있습니다.
두 번째 것은 전통적인 화살표 대신 작은 화살표를 표시하는 데 사용된 것 같지만 $
어떻게 이 결과를 얻을 수 있는지 모르겠습니다. 거의 쓰레기처럼 보입니다. 이건 일종의 유니코드 트릭인 것 같은데요?
처음에는 그 목적이 무엇인지 전혀 몰랐습니다. 저는 이 부분이 더 마음에 걸립니다 $PWD
.
링크에 관한 질문:
글쎄요, 앞서 언급했듯이 두 번째 시퀀스에 화살표가 표시된다는 것은 알지만 왜 일반 b로 구분된 두 개의 이스케이프 시퀀스를 사용합니까? 이것은 매우 이상합니다.
그리고 첫 번째 항목에는 PWD가 표시되지 않습니다. 내 스크린샷에서는 날짜가 인쇄되기 전이라도 맨 처음에 시퀀스가 표시됩니다. 보라색 경로는 클래식 \w를 사용합니다. 이스케이프 시퀀스에 $PWD를 사용하는 이유를 이해할 수 없어서 이 질문을 하게 되었습니다.
답변1
각 케이스에 특정 데이터에 대한 "괄호"가 포함되어 있는 이유는 터미널에 이를 알리기 때문입니다.시작뭔가를 한 다음 데이터를 보내고마치다뭔가를 해보세요.
첫 번째 순서는xterm 제어$PWD
bash를 사용하여 창 제목(및 아이콘 이름)에 값을 넣을 수 있습니다 . 프롬프트에는 아무것도 표시되지 않습니다. 쉘 값 $PWD
은 데이터이며, 왼쪽에서 이스케이프 시퀀스를 시작하고 오른쪽에서 완료합니다.
VT100 선 그리기 문자 집합으로 전환하는 또 다른 방법(참조:G0 문자 세트 지정:0
선화 단계에 들어서서,B
라틴어로 돌아가기-1) 인쇄(뭔가)두번째. 하지만 실제 VT100에는 화살표 키가 표시되지 않습니다."HT", 가로 탭의 경우):
그러나 일부 "VT100 에뮬레이터"는 자체적으로 선택합니다(일반적으로 원래 VT100 선택을 무시하지만). 흥미롭게도 MobaXterm은 PuTTY를 기반으로 하지만 PuTTY는 주석에 초기 VT52 옵션을 문서화했습니다(구현되지는 않았지만).두번째):
/*
* From the VT100 Manual
* NOTE: The special graphics characters in the VT100
* are different from those in the VT52
*
* From VT102 manual:
* 137 _ Blank - Same
* 140 ` Reserved - Humm.
* 141 a Solid rectangle - Similar
* 142 b 1/ - Top half of fraction for the
* 143 c 3/ - subscript numbers below.
* 144 d 5/
* 145 e 7/
* 146 f Degrees - Same
* 147 g Plus or minus - Same
* 150 h Right arrow
* 151 i Ellipsis (dots)
* 152 j Divide by
* 153 k Down arrow
* 154 l Bar at scan 0
실제 VT100은 VT52도 에뮬레이션하므로 PuTTY는일부VT52와 관련된 코드입니다. 그러나 표시된 이스케이프 시퀀스는 그렇게까지 진행되지 않습니다. 단지 VT100일 뿐입니다. VT52가 왜 오른쪽 및 아래쪽 화살표를 제공했지만 위쪽 또는 왼쪽 화살표는 제공하지 않았는지에 대해서는 약 40년이 지난 지금까지도 명확하지 않습니다. 그러나 MobaXterm 개발자는 별로 유용해 보이지 않는 코드를 사용하여 문제를 개선하기로 결정했을 수도 있습니다.
MobaXterm 터미널 에뮬레이터의 소스 코드는 해당 웹 사이트에 "MoTTY"로 나열되어 있습니다. 선 그리기 문자에 사용되는 테이블은 다음과 같습니다.
/* Character conversion arrays; they are usually taken from windows,
* the xterm one has the four scanlines that have no unicode 2.0
* equivalents mapped to their unicode 3.0 locations.
*/
static const WCHAR unitab_xterm_std[32] = {
//MOBAMODIF
// 0x2666, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1,
0x2022, 0x2592, 0x27a4, 0x240c, 0x2714, 0x2718, 0x00b0, 0x00b1,
//END_MOBAMODIF
0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba,
0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c,
0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020
};
첫 번째 줄은 그들이 변경한 내용입니다(주석은 xterm에서 수정된 PuTTY에서 온 것입니다). xterm에서 첫 번째 줄을 UTF-8로 렌더링하면 어떤 문자가 있는지 표시됩니다(힌트: 첫 번째 항목은8진수140 또는`):
8226 ->0x2022 ->{•} (4 bytes, punct)
9618 ->0x2592 ->{▒} (4 bytes, printing)
10148 ->0x27a4 ->{➤} (5 bytes, printing)
9228 ->0x240c ->{␌} (4 bytes, printing)
10004 ->0x2714 ->{✔} (5 bytes, printing)
10008 ->0x2718 ->{✘} (5 bytes, printing)
176 ->0xb0 ->{°} (3 bytes, printing)
177 ->0xb1 ->{±} (3 bytes, printing)
제안된 중복 항목은 질문의 어떤 부분, 특히 두 번째 부분과도 관련이 없습니다. 프롬프트 문자열이 UTF-8을 사용하지 않고 다른 인코딩을 사용하기 때문입니다.