Bashs Metaschlüssel wurde ursprünglich wie folgt definiert ( 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.
Das ist zufällig so, wie es mit ncurses und xterm interpretiert wird . Ein paar Terminals für die Herstellung dieses Merkmal optional zur Verfügung gestellt (dieser Aspekt war nicht weit verbreitet Die meisten der Terminals werden Sie Gebrauch fest einprogrammiert Verhalten (und nicht sehr interessant) die Begegnung.. Term manpage dokumentiert diese Endgeräte - Leistungsmerkmale:
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)
und erklärt die Funktion:
Wenn das Terminal eine "Meta-Taste" hat, die als Umschalttaste fungiert und das 8. Bit eines übertragenen Zeichens setzt, kann dies mit angezeigt werden km
. Andernfalls geht die Software davon aus, dass das 8. Bit Parität ist, und es wird normalerweise gelöscht. Wenn Zeichenfolgen zum Ein- und Ausschalten dieses "Metamodus" vorhanden sind, können sie als smm
und angegeben werden rmm
.
Alt
Einige Terminal-Emulatoren enthielten eine andere Funktion, die als Reaktion auf den Schlüssel ein Escape-Zeichen voranstellte. Bash (eigentlich die readline
Bibliothek) dokumentiert diese Verwendung in seinem Changelog von 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 ist ein Sonderfall einer Modifikatortaste . Wie controlund shift, drücken Sie es gleichzeitig mit einer anderen Taste und erwarten etwas anderes als das Drücken der Taste für sich. X stellt Änderungsschlüssel bereit, indem ein Bit in dem Änderungswert zugewiesen wird, der im X-Ereignis für den Schlüssel übergeben wird. Tastendrücke können mehrere X-Ereignisse sein. X bietet Funktionen zum Kombinieren dieser Ereignisse unter Beibehaltung der Modifikatoren.
X definiert auch Symbole für jede der Tasten, die möglicherweise auf Ihrer Tastatur angezeigt werden. Sie sieht andere Werte (wie Unicode) durch spezielle Behandlung in den Funktionen vor, die Ereignisse kombinieren.
Aber "Meta" ist ein Sonderfall.
X-Anwendungen haben keinen metaSchlüssel, außer gemäß Konvention. X hat keine Definition für den Metaschlüssel oder den Metamodifikator. Herkömmlicherweise suchen Terminals nach der Alt-Taste und / oder einem der Modifikatoren, die bekannt sind xmodmap
, z mod2
. Die spätere xkb- Funktion verkompliziert die Dinge (bietet jedoch keine Verbesserung im Vergleich zu dieser Diskussion), indem sie eine weitere Informationsebene bereitstellt, um den AltSchlüssel zu finden .
Die Konvention kann Sie natürlich nur so weit bringen, da Sie nichts Besonderes über Meta wissen xmodmap
oder xkb
wissen . xterm ist beispielsweise konfigurierbar, und nicht alle Benutzer möchten Meta auf die gleiche Weise konfigurieren . Beispielsweise kann es sein , dass dies nicht der beabsichtigte Metaschlüssel ist, z. B. wenn er in der Ressource verwendet wird. Ein anderer Schlüssel kann der Meta-Schlüssel sein, aber Benutzer (insbesondere Benutzer, die Escape-Sequenzen in der Bash verwenden) möchten möglicherweise ein Escape-Zeichen, wenn sie drücken . Beachten Sie jedoch, dass nichts davon passiert , wenn es nicht als Modifikator konfiguriert ist : xterm kombiniert keine Ereignisse für sich.Alttranslation
Alt
xterm verfügt über mehrere Ressourceneinstellungen (dokumentiert in der Manpage ):
altIsNotMeta
und altSendsEscape
(hinzugefügt 2007 ).
eightBitInput
seit 2006 entspricht der ursprüngliche Sinn des Meta-Modus, und es ist eine Escape-Sequenz dafür definiert, die die Funktionen smm
und rmm
(Meta-Modus einstellen / entfernen) des Terminals bereitstellt .
eightBitInput
wurde 2003 geändert , um UTF-8 zu berücksichtigen, indem die decodierten Unicode-Werte um 128 anstatt um die unformatierten Eingangsbytes verschoben wurden.
metaSendsEscape
stammt aus dem Jahr 1999
eightBitInput
ist viel älter als metaSendsEscape
. Das hat eine Wahl zwischen dem Meta- Modus (Hinzufügen des achten Bits) oder dem Präfixieren eines Schlüssels mit escapeseit X11R4 (1989) implementiert. Die Funktion wurde jedoch beim Start ermittelt: Sie wurde während der Initialisierung überprüft, um festzustellen, ob der Eingang so eingestellt war, dass er 8 Bit oder nur 7 Bit zulässt. Danach wurde keine Änderung vorgenommen.
Einige Leute setzen die beiden gleich ( 8-Bit und Escape-Präfix) und bezeichnen letzteres als Meta- Modus. Abhängig von Ihrer Sicht auf die Angelegenheit ist die eightBitInput
Ressourceneinstellung von xterm Teil der Lösung, um einen funktionsfähigen Metaschlüssel zu erhalten.
Weitere Lektüre:
MENU
Schlüssel überhaupt von X bemerkt? Welchen Fenstermanager verwenden Sie? Einige davon können Ihnen dabei helfen, Ihre Schlüssel neu zu definieren.