Warum wird das Unicode-Zeichen angezeigt, wenn ich unter CentOS in meinem xterm Alt-h eingebe?

2

Ich schaue aus einer Ubuntu-Box in eine Centos-Box. Ich sehe immer wieder, èwenn ich alt+ h(aka M-h) tippe . Ich möchte diese Tastenkombination in tmux-Bindungen verwenden, aber sie funktioniert nicht, weil tmuxutf8-Zeichen nicht erkannt werden. Ich habe dieses Problem nicht auf meiner Ubuntu-Box.

Meine wilde Vermutung ist, dass dies irgendwie mit dem Gebietsschema zusammenhängt. Hier ist meine Ausgabe in CentOS:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

Ich habe bemerkt, dass ich unter Ubuntu eine zusätzliche LANGUAGE=en_US:enZeile in der Ausgabe meines Gebietsschemas habe.

Irgendwelche Vorschläge?

Eric Johnson
quelle
Ich frage mich nur ... wird durch Drücken von Escgefolgt von Hdasselbe Zeichen ausgegeben?
BenjiWiebe
@BenjiWiebe Esc H produziert nicht die gleichen Zeichen
Eric Johnson
Hmmm ... Übrigens Esc Hsollte die Tastenkombination sein, die Sie wollen, wenn Alt Hes nicht funktioniert, können Sie sie verwenden Esc H. Aber ich verstehe, dass Sie wissen wollen, WARUM Alt Hnicht funktioniert. Und um die Wahrheit zu sagen, auch ich. +1
BenjiWiebe

Antworten:

0
tput rmm

Scheint mein Problem zu lösen. Meistens. Aber ich verstehe nicht ganz warum.

Wenn ich infocmpauf meiner Centos-Box laufe, sehe ich das rmmund smmhabe Werte, die sich aber nicht auf meiner Ubuntu-Box befinden. Aus der terminfoManpage habe ich gelernt, dass rmm"den Meta-Modus ausschaltet" und smm"den Meta-Modus einschaltet".

Außerdem scheint es nicht zu funktionieren tput rmm, meinem .bashrc etwas hinzuzufügen. Ich muss es manuell von meiner Centos-Shell ausführen. Wieder verstehe ich nicht warum.

Eric Johnson
quelle
Die Terminal-Datenbank von Ubuntu ist weiter zurück als CentOS (lange Geschichte). Der Upstream-Wechsel erfolgte 2006 entsprechend xterm.
Thomas Dickey
0

Das Ausschalten des Meta-Modus ist Teil der Antwort. xterm hat mehr als eine konfigurierbare Funktion, die damit zusammenhängt. Die ncurses-FAQ- Alt-Tasten funktionieren nicht in bash und bieten einen Teil des Hintergrunds. Grundsätzlich gibt es zwei Begriffe für den Metamodus :

  • xterm und die Terminal-Datenbank (terminfo) dokumentieren die Verwendung eines Metaschlüssels als eine Art Shift-Modifier, der das achte Bit eines Eingangsbytes setzt. Das xterm-Handbuch enthält einige Hinweise zum Thema im Abschnitt für die Ressource eightBitInput . Das terminfo-Handbuch ist prägnanter:

Verfügt das Terminal über eine "Meta-Taste", die als Umschalttaste fungiert und das 8. Bit eines übertragenen Zeichens setzt, kann dies mit km angegeben werden . 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 rmm angegeben werden .

  • bash erwartet, dass ein Escape-Zeichen dem Zeichen vorangestellt wird, auf das der Metaschlüssel angewendet wird. (Es gibt keine Aufzeichnungen darüber, wie bash zu dieser Entscheidung kam und dass es sich um den Metaschlüssel handelte , aber er geht zumindest auf die frühen neunziger Jahre zurück).

Das Problem ist also, dass xterm eine Steuersequenz zum Ein- und Ausschalten des Meta-Modus implementiert hat und Bash einige Erwartungen hatte, was damit zu tun ist. Das Seltsame ist, dass das, worauf Terminal Bash vorbereitet war, nicht notiert wurde (es war sicherlich nicht xterm). Für den Fall, dass bash dieses Terminal wieder sieht , wird der Metamodus standardmäßig für jedes Terminal aktiviert, das es implementiert.

Thomas Dickey
quelle