В Bash ключ мета первоначально был определен как это ( 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.
Это происходит так, как это интерпретируется с помощью ncurses и xterm . Через несколько терминалов , предусмотренных для создания этой функции факультативного (этот аспект не были широко распространен Большинство терминалов вы будете сталкиваться использовать жёстко поведение (и не очень интересно) В.. Terminfo руководств документов эти возможностей терминала:
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)
и объясняет функцию:
Если терминал имеет «мета-ключ», который действует как клавиша Shift, устанавливая 8-й бит любого передаваемого символа, этот факт можно указать с помощью km
. В противном случае программное обеспечение будет предполагать, что 8-й бит равен четности, и обычно он очищается. Если существуют строки для включения и выключения этого «мета-режима», они могут быть заданы как smm
и rmm
.
В Alt
некоторые эмуляторы терминала была добавлена другая функция - префикс escape-символа в ответ на ключ. 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 также определяет символы для каждой из клавиш, которые могут появиться на вашей клавиатуре. Он обеспечивает другие значения (например, Unicode) с помощью специальной обработки в функциях, которые объединяют события.
Но «мета» - это особый случай.
У приложений X нет metaключа, кроме как по соглашению. У X нет определения мета-ключа или модификатора мета. Обычно терминалы ищут Altключ и / или один из известных модификаторов xmodmap
, например mod2
. Более поздняя функция xkb усложняет ситуацию (но не обеспечивает улучшения по сравнению с этим обсуждением), предоставляя другой уровень информации для поиска Altключа.
Соглашение, конечно, может привести вас только к этому, учитывая, что вы не знаете и ничего xmodmap
не xkb
знаете о мета . Например, xterm настраивается, и не все пользователи хотят настраивать мета одинаково. Например, Altможет не быть намеченный мета-ключ, например, если он используется в translation
ресурсе. Другим ключом может быть мета-ключ, но пользователи (особенно те, которые используют escape-последовательности в bash) могут захотеть, чтобы после их нажатия был отправлен escape-символ Alt. Но имейте в виду, что, если он не настроен как модификатор, ничего этого не происходит: xterm не объединяет события самостоятельно.
У xterm есть несколько настроек ресурса (задокументировано на странице руководства ):
altIsNotMeta
и altSendsEscape
(добавлено в 2007 году ).
eightBitInput
с 2006 года соответствует первоначальному смыслу мета-режима, и для этого определена escape-последовательность, которая обеспечивает возможности терминала ( smm
и rmm
/ или мета-режим).
eightBitInput
был изменен в 2003 году для учета UTF-8 путем смещения декодированных значений Unicode на 128, а не необработанных входных байтов.
metaSendsEscape
датируется 1999 годом
eightBitInput
намного старше чем metaSendsEscape
. В нем реализован выбор между мета- режимом (добавление восьмого бита) или префиксом ключа с escapeX11R4 (1989). Но функция была определена при запуске: она была проверена во время инициализации, чтобы определить, был ли установлен вход для разрешения 8 бит или только 7. После этого он не изменился.
Некоторые люди приравнивают два ( 8-битный и escape-префикс), ссылаясь на последний как мета- режим. В зависимости от вашей точки зрения по этому вопросу eightBitInput
настройка ресурса xterm является частью решения для получения работоспособного мета-ключа.
Дальнейшее чтение:
MENU
ключ даже замечен Х? Какой оконный менеджер вы используете - некоторые из них могут помочь вам переопределить ваши ключи.