.inputrc 파일에서 터미널마다 키 값이 다른 이유는 무엇입니까?

.inputrc 파일에서 터미널마다 키 값이 다른 이유는 무엇입니까?

이 질문은 실제로여기. 키 조합을 매핑할 때 서로 다른 터미널(rxvt 및 xterm 등)이 서로 다른 값을 사용하는 이유가 무엇인지 궁금합니다. rxvt 또는 xterm에 있을 때 어떻게 키 시퀀스의 값을 찾아 쉽게 .inputrc 파일에 추가할 수 있나요?

답변1

히스테리의 역사적 이유로 . 하드웨어 제조업체는 항상 동일한 키에 대한 공통 단일 제어 시퀀스를 표준화하지 않았으며 유리 터미널이 터미널 에뮬레이터로 대체되었을 때 소프트웨어 작성자도 표준화하지 않았습니다.

Ctrl+ 다음에 key를 입력하여 특정 터미널에서 키가 생성하는 제어 시퀀스를 확인할 수 있습니다 V(대부분의 셸에서 또는 또는 같은 명령 입력에서 ) . 대부분의 키는 이스케이프 문자와 인쇄 가능한 문자를 포함하는 제어 시퀀스를 생성합니다. +는 이스케이프 문자가 문자 그대로 삽입되도록 합니다 .cathexdumpCtrlV

다행스럽게도 다양한 터미널에서 전송되는 제어 시퀀스 간에는 충돌이 거의 없습니다. 주요 예외는 일부 터미널은 을 ( 를) ^H전송 하고 다른 터미널은 을( 를) 전송 한다는 것 입니다 . 많은 터미널에는 두 가지 백스페이스/삭제 모드 간에 전환할 수 있는 옵션이 있습니다.Backspace^?Delete^?Backspace^[[3~Delete

답변2

자일스가 말한 것. 언급된 특정 사례의 경우, VT100 및 VT220 터미널(현재 터미널 에뮬레이터가 에뮬레이션하려고 시도하는)에는 수정자 + 화살표 키 조합에 대한 키코드가 없으므로 에뮬레이터는 자체 키코드를 도입합니다.

xterm과 rxvt가 왜 다른지 잘 모르겠지만 아마도 동시에 독립적으로 도입되었을 수도 있습니다. xterm은 실제로 원래 오늘날보다 더 짧은 코드를 사용했지만 이로 인해 문제가 발생하여 결국 변경되었습니다.

요즘 대부분의 터미널 에뮬레이터, 특히 다양한 데스크탑 환경(OS X 포함)에서 사용되는 에뮬레이터는 xterm을 에뮬레이트하려고 시도합니다. 그러나 Rxvt-unicode는 여전히 rxvt의 전통을 이어받습니다.

답변3

관심 있는 키는 .inputrc일반적으로 제어 문자, 특히 다음으로 끝나는 문자입니다.탈출하다일반적으로 ^[, ,로 표시되는 문자는 , 등으로 표시될 \e수도 있습니다 \E.\033

찾는 방법키보드에서 보낸 키는 잘 알려져 있습니다. lnext(리터럴 다음) 문자(보통 ^V)를 사용합니다. lnext다음 문자의 해석을 억제하려면 이 문자를 누른 다음 특수 키를 누르십시오. 이를 통해 터미널 드라이버는 읽을 수 있는 형식으로 문자를 에코할 수 있습니다.

한 터미널 유형이 다른 터미널 유형과 어떻게 다른지는 잘 알려져 있지 않습니다. 둘 다 명목상 DEC(Digital Equipment)와 동일한 하드웨어 터미널 제품군을 기반으로 하는 터미널 에뮬레이터입니다 xterm. rxvt1970년대와 1980년대에는 다른 많은 유형의 하드웨어 단말기가 생산되었지만 VT100과 그 후속 제품이 가장 인기가 있었습니다.

일반적으로 VT100에는 기능 키가 없는 것으로 알려져 있습니다. 키보드는 IBM PC 키보드의 숫자 키패드와 크기가 거의 같습니다. 맨 위 행에는 PF1부터 PF4까지 레이블이 지정되어 있습니다. 일반적인 컨셉은기능 키기본 QWERTY 키보드의 상단이나 왼쪽에 있는 숫자 키 세트와 같이 이 영역 외부에 키보드의 다른 영역이 있습니다.

VT220은 번호가 매겨진 기능 키 F6~F20을 추가하여 VT100 설계를 확장합니다. F1-F5가 있지만 이는 로컬 기능용이므로 일반적으로 프로그래밍에 사용할 수 없습니다. 프로그래밍에 유용합니다. DEC에서 할당한 이스케이프 시퀀스를 보냅니다. 전송된 이스케이프 시퀀스에 대한 일부 표준화가 있지만도착하다터미널(ECMA-48), 전송된 시퀀스에는 해당 표준이 없습니다.~에서터미널. 규칙만 있으며 호스트-터미널 기능과 "동일한" 특수 키는 동일한 이스케이프 시퀀스를 보내야 합니다. 이는 터미널이 로컬 에코 모드로 설정된 경우 특히 유용합니다.

xterm이 1980년대 후반 또는 1990년대 초반에 처음 개발되었을 때 누군가 F1-F5에 유사한 이스케이프 시퀀스를 할당하여 VT220 기능 키 개념을 확장했습니다. F21-F24 키 할당은 나중에 나타납니다(2002년), 비슷한 방식을 사용합니다.

1990년대 중반에는 명확한 xterm계획이 없었습니다.수정됨키(예: 사용 등 control) shiftRxvt 개발자는 rxvt확장을 위해 다른 접근 방식을 사용하기 로 결정했습니다.결정적인특수 키용으로 전송된 문자열의 문자입니다. 이는 호스트-투-엔드 기능에 해당하지 않는 키를 도입하고 반드시 전통적인 방식으로 끝나지 않기 때문에 문제가 됩니다.결정적인문자( $예:).

확장 프로그램에서는 및 번호 매기기 범위를 확장 xterm하여 번호 매기기 키를 추가하기로 선택했습니다 . 이는 효과가 있었지만 더 나은 솔루션이 제안되었습니다(shiftcontrol패치 #94, 1999) Jeffrey Altman이 작성했으며 마지막 DEC VTxxx 터미널 시리즈(VT525)에 구현되었습니다. 수정자를 숫자로 인코딩하고범위시퀀스를 이스케이프합니다. 몇 년 후(2002년 패치 번호 167), 누군가 다른 호스트에서 터미널로의 이스케이프와 혼동될 수 있는 문제를 지적했고, 이 문제를 피하기 위해 방식을 변경했습니다.

Konsole 및 VTE(GNOME Terminal) 개발자는 1999년 xterm에서 사용된 구성표를 복사하여머무르다xterm여기서 터미널 설명도 업데이트됩니다. 이로 인해 많은 버그 보고서가 작성되었습니다.

참고로:

관련 정보