A meta-chave originalmente foi definida assim ( 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.
Por acaso, é assim que é interpretado com ncurses e xterm . Um poucos terminais fornecidos para tornar esse recurso opcional (esse aspecto não era difundido. A maioria dos terminais que você encontrará usa um comportamento codificado (e não muito interessante). terminfo documenta esses recursos do terminal:
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)
e explica o recurso:
If the terminal has a "meta key" which acts as a shift
key, setting the 8th bit of any character transmitted,
this fact can be indicated with km
. Otherwise, software
will assume that the 8th bit is parity and it will usually
be cleared. If strings exist to turn this "meta mode" on
and off, they can be given as smm
and rmm
.
Um recurso diferente, o prefixo de um caractere de escape em resposta à chave Alt
foi incorporado em alguns emuladores de terminal. Bash (na verdade, a biblioteca readline
) documenta esse uso em seu changelog de 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
Meta é um caso especial de uma tecla modificadora . Como control e shift , você pressiona ao mesmo tempo que outra tecla e espera ver algo diferente de pressionar a tecla por si só. X fornece chaves modificadoras atribuindo um bit no valor do modificador passado no evento X da chave. Prensas de tecla podem ser múltiplos eventos X; X fornece funções para combinar esses eventos enquanto mantém os modificadores.
X também define símbolos para cada uma das chaves que podem aparecer no seu teclado. Ele fornece outros valores (como Unicode) por manipulação especial nas funções que combinam eventos.
Mas "meta" é um caso especial.
As aplicações X não possuem uma chave meta , exceto por convenção. X não possui uma definição para a meta-chave ou o modificador meta. Convencionalmente, os terminais procuram a tecla Alt e / ou um dos modificadores conhecidos por xmodmap
, por exemplo, mod2
. O último recurso xkb complica as coisas (mas não fornece melhorias em relação a esta discussão) fornecendo outra camada de informação para encontrar a tecla Alt .
A convenção só pode levá-lo até agora, dado que nem xmodmap
nem xkb
sabem alguma coisa em particular sobre meta . O xterm, por exemplo, é configurável, e nem todos os usuários querem configurar o meta da mesma maneira. Por exemplo, Alt pode não ser a meta-chave pretendida, por exemplo, se for usada no recurso translation
. Outra chave pode ser a meta key, mas os usuários (particularmente aqueles que usam sequências de escape no bash) podem querer que um caractere de escape seja enviado quando pressionar Alt . Mas tenha em mente que, a menos que seja configurado como um modificador , nada disso acontece: o xterm não combina eventos sozinho.
O xterm tem várias configurações de recursos (documentadas na página de manual ):
-
altIsNotMeta
e altSendsEscape
(adicionado em 2007 ).
-
eightBitInput
desde 2006 corresponde ao sentido original do meta-modo, e há uma seqüência de escape definida para isso, que fornece os recursos de terminal smm
e rmm
(definir / remover meta-modo).
-
eightBitInput
foi modificado em 2003 para levar em consideração o UTF-8 alterando os valores Unicode decodificados por 128, em vez dos bytes de entrada brutos.
-
metaSendsEscape
datas de 1999
-
eightBitInput
é muito mais antigo que metaSendsEscape
. Isso implementou uma escolha entre o modo meta (adicionando o oitavo bit) ou prefixando uma chave com escape desde o X11R4 (1989). Mas o recurso foi determinado na inicialização: ele foi verificado durante a inicialização para determinar se a entrada foi definida para permitir 8 bits ou apenas 7. Depois disso, ela não mudou.
Algumas pessoas igualam os dois ( 8-bit e prefixo-escape), referindo-se a este último como modo meta . Dependendo do seu ponto de vista sobre o assunto, a configuração de recurso eightBitInput
do xterm é parte da solução para obter uma meta-chave viável.
Leitura adicional: