終端不接受某些輸入的 unicode 字符

終端不接受某些輸入的 unicode 字符

我需要解決為什麼在終端機中輸入某些 unicode 字元不起作用的原因。

我使用非標準鍵盤佈局(即),它允許我直接輸入 unicode 字符,例如α β γ δ … ∀ ∃ … ∘ ⇒ ⇔,這對於大多數應用程式來說效果很好。

然而,對於諸如rxvt-unicode或 之類的終端xterm,輸入字元不會執行任何操作 –雖然人物表現得非常好當我複製貼上它們時。

有關不起作用的特定字元和鍵的資訊:

  • :十六進位代碼0x21D4;新序列:Capslock + AltGr + m
  • :十六進位代碼:0x2218;新序列:Capslock + AltGr + [

Capslock + AltGr + ⟨some key⟩例如,透過 via 輸入的其他字元在我的終端上也可以正常工作。這讓我很困惑。

那麼有誰知道問題可能出在哪裡?有人知道去哪裡看嗎?

我使用 Parabola GNU/Linux(基本上是 Arch Linux)。

答案1

好吧,我現在至少找到了解決方法。

事實證明,問題在於ifonlyifjot似乎沒有被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,並將失敗的ifonlyifas查找與成功的U21D2as查找進行了比較

相關內容