나는 bash의 제어 문자 사용을 정말로 이해하지 못합니다. 색상을 추가하기 위해 이스케이프 시퀀스를 사용하는 것과 같은 간단한 것은 이해하지만 키 바인딩과 같은 작업을 수행하는 방법은 이해하지 못합니다 .inputrc
.
Shifta예를 들어, 이와 같은 것을 입력 하고 이를 어떻게 표현해야 하는지 확인할 수 있는 방법이 있습니까 .inputrc
?
이 친구가 여기서 했던 것처럼: http://linuxart.com/log/archives/2005/10/13/super-useful-inputrc
답변1
참고로,다음은 archive.org OP의 질문에 있는 (죽은) 링크의 사본입니다.. 표시된 코드는 emacs lisp 스타일 코드입니다. 나는 그들에 대해 잘 모릅니다. 물론 고양이의 가죽을 벗기는 방법은 여러 가지가 있지만 아마도 가장 쉬운 방법은 다음과 같습니다.
먼저 를 showkey -a
사용하여 키보드 시퀀스의 16진수 표현을 가져옵니다. 예를 들어 을 누르면 다음과 같은 결과 CtrlShift~가 나타납니다.
^^ 30 0036 0x1e
따라서 내 16진수 표현은 입니다 0x1e
. 그런 다음 내 항목에 한 줄을 추가할 수 있습니다 ~/.inputrc
.
"\x1e": beginning-of-line
다음에 bash 쉘(또는 readline을 사용하는 프로그램)을 열 때, 입력하면 CtrlShift~커서가 줄의 시작 부분으로 이동합니다. 다음을 수행할 수도 있습니다.
"\x1b\x5a": "type this text whenever I press alt+shift+z"
답변2
OP의 질문에서 제기된 기본 질문은 readline(및 bash)의 제한 사항을 해결하는 방법입니다.
- 기능 키 및 커서 키와 같은 특수 키는 종종 이스케이프 시퀀스를 보냅니다.
- 이스케이프 시퀀스는 터미널과 초기화 방법에 따라 다를 수 있습니다.
- 터미널 설명의 주요 차이점 중 하나는신청방법비교적일반 모드.
- 응용 프로그램 모드에서는 커서 키가 전송될 수 있지만
\eOA
(bash의 이름을 이스케이프 문자로 사용) 일반 모드에서는 전송됩니다\e[A
. - 전체 화면 응용 프로그램(터미널 데이터베이스 지원)은 일반적으로 응용 프로그램 모드를 사용하지만 Linux 콘솔에 제공되는 터미널 설명과 같은 예외가 있습니다.
- 터미널 설명이 애플리케이션 모드를 사용하는 경우 터미널 설명에 정의된 키가 셸에 표시되는 값과 일치하지 않습니다(셸에 해당 기능이 켜져 있지 않기 때문입니다
smkx
).
readline 정렬은 터미널 데이터베이스에 중점을 두지만(편집 중인 줄 주위로 커서를 이동할 수 있도록) 애플리케이션 모드와 일반 모드에 대한 키 바인딩 정보로 유용한 작업을 수행하기에는 충분하지 않습니다. readline을 사용하려면 사용하는 각 터미널과 일치하는 하드코딩된 이스케이프 시퀀스를 제공해야 합니다. 물론 여러 시퀀스를 동일한 함수에 매핑할 수 있습니다. 다행스럽게도 동일한 시퀀스가 충돌하여 사용되는 경우는 거의 없습니다.
특수 키로 전송된 문자를 휴대용으로 찾으려면 cat -v
명령을 입력하고 키를 눌러 결과를 확인하세요. ^[
각 이스케이프 문자에 개별적 으로 해당됩니다. 다른 문자는 그대로 사용할 수 있습니다.
그런데,showkey
Linux에만 해당되며 다음에서만 사용할 수 있습니다.편안.
추가 자료:
- 특수 키(xterm 매뉴얼)
- 내 키보드가 보내는 내용을 어떻게 확인할 수 있나요?(ncurses FAQ)
- 커서 키가 작동하지 않습니다(ncurses FAQ)