La méta-clé de Bash était à l'origine définie comme ceci ( 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.
Cela se trouve être la façon dont il est interprété avec ncurses et xterm . A quelques bornes prévues pour faire cette fonctionnalité en option (cet aspect n'a pas été répandue La plupart des terminaux vous rencontrerez l' utilisation des comportements hardcoded (et pas très intéressant) Les.. Terminfo documents page de manuel ces capacités du 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)
et explique la fonctionnalité:
Si le terminal possède une "méta-clé" qui agit comme une touche Maj, définissant le 8ème bit de n'importe quel caractère transmis, ce fait peut être indiqué par km
. Sinon, le logiciel supposera que le 8ème bit est la parité et il sera généralement effacé. Si des chaînes existent pour activer et désactiver ce "mode méta", elles peuvent être données comme smm
et rmm
.
Une fonctionnalité différente, préfixant un caractère d'échappement en réponse à la Alt
clé, a été intégrée dans certains émulateurs de terminal. Bash (en fait la readline
bibliothèque) documente cette utilisation dans son journal des modifications 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
La méta est un cas particulier d'une touche de modification . Comme controletshift , vous appuyez dessus en même temps qu'une autre touche et vous attendez à voir quelque chose de différent que d'appuyer sur la touche seule. X fournit des touches de modification en affectant un bit à la valeur de modification transmise lors de l'événement X pour la touche. Les pressions sur les touches peuvent être de multiples événements X; X fournit des fonctions pour combiner ces événements tout en conservant les modificateurs.
X définit également des symboles pour chacune des touches pouvant apparaître sur votre clavier. Il fournit d'autres valeurs (comme Unicode) par une manipulation spéciale dans les fonctions qui combinent les événements.
Mais "meta" est un cas particulier.
Les applications X n'ont pas de metaclé, sauf par convention. X n'a pas de définition pour la touche méta ou le modificateur méta. Classiquement, les terminaux recherchent la Alttouche et / ou l' un des modificateurs connus xmodmap
, par exemple mod2
. La dernière fonctionnalité xkb complique les choses (mais n'apporte aucune amélioration par rapport à cette discussion) en fournissant une autre couche d'informations pour trouver la Altclé.
La convention ne peut bien sûr vous emmener que si loin, étant donné que ni xmodmap
ni xkb
rien en particulier sur les méta . xterm, par exemple, est configurable et tous les utilisateurs ne souhaitent pas configurer la méta de la même manière. Par exemple, Altpeut ne pas être la méta-clé voulue, par exemple, si elle est utilisée dans la translation
ressource. Une autre clé peut être la méta-clé, mais les utilisateurs (en particulier ceux qui utilisent des séquences d'échappement dans bash) peuvent vouloir qu'un caractère d'échappement soit envoyé lorsqu'ils appuient Alt. Mais gardez à l'esprit qu'à moins qu'il ne soit configuré comme modificateur, rien de tout cela ne se produit: xterm ne combine pas les événements par lui-même.
xterm possède plusieurs paramètres de ressources (documentés dans la page de manuel ):
altIsNotMeta
et altSendsEscape
(ajouté en 2007 ).
eightBitInput
depuis 2006 correspond au sens original du méta-mode, et il y a une séquence d'échappement définie pour cela qui fournit les capacités terminales smm
et rmm
(définir / supprimer le méta-mode).
eightBitInput
a été modifié en 2003 pour prendre en compte l'UTF-8 en décalant les valeurs Unicode décodées de 128 plutôt que les octets d'entrée bruts.
metaSendsEscape
date de 1999
eightBitInput
est beaucoup plus âgé que metaSendsEscape
. Cela a implémenté un choix entre le mode méta (ajout du huitième bit) ou le préfixe d'une clé escapedepuis X11R4 (1989). Mais la fonctionnalité a été déterminée au démarrage: elle a été vérifiée lors de l'initialisation pour déterminer si l'entrée a été définie pour autoriser 8 bits ou seulement 7. Après cela, elle n'a pas changé.
Certaines personnes assimilent les deux ( 8e bit et préfixe d'échappement), faisant référence à ce dernier comme mode méta . Selon votre point de vue sur la question, le eightBitInput
réglage des ressources de xterm fait partie de la solution pour obtenir une méta-clé fonctionnelle.
Lectures complémentaires:
MENU
clé est-elle même remarquée par X? Quel gestionnaire de fenêtres utilisez-vous - certains d'entre eux peuvent vous aider à redéfinir vos clés.