xmodmap
map META_Lto key를 사용해 보았지만 메타 키로 MENU허용되지 않는 것 같습니다 . bash
그래서 이러한 구성 요소(키보드, X, xterm, bash)가 메타키와 슈퍼키 측면에서 서로 어떻게 관련되어 있는지 궁금합니다. 어떤 설명이라도 대단히 감사하겠습니다.
다른 말로 표현하겠습니다. 예를 들어, bash 매뉴얼 페이지에서는 yank-nth-arg 함수가 바인딩되어 있고 를 M-C-y누르면 작동한다는 것을 보여줍니다 Esc-Control-y. 그런데 이게 좀 곤란한 것 같아요. 그렇다면 bash가 다른 키를 모든 기본 바인딩으로 허용하도록 하려면 어떻게 해야 할까요 Meta(예:)?Menu
답변1
Meta
키보드 키에서 수정자(예: 및 )로의 매핑은 Control
GUI의 하위 수준 부분인 X 서버에서 처리됩니다. 이 매핑은 이전 스타일을 통해 조작될 수 있습니다.xmodmap
명령 또는 새 스타일XKB인터페이스를 사용하거나 배후에서 GUI 구성 도구 중 하나를 사용합니다.
기본적으로 대부분의 설정에서 이 Meta
키는 레이블이 붙은 키입니다 Alt. 그 이유는 역사적으로 많은 UNIX 워크스테이션에는 이라는 레이블이 붙은 키가 있었고 MetaPC에는 이라는 레이블이 붙은 키가 있었기 때문입니다 Alt. 따라서 바인딩이 있는 경우 + +를 M-C-y
누르십시오 .CtrlAltY
현재 바인딩이 무엇인지 확인하려면 xev
터미널에서 프로그램을 실행하세요. xev 창에 초점이 맞춰져 있는 동안 키를 누르면 터미널에 생성된 이벤트 기록이 표시됩니다.
터미널 에뮬레이터(또는 물리적 터미널에 해당하는 터미널 장치)와 애플리케이션 간의 통신은 문자를 사용합니다. 를 누르면 A터미널은 "key, nomodifier"라는 메시지를 받지만 A
터미널에서 실행 중인 애플리케이션으로 보내는 것은 문자입니다 a
. Up또는 와 같은 기능 키를 누르면 F1해당 문자가 없습니다. 터미널은 이스케이프 문자(바이트 27, 때로는 \e
또는 로 표시됨)로 ^[
시작하는 일련의 문자를 보냅니다. 터미널 에뮬레이터( like) Meta
인 경우 \ea
.MetaA
"터미널", "쉘", "tty" 및 "콘솔"의 정확한 차이점은 무엇입니까?유용한 배경이 될 수 있습니다.
답변2
주요 이벤트는 X 서버(구성된 대로 xmodmap
)에 의해 생성되어 X 애플리케이션으로 전송됩니다. 창 관리자는 xterm으로 보내기 전에 이를 가로챌 수 있습니다. 그러면 XTerm은 이벤트를 일부 바이트로 변환하고 해당 바이트를 쉘 bash가 할당한 의사 tty로 보냅니다.
모든 이벤트가 XTerm에 의해 바이트로 직접 변환되는 것은 아닙니다. 예를 들어 Ctrl및 shift키 자체는 X 키보드 이벤트를 생성하지만 XTerm은아무것도 없다그 안에서 실행되는 셸(또는 다른 응용 프로그램)에. 여기에는 Meta키 자체 도 포함되지만 Menu비밀 키는 포함되지 않습니다. 그러나 press Meta생성 이벤트 e로 인해 XTerm은 XTerm.VT100.metaSendsEscape 리소스 설정에 따라 바이트 0xE5 또는 2바이트 시퀀스 0x1B 0x65를 전송하게 됩니다.
답변3
배쉬의메타 키원래는 다음과 같이 정의되었습니다(lib/readline/ChangeLog
):
Mon Jul 13 11:34:07 1992 Brian Fox (bfox@cubit)
* readline.c: (rl_variable_bind) New variable "meta-flag" if "on"
means force the use of the 8th bit as Meta bit. Internal variable
is called meta_flag.
바로 이렇게 설명되어 있어요저주그리고xterm. ㅏ희귀한이 기능을 선택적으로 만들기 위해 제공되는 터미널(이 측면은 일반적이지 않습니다. 대부분의 터미널은 하드 코딩된 동작을 사용합니다(그리고 별로 흥미롭지 않습니다).용어 정보매뉴얼 페이지에는 다음 터미널 기능이 설명되어 있습니다.
has_meta_key km km Has a meta key
(i.e., sets 8th-bit)
meta_off rmm mo turn off meta mode
meta_on smm mm turn on meta mode
(8th-bit on)
기능을 설명합니다.
이 사실은 터미널에 전송된 문자의 비트 8을 설정하는 Shift 키 역할을 하는 "메타 키"가 있는 경우 표시될 수 있습니다
km
. 그렇지 않으면 소프트웨어는 비트 8이 패리티 비트라고 가정하고 일반적으로 지워집니다. 이 "메타 모드"를 켜고 끄는 문자열이 있는 경우smm
및 로 지정할 수 있습니다rmm
.
Alt
일부 터미널 에뮬레이터에 통합된 다른 기능은 키에 응답할 때 이스케이프 문자 앞에 붙는 것입니다. Bash(실제로는 readline
라이브러리)는 사용법을 문서화합니다.변경 로그2004년 이후:
lib/readline/callback.c
- use _rl_dispatch_callback and a chain of _rl_keyseq_contexts to
simulate the recursion used to decode multicharacter key sequences
(even things like ESC- as meta-prefix
메타는 특별한 경우이다수정자열쇠. control및 와 마찬가지로 shift다른 키와 동시에 누르면 키만 누를 때와는 다른 결과가 나올 것으로 예상됩니다. X 키의 X 이벤트에 전달된 수정자 값에 비트를 할당하여 수정자 키를 제공합니다. 키 누르기는 여러 X 이벤트일 수 있습니다. X는 수정자를 유지하면서 이러한 이벤트를 결합하는 기능을 제공합니다.
X는 또한 키보드에 나타날 수 있는 모든 키에 대한 기호를 정의합니다. 이벤트를 결합하는 함수의 특수 처리를 통해 다른 값(예: 유니코드)을 제공합니다.
하지만 '위안'은 특별한 경우다.
metaX 응용 프로그램에는 관례를 제외하고는 키가 없습니다 . X에는 메타키나 메타수정자가 정의되어 있지 않습니다. 관례적으로 터미널은 Alt-key 및/또는 알려진 수정자 중 하나를 찾습니다.xmodmap
,예를 들어, mod2
. 나중에xkb이 기능은 키를 찾기 위해 또 다른 정보 계층을 제공하여 상황을 복잡하게 만듭니다(그러나 이 논의에 대한 개선 사항은 제공하지 않습니다) Alt.
물론 관습은 당신을 지금까지만 데려갈 수 있습니다. 왜냐하면 당신은 구체적인 어떤 것도 모르 xmodmap
거나 알지 못하기 때문입니다.xkb
원. 예를 들어, xterm은 구성 가능하지만 모든 사용자가 이를 구성하기를 원하는 것은 아닙니다.원같은 방법으로. 예를 들어 리소스에서 사용되는 Alt경우 예상되는 메타키가 아닐 수도 있습니다 . translation
다른 키는 메타키일 수 있지만 사용자(특히 bash에서 이스케이프 시퀀스를 사용하는 사용자)는 를 누를 때 이스케이프 문자를 보내고 싶어할 수 있습니다 Alt. 하지만 다음과 같이 구성되지 않는 한 기억하세요.수정자이런 일은 일어나지 않습니다. xterm 자체는 이벤트를 결합하지 않습니다.
xterm에는 여러 리소스 설정이 있습니다(문서화:매뉴얼 페이지):
altIsNotMeta
그리고altSendsEscape
(추가2007년).eightBitInput
~부터2006년메타 패턴의 원래 의미에 해당하며 이에 대한 이스케이프 시퀀스를 정의합니다. 이는smm
및rmm
(메타 패턴 설정/제거) 터미널 기능을 제공합니다.eightBitInput
에서 수정되었습니다2003년원래 입력 바이트 대신 디코딩된 유니코드 값을 128만큼 이동하여 UTF-8을 고려하십시오.metaSendsEscape
에서 날짜1999년eightBitInput
이전의metaSendsEscape
. 이는 다음 중 하나를 선택하여 달성되었습니다.원escape모드(8번째 비트 추가) 또는 X11R4(1989) 이후로 키 앞에 붙습니다 . 그러나 기능은 시작 시 결정됩니다. 초기화 중에 입력이 8비트를 허용하도록 설정되었는지 아니면 7비트만 허용하도록 설정되었는지 확인하기 위한 검사가 수행됩니다. 그 이후로 변하지 않았습니다.
어떤 사람들은 이 둘을 동일시합니다(8호및 이스케이프 접두사), 후자를 다음과 같이 참조하십시오.원모델. 문제를 어떻게 보느냐에 따라 eightBitInput
xterm의 리소스 설정은 사용 가능한 메타키를 얻는 솔루션의 일부입니다.
추가 자료: