
Ich muss das Problem beheben, warum die Eingabe einiger Unicode-Zeichen in meinem Terminal nicht funktioniert.
Ich verwende ein anderes Tastaturlayout als QWERTY (nämlichNeo), wodurch ich Unicode-Zeichen wie direkt eingeben kann α β γ δ … ∀ ∃ … ∘ ⇒ ⇔
, was für die meisten Anwendungen problemlos funktioniert.
Bei Terminals wie rxvt-unicode
oder xterm
passiert bei der Eingabe der Zeichen ∘
und ⇔
jedoch nichts –obwohl die Charaktere perfekt dargestellt werdenwenn ich sie kopiere und einfüge.
Informationen zu den konkreten Zeichen und Tasten, die nicht funktionieren:
⇔
: Hex-Code0x21D4
; Neo-Sequenz:Capslock + AltGr + m
∘
: Hex-Code:0x2218
; Neo-Sequenz:Capslock + AltGr + [
Auch andere Zeichen, die über eingegeben werden Capslock + AltGr + ⟨some key⟩
, beispielsweise ⇒
, funktionieren auf meinem Terminal problemlos. Das verwirrt mich.
Weiß also jemand, wo hier das Problem liegen könnte? Hat jemand eine Ahnung, wo man suchen muss?
Ich verwende Parabola GNU/Linux (im Wesentlichen Arch Linux).
Antwort1
Okay, ich habe jetzt zumindest einen Workaround gefunden.
Das Problem besteht offenbar darin, dass ifonlyif
und jot
nicht als Schlüsselsymbolnamen erkannt werden xmodmap
. In meiner Konfiguration werden sie verwendet.
$ xmodmap -pke | egrep "jot|ifonlyif"
keycode 34 = ssharp U1E9E ssharp U1E9E U017F Greek_finalsmallsigma U2212 NoSymbol jot NoSymbol U017F Greek_finalsmallsigma U2212 NoSymbol jot
keycode 58 = m M m M percent Greek_mu KP_1 KP_1 ifonlyif
Wenn man sie durch ihre Unicode-Hex-Codes ersetzt, funktioniert alles gut. Also habe ich einfach Folgendes gemacht:
$ xmodmap -pke | sed -e 's:ifonlyif:U21D4:' -e 's:jot:U2218:' > .Xmodmap
$ xmodmap .Xmodmap
$ xmodmap -pke | egrep "keycode (34|58)"
keycode 34 = ssharp U1E9E ssharp U1E9E U017F Greek_finalsmallsigma U2212 NoSymbol U2218 NoSymbol U017F Greek_finalsmallsigma U2212
keycode 58 = m M m M percent Greek_mu KP_1 KP_1 U21D4
Falls dies für andere hilfreich sein könnte, bin ich wie folgt darauf gekommen: Ich habe die xev
Ausgabe beim Versuch beobachtet, ⇔
(ifonlyif) bzw. ∘
(jot) einzugeben.
KeyPress event, serial 34, synthetic NO, window 0x2400001,
root 0x9b, subw 0x0, time 170075495, (1,1), root:(552,302),
state 0xa0, keycode 58 (keysym 0x8cd, ifonlyif), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 34, synthetic NO, window 0x2400001,
root 0x9b, subw 0x0, time 170075574, (1,1), root:(552,302),
state 0xa0, keycode 58 (keysym 0x8cd, ifonlyif), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 34, synthetic NO, window 0x2400001,
root 0x9b, subw 0x0, time 170076304, (1,1), root:(552,302),
state 0xa0, keycode 34 (keysym 0xbca, jot), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 34, synthetic NO, window 0x2400001,
root 0x9b, subw 0x0, time 170076336, (1,1), root:(552,302),
state 0xa0, keycode 34 (keysym 0xbca, jot), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Θ
Wenn Sie dagegen andere, funktionierende Zeichen ( , ) eingeben, ⇒
erhalten Sie Zeilen wie:
…
state 0xa0, keycode 61 (keysym 0x7c8, Greek_THETA), same_screen YES,
XLookupString gives 2 bytes: (ce 98) "Θ"
…
state 0xa0, keycode 59 (keysym 0x10021d2, U21D2), same_screen YES,
XLookupString gives 3 bytes: (e2 87 92) "⇒"
Ich wusste also, dass das Problem möglicherweise darin bestand, XLookupString
dass nichts zurückgegeben wurde. Also tat ich man xlookupstring
und man xmodmap
. Dann untersuchte ich die Xmodmap-Tabelle xmodmap -pke
und verglich die fehlgeschlagene Suche von ifonlyif
as ⇔
mit der erfolgreichen Suche von U21D2
as ⇒
.