"Ctrl+h"를 선택할 때 xterm이 백스페이스를 보내는 것을 어떻게 중지합니까?

"Ctrl+h"를 선택할 때 xterm이 백스페이스를 보내는 것을 어떻게 중지합니까?

xterm이 Ctrl+h를 백스페이스로 변환하는 것을 중지하고 싶습니다. 나는 이 키 조합을 다른 용도로 사용하지만 터미널은 Ctrl+h를 잡아서 매번 백스페이스를 보냅니다. 이 기능을 비활성화하려면 어떻게 해야 합니까?

이것은 Ctrl+h를 보내는 백스페이스 비활성화에 대한 다른 게시물과 다르다는 점에 유의하세요. 저는 반대 상황을 다루고 있습니다.

참고: 필요한 경우 Ubuntu 22.04를 사용하십시오.

답변1

백스페이스 키에는 터미널에서 두 가지 일반적인 동작이 있습니다. 하나는 바이트 0x08(ASCII BS또는 backspace, 일반적으로 로 표시됨 ) 을 생성하는 것입니다 ^H. 다른 하나는 바이트 0x7F( DEL또는 또는 delete, 일반적으로 로 표시됨 ^?)를 생성하는 것입니다.

어느 쪽을 선택해야 할지에 대한 일반적인 합의가 아직 이루어지지 않은 것 같습니다. 내 거인상이는 ^?비교적 일반적입니다. 실제로 이 옵션을 사용하면 백스페이스 키와 Ctrl+H 키를 구별할 수 있습니다. 다른 선택 사항의 경우 동일해야 합니다. 따라서 두 가지를 구별하는 것이 목표이므로 에 투표해야 합니다 ^?.

우분투에서는 이것이 나의 기본 동작입니다 xterm. 업스트림 xterm이며 terminfo기본적으로 로 설정되어 있는 것 같지만 ^H데비안(및 우분투)에는 이를 ^?. 왜 이 동작이 나타나는지 잘 모르겠습니다 ^H(이 동작이 보이면). 어쩌면 xterm직접 수동으로 설치했을 수도 있습니다. 아니면 xterm이 생성되었지만 ^?사용하고 있던 응용 프로그램이 동일한 작업을 수행하기로 결정했을 수도 있습니다 ^H.

세 가지 주요 구성 요소는 서로 일관성이 있어야 합니다.

하나는 터미널 에뮬레이터의 실제 동작입니다. 이를 확인하려면 명령을 실행 showkey -a하고 백스페이스를 누르십시오. 보고되면 ^H터미널의 동작을 을 내보내도록 변경해야 합니다 ^?.

다른 하나는 행이 베이킹 모드에 있을 때 커널에서 사용하는 행 규칙 설정입니다(예를 들어 인쇄 또는 인쇄 cat가 아닌 백스페이스 키를 실행하고 평소처럼 작동할 것으로 예상하는 경우 ). 및 조회를 통해 값을 쿼리 하거나 또는 를 통해 설정할 수 있습니다 .^H^?stty -aerase = ...stty erase '^?'stty erase '^H'

세 번째는 terminfo 정의입니다. Run infocmp | grep kbs의 값은 나머지 모든 값과 같 거나 일치 kbs해야 합니다 (즉 , 이것이 우리가 원하는 것입니다). 그렇지 않은 경우 terminfo를 조사하여 해당 정의를 변경하는 방법이나 TERM에 대해 다른 값을 선택하는 방법을 확인해야 합니다. 이것이 올바르게 설정되지 않으면 어떤 결과가 나올지 잘 모르겠습니다. 백스페이스를 눌렀을 때 ncurses 애플리케이션의 텍스트 입력 필드가 제대로 작동하지 않을 수 있다고 가정합니다.^?^H^?

위 3가지 항목은 어떤 순서로 설정해야 하나요? 여기에는 명확한 대답이 없습니다. 몇 가지 효과적인 솔루션이 있습니다. 특정 방식으로 작동하도록 터미널 에뮬레이터를 설정할 수 있으며 일부 터미널에서는 자동으로 stty일치하도록 속성을 설정하기도 합니다. 또는 먼저 속성을 설정한 다음 지시대로 실행 stty되도록 터미널을 구성 할 수 있습니다. 또한 terminfo에 설명된 동작을 기반으로 stty동작을 구성할 수도 있습니다 . xterm의 경우 맨페이지 xterm를 참조하여 backarrowKeyIsErase가능성을 조사하고 사용할 항목을 선택하세요. 불행하게도 저는 이 작업을 수행하는 방법을 정확히 알려주는 정확한 세부 사항에 익숙하지 않습니다. 주로 Ubuntu에서는 ^?기본적으로 일관된 동작을 수행하므로 이를 조작할 필요가 없습니다.

사용하기 위해 이 세 가지 위치를 일관되게 구성하면 ^?(1. 확인된 터미널의 실제 동작 showkey -a, 2. 설정, 3. stty현재 상황에 대한 확인된 용어 정보 설명 검토) 대부분의 애플리케이션이 정상적으로 실행되어야 합니다. Ctrl+H(바이트 0x08)와 백스페이스 키(바이트 0x7F)를 구별할 수 있습니다. 특정 응용 프로그램에서 여전히 그렇지 않은 경우 해당 특정 응용 프로그램에 대한 설명서와 설정을 연구해야 합니다.$TERMinfocmp

ssh원격 호스트에 연결하는 경우 stty로그인 후 설정이 올바른지, 원격 terminfo 데이터베이스가 예상대로 작동하는지 확인해야 합니다.

관련 정보