
일부 키 시퀀스 바인딩을 설치하려고 하는데 문제가 발생했습니다. 내 쉘은 bash이고 터미널은 gnome-terminal이며 시스템은 그래픽 모드의 Ubuntu 14.04입니다. 편집: 내 키보드는 숫자 패드와 ctrl, fn, super, alt가 있는 프랑스어 azerty입니다.
편집하다:ㅏBash 가이드, 장 읽기
추가하고 싶어요 contol++altspace, 그러나 이 정확한 순서는 작동하지 않지만 유사한 다른 순서는 잘 작동합니다. 내 목표는 shell-expand-line readline을 실행하는 것이지만 비교를 위해 upcase-word를 시도했습니다.
--나의 타겟의 설치 효과를 분석해보자.
이것이 내가 추가한 것입니다 ~/.inputrc
( ctrl++ ).metaspace
"\e\C- ": shell-expand-line
새로운 결과는 다음과 같습니다 bind -p
.
"\e\C-@": shell-expand-line
물론 철저한 비교를 위해 설치 전과 설치 후에 하나씩 몇 개의 터미널을 가동했습니다.
--control+meta 대신 control+alt가 작동하는지 확인하기 위한 몇 가지 실험입니다.
시스템은 "\033" 바이트를 사용하여 Meta로 에뮬레이션해야 Alt하고 bash는 Meta로 에뮬레이트해야 합니다.Escape둘 다 해봤는데 괜찮다는 결론이 Alt나네요Esc. 확인하기 위해 ctrl+meta+letter 시퀀스를 테스트했습니다.
그런데 Ctrl+의 개별 샘플은 간단합니다. 분리된 물결표 "~"(쉘 확장 라인)를 확장하거나 Alt+ + 또는 + +를 사용하여 임의의 소문자 단어(대문자 단어)의 대소문자를 변경합니다. ++는 이미 shell-expand-line에 바인딩되어 있으므로 쓸모없는 ++와 바인딩을 혼합했습니다.ctrlmetaectrlmetavCtrlmetaectrlmetav
—좀 더 복잡한 관찰…
"^@"이 "NUL" 문자를 설명한다는 것을 읽었습니다.왜 이렇게 도망쳐?
xev를 테스트하고 ctrl+ alt+를 눌렀습니다 space. 보고된 문자는 "NUL" 문자입니다.
Alt+Space는 일반적으로 그놈 터미널의 창 메뉴를 여는 반면 Alt는 물론 Ctrl 키 없이 메뉴를 활성화합니다.
갈등은 시스템에서 오는 것 같지만 나는 이것이 처음이다. 나는 방금 대부분의 bash 매뉴얼(특히 readline 장)과 xev에 대한 포럼 제안을 읽었습니다.
- 질문
더 할 말이나 수정할 부분이 있나요? 시퀀스를 다시 작성하는 이유는 무엇입니까? ctrlbash 및 gnome-terminal에서 ++를 작동시키려면 어떻게 해야 합니까 ?altspace
편집: 탈출할 때 비트 마스크가 적용되기 때문에 "@"이 "NUL"로 변환된다는 것을 발견했지만 Alt+가 "NUL"을 제공하는 space이유는 보이지 않습니다.
답변1
터미널 에뮬레이터(귀하의 경우 Gnome 터미널)는 Ctrl++ ( 및 메타 수정자 와 함께 키 기호로 수신됨 )와 같은 Alt키 조합을 바이트 시퀀스로 변환합니다. 공백과 같은 텍스트 문자는 있는 그대로 전송됩니다. 문자에 해당하지 않는 키는 제어 문자(예: 바이트 13 = 캐리지 리턴 = , 바이트 9 = 탭 = )로 전송되고, 존재하지 않으면 제어 문자로 전송됩니다. 바이트 27 = escape로 시작하는 이스케이프 시퀀스로 전송됩니다. + 문자는 이스케이프 문자로 전송되고 그 뒤에 해당 문자가 옵니다(모든 의도와 목적을 위해 오늘날의 일반적인 구성에서 "Alt"와 "Meta"는 동의어로 간주됩니다. 이 기사에서는 해당 주제에 대해 논의하지 않겠습니다). 당신은 또한 볼 수 있습니다SpaceSpace
Ctrl
a
ReturnTabAlt키보드 입력과 텍스트 출력은 어떻게 작동합니까?
Ctrl+ 문자가 있으면 제어 문자로 전송됩니다(예: + 또는 ++ Ctrl→ A바이트 Ctrl1 = ^A). 제어 공간 문자는 없지만 역사적 이유로 + 키 조합은 일반적으로 바이트 0 = ^@으로 전송됩니다.ShiftACtrlSpace
CtrlVbash 명령줄에서 +를 누른 다음 관심 있는 키 또는 키 조합을 누르면 터미널에서 보낸 키 시퀀스를 볼 수 있습니다 . Ctrl+는 Vbash에게 명령으로 해석하지 않고 다음 문자를 삽입하도록 지시합니다.
Ctrl++를 2바이트 시퀀스 27, 0 Alt= escape, ^@로 Space전송하는 것이 논리적입니다 . 안타깝게도 Gnome Terminal은 이를 수행하지 않고 27, 32 = escape, space를 보냅니다. Gnome Terminal에서 보낸 키 시퀀스를 구성할 수 없습니다(VTE 라이브러리를 패치해야 함). 따라서 터미널에서 Ctrl++를 사용하려면 Alt다음과 같은 몇 가지 가능성이 있습니다.Space
- 다른 터미널 에뮬레이터를 사용하십시오. 우분투에는 약 40개가 있습니다.
- 소스 코드 편집VTE 라이브러리다른 이스케이프 시퀀스를 보내도록 만드세요. 이를 개선 사항으로 제안할 수도 있습니다.
LD_PRELOAD
Gnome 터미널에서 libvte로 호출을 패치하는 경우일 수 있습니다 . 나는 그것이 실용적인지 확인하지 않았으며 어쨌든 번거로울 것입니다. 관심이 있다면 다른 터미널 에뮬레이터를 사용하십시오.- Gnome 터미널 창이 활성화되면 Ctrl+ 가 + 로 Alt변경 되도록 창 관리자나 외부 프로그램을 구성하십시오 . 대부분의 환경에서는 다른 애플리케이션을 방해하지 않고 이를 수행하는 것이 쉽지 않습니다.SpaceEsc CtrlSpace
간단히 말해서, 이 바인딩을 사용하려면 xterm(키 조합의 이스케이프 시퀀스를 완전히 구성할 수 있는 경우)과 같은 다른 터미널 에뮬레이터를 사용해야 합니다.
답변2
귀하의 그놈 터미널(실제로는 기본 vte-0.34)이 잘못된 ctrl++ Alt시퀀스를 내보내고 있습니다 space. 실수(https://bugzilla.gnome.org/show_bug.cgi?id=710349) vte-0.36에서 수정되었습니다.
해커를 두려워하지 않고 문제가 발생해도 안전하게 복구할 수 있다면 Ubuntu 14.04에 vte-0.36을 설치해 볼 수 있습니다. 이 수정 및 개선 외에도 많은 다른 기능을 얻을 수 있습니다. Gnome3 스테이징에서 PPA 또는 패키지를 찾거나 직접 컴파일할 수 있습니다. 이 버전의 vte로 업그레이드하면 다른 소프트웨어 구성 요소를 건드릴 필요가 없습니다. gnome-terminal을 완전히 다시 시작해야 합니다(모든 창이 닫힙니다).