내가 이해한 바에 따르면 터미널은 일반적으로 영숫자가 아닌 문자의 시퀀스를 나타내기 위해 ANSI 제어 코드를 사용합니다. 예를 들어 .inputrc
Linux에서 Bash를 편집할 때 다음과 같은 코드 시퀀스를 쉽게 찾을 수 있습니다.
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
위의 명령정의Bash 명령 history-search-backward
등에 대한 키 바인딩
이제 bash에서는 read
키보드에 입력된 문자가 ANSI 제어 코드에 어떻게 매핑되는지 확인할 수 있습니다. 예를 들어, 실행 read
하고 를 입력 하면 Ctrl-P
다음과 같은 결과가 나타납니다 ^P
. 마찬가지로 를 입력하면 Alt-W
다음과 같은 결과가 표시됩니다 ^[W
.
내 질문은: 그 반대를 수행하는 프로그램, 도구 또는 웹 사이트가 있습니까? 즉, 주어진 ANSI 제어 코드 시퀀스를 얻기 위해 키보드에 입력해야 하는 키보드 키 시퀀스를 출력하거나 표시하는 도구입니다. 예를 들어 입력은 다음 ^[W
을 출력해야 합니다.Alt-W
감사해요!
답변1
infocmp
도울 수있다. or \E
대신 escape 를 씁니다 .\e
^[
예를 들어, 이를 찾으려면 \e[A
기록을 거꾸로 살펴보세요.
$ infocmp -1x | grep -F '=\E[A,'
cuu1=\E[A,
$ man 5 terminfo | grep ' cuu1 '
cursor_up cuu1 up up one line
위쪽 화살표라고도 알려진 커서를 위로 누르라는 메시지가 표시됩니다.
+ -x
와 같은 특정 조합을 표시하려면 위에 표시된 플래그가 필요합니다 .Ctrl<-
이러한 확장 키는 표준의 일부가 아니므로 terminfo 매뉴얼 페이지에는 나열되지 않지만 다음 문서에 문서화되어 있습니다.용어 정보 파일.
또한 사용하는 단말기에 따라 제어 순서가 다르기 때문에 주의하시기 바랍니다.
infocmp -1x <terminal>
예를 들어 등을 사용하여 다양한 터미널에 대한 정보를 얻을 수 있습니다 infocmp -1x rxvt
.infocmp -1x putty
당신이 어떤 terminfo를 갖고 있다고 생각하는지 파악한 후에는 변수를 일치하도록 설정하면 TERM
작업이 더 쉬워집니다 .
답변2
이 cat
기능은 키보드가 실제로 보내는 내용을 표시하는 데 사용할 수 있기 때문에 이를 수행하는 일반적인 방법입니다. bash는 터미널 데이터베이스의 확장 정보를 사용하지 않습니다.하위 집합전통적인 termcap 기능의 일부).
cat
물론 사용의 단점은
^[[A
예^
[
A
또는 escapeA
\e
(Bash는 이 문자의 인쇄 가능한 표현을 제공합니다 escape.)
실제로는 전자를 무시할 수 있습니다. 기본적으로 아무도 이 세 문자 문자를 보내지 않으며 "모든 사람"이 문자 ^[
로 보냅니다 escape.
추가 자료:
- 내 키보드가 보내는 내용을 어떻게 확인할 수 있나요?(ncurses FAQ)
- 매핑 해제escape(로 번역될 수 있는 프로그램
\E
).