
我需要解決為什麼在終端機中輸入某些 unicode 字元不起作用的原因。
我使用非標準鍵盤佈局(即新),它允許我直接輸入 unicode 字符,例如α β γ δ … ∀ ∃ … ∘ ⇒ ⇔
,這對於大多數應用程式來說效果很好。
然而,對於諸如rxvt-unicode
或 之類的終端xterm
,輸入字元∘
並⇔
不會執行任何操作 –雖然人物表現得非常好當我複製貼上它們時。
有關不起作用的特定字元和鍵的資訊:
Capslock + AltGr + ⟨some key⟩
例如,透過 via 輸入的其他字元⇒
在我的終端上也可以正常工作。這讓我很困惑。
那麼有誰知道問題可能出在哪裡?有人知道去哪裡看嗎?
我使用 Parabola GNU/Linux(基本上是 Arch Linux)。
答案1
好吧,我現在至少找到了解決方法。
事實證明,問題在於ifonlyif
和jot
似乎沒有被xmodmap
鍵符號名稱識別。它們在我的配置中使用。
$ 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
如果將它們替換為 unicode 十六進位代碼,則一切正常。所以我只是做了:
$ 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
如果這可能對其他人有幫助,我透過以下方式得出這一點:我觀察了xev
嘗試分別輸入⇔
(ifonlyif) 和∘
(jot) 的輸出。
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
相反,輸入其他工作字元 ( Θ
, ⇒
) 會給出如下行:
…
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) "⇒"
所以我知道問題可能是XLookupString
無法返回任何東西。所以我做了man xlookupstring
並且man xmodmap
。然後我調查了 xmodmap 表xmodmap -pke
,並將失敗的ifonlyif
as查找⇔
與成功的U21D2
as查找進行了比較⇒
。