고양이가 표시하지 않는 특정 특수 코드에 대해 내 터미널이 보내는 이스케이프 코드가 무엇인지 어떻게 알 수 있나요?

고양이가 표시하지 않는 특정 특수 코드에 대해 내 터미널이 보내는 이스케이프 코드가 무엇인지 어떻게 알 수 있나요?

내 터미널이 Ctrl+Backspace 및 Alt+Backspace에 대해 보내는 내용을 알고 싶었습니다. 이를 수행하는 표준 방법은 cat터미널에서 실행하고 입력하는 것이 일반적으로 작동하지만 이와 같은 특정 출력에서는 결과가 까다롭습니다.

Alt+Backspace가 전송 중이라고 추측합니다 \x1b\x7f(즉, 백스페이스 이스케이프). 그러나 실행하고 catCtrl+V 및 Alt+Backspace를 입력하거나 Alt+Backspace만 입력하면 무슨 일이 발생합니까? 무슨 일이 발생하면 이스케이프가 "입력"되고 그런 다음 즉시 백스페이스로 제거되므로 아무 일도 일어나지 않는 것처럼 보입니다. 나는 내 컴퓨터가 거기에 있는 탈출의 단일 프레임을 렌더링하는 것을 보고 이것에 대한 단서를 얻었습니다 ^[.

지금까지 Ctrl+Backspace가 보내는 내용을 해결하는 방법을 잘 모르겠습니다. 둘 다 bash 프롬프트에서 단어를 삭제하더라도 Ctrl+W가 아닙니다. 왜냐하면 catCtrl+W가 단어를 삭제하는 동안 그 아래에서는 아무것도 하지 않기 때문입니다!

답변1

간단히 다음 명령을 사용하세요.

showkey -a

답변2

에서는 zsh다음을 사용합니다.

$ STTY='raw -echo min 0 time 40' cat -vte
^[^?

또는 다음을 사용하여 bash:

$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?

터미널 입력이 전송되고 에서 렌더링되는 원시 입력을 볼 수 있습니다 cat -vte. 중지하려면 4초(40데시초) 동안 아무 것도 입력하지 마십시오.

예를 들어 10진수, 16진수, 8진수 또는 문자로 각 바이트 값을 보려면 with (GNU 또는 호환 가능하다고 가정 ) cat -vte로 바꿀 수 있습니다 .od -An -w1 -tu1 -tx1 -to1 -taod

  27
  1b
 033
 esc
 127
  7f
 177
 del

답변3

.bash를 사용하여 bash에서 단일 문자를 표시하는 방법을 다른 곳에서 찾았습니다 read -rsn1 key && echo "$key" | xxd. 이것은 90%의 경로였지만 전체 그림이 아닌 0x1b(Escape)를 다시 얻을 것이기 때문에 잠시 동안 여기에 갇혀 있었습니다.

그런 다음 이를 다음으로 변경했으며 read -rsn2 key && echo "$key" | xxd이스케이프 시퀀스에 포함된 문자 수에 따라 확장됩니다. 약간의 실험을 통해 트릭을 수행할 수 있습니다. 그래서 내 터미널에는둘 다과거에는 편의상의 이유로 Ctrl+ 및 Alt+Backspace가 0x1b, 0x7f(메타-백스페이스)에 매핑되었습니다. 처음에는 두 콤보가 포함된 단어를 삭제할 수 있도록 새 터미널 에뮬레이터를 구성하고 싶지만 그 중 하나만 작동하기 때문에 이 경로를 따르겠습니다. in bash 는 read -rsn.bash보다 낮은 수준의 출력 디버깅을 수행하는 데 좋은 도구입니다 cat.

관련 정보