Терминал не принимает некоторые введенные символы Unicode

Терминал не принимает некоторые введенные символы Unicode

Мне нужно выяснить, почему ввод некоторых символов Unicode в моем терминале не работает.

Я использую раскладку клавиатуры, отличную от QWERTY (а именнонео), что позволяет мне напрямую вводить символы Unicode, такие как α β γ δ … ∀ ∃ … ∘ ⇒ ⇔, что отлично работает для большинства приложений.

Однако с такими терминалами, как rxvt-unicodeили xterm, ввод символов и ничего не происходит –хотя персонажи отображены отличнокогда я их копирую и вставляю.

Информация о конкретных символах и клавишах, которые не работают:

  • : шестнадцатеричный код 0x21D4; нео-последовательность:Capslock + AltGr + m
  • : шестнадцатеричный код: 0x2218; нео-последовательность:Capslock + AltGr + [

Другие символы, введенные через Capslock + AltGr + ⟨some key⟩, например , также работают без проблем на моем терминале. Это сбивает меня с толку.

Так кто-нибудь знает, в чем тут проблема? Кто-нибудь знает, где искать?

Я использую Parabola GNU/Linux (который по сути является Arch Linux).

решение1

Ладно, теперь я хотя бы нашел обходной путь.

Оказывается, проблема в том, что ifonlyifи, jotпохоже, не распознаются xmodmapкак keysymnames. Они используются в моей конфигурации.

$ 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 .

Связанный контент