终端不接受某些输入的 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查找进行了比较

相关内容